View a markdown version of this page

Menyebarkan kode Fungsi Web dari Amazon S3 - AWS Lambda

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

Menyebarkan kode Fungsi Web dari Amazon S3

Anda memberikan kode Fungsi Web Lambda sebagai paket penyebaran.zip di bucket Amazon S3. Ini adalah satu-satunya cara untuk menyediakan kode untuk Fungsi Web. Saat Anda membuat Fungsi Web atau revisi, tentukan objek di s3Object bidang, yang bersarang codeConfig di bawah permintaan. buildConfig Dis3Object, sertakan bucket, key, dan versionID opsional. Lambda mereferensikan kode Anda langsung dari ember Anda. Karena Lambda menyematkan setiap revisi ke versi objek tertentu, penerapan Anda dapat direproduksi. Anda dapat menggunakan kembali satu paket penerapan di seluruh akun dan AWS Wilayah.

Prasyarat

Sebelum menerapkan kode Fungsi Web dari Amazon S3, pastikan paket bucket dan deployment memenuhi persyaratan berikut:

Versi S3

Bucket harus mengaktifkan versi S3. Lambda menggunakan versi objek untuk melacak versi kode Anda yang digunakan revisi.

ID Versi

versionIdParameternya opsional dalam permintaan. Jika Anda menghilangkannya, Lambda menggunakan versi terbaru dari objek pada waktu pembuatan. Either way, Lambda menyematkan revisi ke versi objek tertentu.

Ukuran paket penyebaran maksimum

512 MB (dibuka ritsleting).

Berkas entri

Paket deployment harus berisi file entri aplikasi Anda. Secara default, runtime dimuat index.js di root paket. Untuk menggunakan file entri yang berbeda, atur variabel AWS_LAMBDA_NODEJS_ENTRYPOINT lingkungan pada revisi ke jalur file relatif terhadap root paket. Setelah memuat file entri, runtime menunggu server HTTP Anda mulai mendengarkan di host dan port dari variabel AWS_LAMBDA_HTTP_ENDPOINT lingkungan. Jika runtime tidak dapat menyelesaikan file entri, atau server tidak pernah mulai mendengarkan, inisialisasi gagal dan permintaan ke titik akhir gagal.

Lambda tidak memverifikasi bahwa server Anda mulai mendengarkan saat membuat atau memperbarui titik akhir untuk menggunakan revisi. Revisi dan titik akhir masih dapat ditampilkan Active dalam kasus ini. Setelah setiap penerapan, kirim permintaan pengujian dan periksa log aplikasi Anda.

Lokasi ember

Bucket dapat berada di AWS akun yang berbeda dan di AWS Wilayah yang berbeda dari Fungsi Web. Bucket harus berada di AWS partisi yang sama dengan Fungsi Web. Bucket tidak dapat berada di Wilayah keikutsertaan (Wilayah yang tidak diaktifkan secara default). Jika salah satu kondisi tidak terpenuhi, Lambda menolak permintaan tersebut. Cross-Region pengambilan objek menimbulkan biaya transfer data Amazon S3 tambahan. Untuk informasi selengkapnya tentang harga, lihat Harga Amazon S3.

Izin yang diperlukan

Untuk menerapkan kode Fungsi Web dari Amazon S3, Anda harus mengonfigurasi izin untuk identitas panggilan dan prinsip layanan Lambda.

Izin penelepon

Untuk membuat Fungsi Web atau revisi, identitas IAM Anda memerlukan izin berikut pada objek S3:

  • s3:GetObject

  • s3:GetObjectVersion

Untuk bucket lintas akun, kebijakan bucket juga harus memberikan akses identitas panggilan ke objek.

Kebijakan bucket untuk Lambda

Kebijakan bucket harus memberikan Lambda service principal (lambda.amazonaws.com) s3:GetObject dan s3:GetObjectVersion izin. Lingkup kebijakan dengan aws:SourceArn kondisi yang sesuai dengan pola ARN revisi. Gunakan ArnLike dengan wildcard untuk ID revisi, karena Lambda menghasilkan ID revisi saat Anda membuat revisi.

Jika objek dienkripsi dengan AWS KMS key (SSE-KMS), kebijakan kunci juga harus mengizinkan lambda.amazonaws.com untuk memanggil kms:Decrypt kunci itu. Lambda memeriksa akses kepala layanan saat Anda membuat revisi dan menolak permintaan jika akses tidak ada.

Contoh kebijakan bucket berikut memberi Lambda akses untuk membaca paket penerapan Anda untuk setiap revisi Fungsi Web yang ditentukan.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaWebFunctionCodeAccess", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } } ] }

