Otomatiskan pengaturan Lambda Objek S3 dengan templat CloudFormation - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Otomatiskan pengaturan Lambda Objek S3 dengan templat CloudFormation

Anda dapat menggunakan AWS CloudFormation template untuk membuat Titik Akses Lambda Objek Amazon S3 dengan cepat. CloudFormationTemplate secara otomatis membuat resource yang relevan, mengkonfigurasi AWS Identity and Access Management (IAM) peran, dan menyiapkan AWS Lambda fungsi yang secara otomatis menangani permintaan melalui Object Lambda Access Point. Dengan CloudFormation template, Anda dapat menerapkan praktik terbaik, meningkatkan postur keamanan Anda, dan mengurangi kesalahan yang disebabkan oleh proses manual.

GitHub Repositori ini berisi CloudFormation template dan kode sumber fungsi Lambda. Untuk petunjuk tentang cara menggunakan templat, lihat Membuat Titik Akses Objek Lambda.

Fungsi Lambda yang disediakan dalam templat tidak menjalankan transformasi apa pun. Sebagai gantinya, ini mengembalikan objek Anda apa adanya dari bucket S3. Anda dapat mengkloning fungsi dan menambahkan kode transformasi Anda sendiri untuk mengubah dan memproses data saat dikembalikan ke aplikasi. Untuk informasi selengkapnya tentang fungsi Anda, lihat Memodifikasi fungsi Lambda dan Menulis fungsi Lambda untuk Titik Akses S3 Lambda Objek.

Memodifikasi templat

Membuat titik akses pendukung baru

S3 Lambda Objek menggunakan dua titik akses, Titik Akses Lambda Objek dan titik akses S3 standar, yang disebut sebagai titik akses pendukung. Saat Anda membuat permintaan ke Titik Akses Lambda Objek, S3 akan memanggil Lambda atas nama Anda, atau mendelegasikan permintaan tersebut ke titik akses pendukung, bergantung pada konfigurasi Lambda Objek S3. Anda dapat membuat titik akses pendukung baru dengan meneruskan parameter berikut sebagai bagian dari perintah aws cloudformation deploy saat mendeploy templat.

CreateNewSupportingAccessPoint=true
Mengonfigurasi muatan fungsi

Anda dapat mengonfigurasi payload untuk menyediakan data tambahan ke fungsi Lambda dengan meneruskan parameter berikut sebagai bagian dari perintah aws cloudformation deploy saat menerapkan templat.

LambdaFunctionPayload="format=json"
Mengaktifkan pemantauan Amazon CloudWatch

Anda dapat mengaktifkan CloudWatch pemantauan dengan meneruskan parameter berikut sebagai bagian dari aws cloudformation deploy perintah saat menerapkan template.

EnableCloudWatchMonitoring=true

Parameter ini memungkinkan Titik Akses Objek Lambda Anda untuk metrik permintaan Amazon S3 dan membuat CloudWatch dua alarm untuk memantau kesalahan sisi klien dan sisi server.

catatan

CloudWatch Penggunaan Amazon akan dikenakan biaya tambahan. Untuk informasi lebih lanjut tentang metrik permintaan Amazon S3, lihat Pemantauan dan pencatatan titik akses.

Untuk detail harganya, lihat Harga CloudWatch .

Mengonfigurasi konkurensi yang tersedia

Untuk mengurangi latensi, Anda dapat mengonfigurasi konkurensi yang disediakan untuk fungsi Lambda yang mendukung Titik Akses Lambda Object dengan mengedit templat untuk menyertakan baris berikut di bawah Resources.

LambdaFunctionVersion: Type: AWS::Lambda::Version Properties: FunctionName: !Ref LambdaFunction ProvisionedConcurrencyConfig: ProvisionedConcurrentExecutions: Integer
catatan

Anda akan dikenakan biaya tambahan untuk penyediaan konkurensi. Untuk informasi selengkapnya tentang konkurensi yang disediakan, lihat Mengelola konkurensi Lambda yang disediakan dalam Panduan Pengembang AWS Lambda .

Untuk detail harganya, lihat Harga AWS Lambda.

Memodifikasi fungsi Lambda

Mengubah nilai header untuk permintaan GetObject

