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
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 WriteGetObjectResponse
di APIReferensi Layanan Penyimpanan Sederhana Amazon.
Mengembalikan header metadata
Anda dapat memperbarui fungsi Lambda Anda untuk mengirim nilai header baru dengan meneruskannya dalam permintaan WriteGetObjectResponse
APIoperasi.
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 WriteGetObjectResponse
APIoperasi.
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 WriteGetObjectResponse
di 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.