Untuk membatasi akses ke key prefix yang menyimpan paket deployment Anda, ubah Resource nilainya menjadi, di mana nama bucket Andaarn:aws:s3:::my-bucket/my-prefix/*, dan my-bucket my-prefix merupakan key prefix. Simpan /* di akhir awalan. Jangan ubah revision/* wildcard diaws:SourceArn.

Membuat Fungsi Web dengan kode dari Amazon S3

Anda menentukan paket penyebaran S3 Anda di codeConfig bagian. buildConfig Prosedur berikut menunjukkan cara membuat Fungsi Web dan cara membuat revisi baru menggunakan. AWS CLI

Untuk membuat Fungsi Web dengan kode dari Amazon S3 (AWS CLI)
  • Jalankan perintah berikut untuk membuat Fungsi Web yang mereferensikan paket deployment .zip Anda di Amazon S3.

    aws lambda-web create-web-function \ --function-name my-web-app \ --revision-config '{ "buildConfig": { "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'

    Ketika Anda menghilangkanversionId, Lambda menggunakan versi terbaru dari objek pada waktu pembuatan.

Untuk membuat revisi baru dengan versi objek tertentu (AWS CLI)
  • Jalankan perintah berikut untuk membuat revisi baru yang menggunakan versi tertentu dari paket penyebaran Anda.

    aws lambda-web create-web-function-revision \ --function-name my-web-app \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip", "versionId": "abc123def456" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'

    Dengan menentukanversionId, Anda menyematkan revisi ke versi objek yang tepat daripada versi terbaru.

Siklus hidup objek

Jangan hapus objek S3 atau hapus akses Lambda untuk revisi aktif

Lambda mereferensikan kode Anda dari bucket Amazon S3 Anda. Jika Anda menghapus objek S3 yang digunakan revisi, atau versi objek tertentu yang digunakan revisi, revisi akan berpindah ke status Failed saat Lambda selanjutnya memverifikasi akses ke objek, dan kemudian tidak dapat lagi melayani lalu lintas. Simpan versi objek untuk semua revisi yang masih Anda gunakan.

Menghapus akses kepala layanan Lambda ke bucket memiliki efek yang sama. Jika Anda mengubah kebijakan bucket untuk menolak atau menghapus s3:GetObject dan s3:GetObjectVersion izin untuklambda.amazonaws.com, revisi yang ada yang mereferensikan objek dalam bucket tersebut akan dipindahkan ke status. Failed Pertahankan objek dan akses baca kepala layanan Lambda selama revisi apa pun mereferensikan objek tersebut.

FailedNegara adalah permanen. Memulihkan objek yang dihapus atau izin bucket tidak mengembalikan revisi ke status. Active Untuk memulihkan, buat revisi baru yang mereferensikan versi objek yang tersedia, lalu perbarui bobot revisi titik akhir Anda untuk mengarahkan lalu lintas ke sana. Untuk pola penerapan, lihatPola deployment.

Lambda tidak secara otomatis mengalihkan lalu lintas dari revisi. Failed Permintaan bahwa rute titik akhir ke Failed revisi ditolak dengan kode status HTTP 409 dan header lambda-web-error-type respons dari. Platform.RevisionNotActive Jika titik akhir membebani lalu lintas di beberapa revisi, hanya bagian permintaan yang diarahkan ke revisi yang terpengaruh; permintaan yang diarahkan ke Failed revisi sehat disajikan secara normal. Untuk menghentikan kegagalan, perbarui bobot revisi titik akhir untuk menghapus revisi. Failed

Menimpa objek dengan unggahan baru membuat versi S3 baru. Ini tidak memengaruhi revisi yang ada: saat Anda membuat revisi, Lambda menyelesaikan dan menyematkan versi objek yang tepat, bahkan ketika Anda menghilangkannya. versionId Namun, jika Anda menghapus versi objek lama yang direferensikan revisi, revisi tersebut Failed pindah ke status. Mengunggah objek pengganti tidak membantu, karena penggantian adalah versi baru dengan ID versi yang berbeda.

Multi-Region penyebaran

Untuk Fungsi Web dengan MultiRegion atau PerRegion titik akhir, Lambda membaca objek sumber Anda dari bucket yang Anda tentukan, di Wilayah mana pun bucket berada. Lambda kemudian mereplikasi artefak kode yang disiapkan yang diturunkan dari objek itu ke Wilayah lain. Anda tidak perlu menyalin paket penerapan Anda ke bucket di Wilayah lain. Untuk informasi lebih lanjut tentang apa yang direplikasi Lambda, lihat. Apa yang direplikasi Lambda