Secara default, fungsi Lambda meneruskan semua header, kecuali Content-Length danETag, dari permintaan yang ditetapkan sebelumnya ke klien. URL GetObject Berdasarkan kode transformasi Anda dalam fungsi Lambda, Anda dapat memilih untuk mengirim nilai header baru ke GetObject klien.

Anda dapat memperbarui fungsi Lambda Anda untuk mengirim nilai header baru dengan meneruskannya dalam operasi. WriteGetObjectResponse API

Misalnya, jika fungsi Lambda Anda menerjemahkan teks dalam objek Amazon S3 ke bahasa yang berbeda, Anda dapat meneruskan nilai baru di header Content-Language. Anda dapat melakukan ini dengan memodifikasi fungsi writeResponse sebagai berikut:

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, ContentLanguage: 'my-new-language' }).promise(); }

Untuk daftar lengkap header yang didukung, lihat WriteGetObjectResponsedi APIReferensi Layanan Penyimpanan Sederhana Amazon.

Mengembalikan header metadata

Anda dapat memperbarui fungsi Lambda Anda untuk mengirim nilai header baru dengan meneruskannya dalam permintaan WriteGetObjectResponseAPIoperasi.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest, 'my-new-header': 'my-new-value' }, ...headers }).promise(); }
Mengembalikan kode status baru

Anda dapat mengembalikan kode status kustom ke GetObject klien dengan meneruskannya dalam permintaan WriteGetObjectResponseAPIoperasi.

async function writeResponse (s3Client: S3, requestContext: GetObjectContext, transformedObject: Buffer, headers: Headers): Promise<PromiseResult<{}, AWSError>> { const { algorithm, digest } = getChecksum(transformedObject); return s3Client.writeGetObjectResponse({ RequestRoute: requestContext.outputRoute, RequestToken: requestContext.outputToken, Body: transformedObject, Metadata: { 'body-checksum-algorithm': algorithm, 'body-checksum-digest': digest }, ...headers, StatusCode: Integer }).promise(); }

Untuk daftar lengkap kode status yang didukung, lihat WriteGetObjectResponsedi APIReferensi Layanan Penyimpanan Sederhana Amazon.

Menerapkan Range dan partNumber parameter ke objek sumber

Secara default, Object Lambda Access Point yang dibuat oleh CloudFormation template dapat menangani parameter Range danpartNumber. Fungsi Lambda menerapkan rentang atau nomor bagian yang diminta ke objek yang diubah. Untuk melakukannya, fungsi harus mengunduh seluruh objek dan menjalankan transformasi. Dalam beberapa kasus, rentang objek Anda yang diubah mungkin dipetakan tepat ke rentang objek sumber Anda. Artinya, meminta rentang byte A-B pada objek sumber dan menjalankan transformasi mungkin menghasilkan hasil yang sama seperti meminta seluruh objek, menjalankan transformasi, dan mengembalikan rentang byte A-B pada objek yang diubah.

Dalam kasus seperti itu, Anda dapat mengubah implementasi fungsi Lambda untuk menerapkan rentang atau nomor bagian langsung ke objek sumber. Pendekatan ini mengurangi latensi fungsi keseluruhan dan memori yang diperlukan. Untuk informasi selengkapnya, lihat Bekerja dengan Range and partNumber headers.

Menonaktifkan penanganan Range dan partNumber

Secara default, Object Lambda Access Point yang dibuat oleh CloudFormation template dapat menangani parameter Range danpartNumber. Jika Anda tidak memerlukan perilaku ini, Anda dapat menonaktifkannya dengan menghapus baris berikut dari templat:

AllowedFeatures: - GetObject-Range - GetObject-PartNumber - HeadObject-Range - HeadObject-PartNumber
Mengubah objek yang berukuran besar

Secara default, fungsi Lambda memproses seluruh objek dalam memori sebelum dapat mulai streaming respons ke S3 Lambda Objek. Anda dapat memodifikasi fungsi untuk mengalirkan respons saat melakukan transformasi. Melakukannya akan membantu mengurangi latensi transformasi dan ukuran memori fungsi Lambda. Untuk implementasi contoh tersebut, lihat Contoh konten terkompresi Stream.