Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat fungsi Lambda menggunakan gambar kontainer
Kode AWS Lambda fungsi Anda terdiri dari skrip atau program yang dikompilasi dan dependensinya. Gunakan paket deployment untuk men-deploy fungsi kode Anda ke Lambda. Lambda mendukung dua tipe paket deployment: gambar kontainer dan arsip file .zip.
Ada tiga cara untuk membangun image kontainer untuk fungsi Lambda:
-
Menggunakan gambar AWS dasar untuk Lambda
Gambar AWS dasar dimuat sebelumnya dengan runtime bahasa, klien antarmuka runtime untuk mengelola interaksi antara Lambda dan kode fungsi Anda, dan emulator antarmuka runtime untuk pengujian lokal.
-
Menggunakan gambar AWS dasar khusus OS
AWS Gambar dasar khusus OS
berisi distribusi Amazon Linux dan emulator antarmuka runtime . Gambar-gambar ini biasanya digunakan untuk membuat gambar kontainer untuk bahasa yang dikompilasi, seperti Go dan Rust, dan untuk versi bahasa atau bahasa yang Lambda tidak menyediakan gambar dasar, seperti Node.js 19. Anda juga dapat menggunakan gambar dasar khusus OS untuk mengimplementasikan runtime kustom. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk bahasa Anda dalam gambar. -
Menggunakan gambar AWS non-dasar
Anda dapat menggunakan gambar dasar alternatif dari registri kontainer lain, seperti Alpine Linux atau Debian. Anda juga dapat menggunakan gambar kustom yang dibuat oleh organisasi Anda. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk bahasa Anda dalam gambar.
Tip
Untuk mengurangi waktu yang dibutuhkan agar fungsi kontainer Lambda menjadi aktif, lihat Menggunakan build multi-tahap
Untuk membuat fungsi Lambda dari gambar kontainer, buat gambar Anda secara lokal dan unggah ke repositori Amazon Elastic Container Registry (AmazonECR). Kemudian, tentukan repositori URI saat Anda membuat fungsi. ECRRepositori Amazon harus sama Wilayah AWS dengan fungsi Lambda. Anda dapat membuat fungsi menggunakan gambar di AWS akun yang berbeda, selama gambar berada di Wilayah yang sama dengan fungsi Lambda. Untuk informasi selengkapnya, lihat Izin ECR lintas akun Amazon.
catatan
Lambda tidak mendukung ECR FIPS titik akhir Amazon untuk gambar kontainer. Jika repositori Anda URI termasukecr-fips
, Anda menggunakan titik akhir. FIPS Contoh:111122223333.dkr.ecr-fips.us-east-1.amazonaws.com
.
Halaman ini menjelaskan jenis gambar dasar dan persyaratan untuk membuat gambar kontainer yang kompatibel dengan Lambda.
catatan
Anda tidak dapat mengubah jenis paket penerapan (.zip atau image kontainer) untuk fungsi yang ada. Misalnya, Anda tidak dapat mengonversi fungsi gambar kontainer untuk menggunakan arsip file.zip. Anda harus membuat fungsi baru.
Topik
Persyaratan
Instal AWS Command Line Interface (AWS CLI) versi 2 dan Docker CLI
-
Gambar kontainer harus mengimplementasikan fileMenggunakan runtime Lambda untuk runtime khusus API. Klien antarmuka runtime AWS sumber terbuka mengimplementasikan file. API Anda dapat menambahkan klien antarmuka runtime untuk gambar dasar pilihan Anda untuk membuatnya kompatibel dengan Lambda.
-
Gambar kontainer harus dapat berjalan pada sistem file hanya baca. Kode fungsi Anda dapat mengakses
/tmp
direktori yang dapat ditulis dengan penyimpanan antara 512 MB dan 10.240 MB, dengan penambahan 1 MB, penyimpanan. -
Pengguna Lambda default harus dapat membaca semua file yang diperlukan untuk menjalankan kode fungsi Anda. Lambda mengikuti praktik terbaik keamanan dengan mendefinisikan pengguna Linux default dengan izin yang paling tidak istimewa. Ini berarti Anda tidak perlu menentukan a USER
di Dockerfile Anda. Verifikasi bahwa kode aplikasi Anda tidak bergantung pada file yang dibatasi pengguna Linux lain untuk berjalan. -
Lambda hanya mendukung gambar kontainer berbasis Linux.
-
Lambda menyediakan gambar dasar multi-arsitektur. Namun, gambar yang Anda buat untuk fungsi Anda harus menargetkan hanya satu arsitektur. Lambda tidak mendukung fungsi yang menggunakan gambar kontainer multi-arsitektur.
Menggunakan gambar AWS dasar untuk Lambda
Anda dapat menggunakan salah satu gambar AWS dasar
AWS secara berkala memberikan pembaruan pada gambar AWS dasar untuk Lambda. Jika Dockerfile Anda menyertakan nama gambar di FROM properti, klien Docker Anda akan menarik versi terbaru gambar dari repositori Amazon. ECR
Node.js 20, Python 3.12, Java 21,. NET8, Ruby 3.3, dan gambar dasar yang lebih baru didasarkan pada gambar kontainer minimal Amazon Linux 2023. Gambar dasar sebelumnya menggunakan Amazon Linux 2. AL2023 memberikan beberapa keunggulan dibandingkan Amazon Linux 2, termasuk jejak penyebaran yang lebih kecil dan versi pustaka yang diperbarui seperti. glibc
AL2Gambar berbasis 023 menggunakan microdnf
(symlinked asdnf
) sebagai manajer paket, bukanyum
, yang merupakan pengelola paket default di Amazon Linux 2. microdnf
adalah implementasi mandiri dari. dnf
Untuk daftar paket yang disertakan dalam gambar AL2 berbasis 023, lihat kolom Kontainer Minimal di Membandingkan paket yang diinstal pada Gambar Kontainer Amazon Linux 2023. Untuk informasi selengkapnya tentang perbedaan antara AL2 023 dan Amazon Linux 2, lihat Memperkenalkan runtime Amazon Linux 2023 untuk AWS Lambda
catatan
Untuk menjalankan gambar AL2 berbasis 023 secara lokal, termasuk with AWS Serverless Application Model (AWS SAM), Anda harus menggunakan Docker versi 20.10.10 atau yang lebih baru.
Untuk membuat gambar kontainer menggunakan gambar AWS dasar, pilih instruksi untuk bahasa pilihan Anda:
Menggunakan gambar AWS dasar khusus OS
AWS Gambar dasar khusus OS
Tanda | Waktu berjalan | Sistem operasi | Dockerfile | penghentian |
---|---|---|---|---|
al2023 |
Runtime Khusus OS | Amazon Linux 2023 | Dockerfile untuk Runtime khusus OS aktif GitHub |
Tidak dijadwalkan |
al2 |
Runtime Khusus OS | Amazon Linux 2 | Dockerfile untuk Runtime khusus OS aktif GitHub |
Tidak dijadwalkan |
Galeri Publik Registri Kontainer Elastis Amazon: gallery.ecr.aws/lambda/provided
Menggunakan gambar AWS non-dasar
Lambda mendukung gambar apa pun yang sesuai dengan salah satu format manifes gambar berikut:
Docker Image Manifest V2, skema 2 (digunakan dengan Docker versi 1.10 dan yang lebih baru)
Spesifikasi Open Container Initiative (OCI) (v1.0.0 dan lebih tinggi)
Lambda mendukung ukuran gambar maksimum yang tidak terkompresi 10 GB, termasuk semua lapisan.
catatan
Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk bahasa Anda dalam gambar.
Klien antarmuka runtime
Jika Anda menggunakan gambar dasar khusus OS atau gambar dasar alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime harus memperluasMenggunakan runtime Lambda untuk runtime khusus API, yang mengelola interaksi antara Lambda dan kode fungsi Anda. AWS menyediakan klien antarmuka runtime sumber terbuka untuk bahasa berikut:
Jika Anda menggunakan bahasa yang tidak memiliki klien antarmuka runtime AWS yang disediakan, Anda harus membuatnya sendiri.
ECRIzin Amazon
Sebelum Anda membuat fungsi Lambda dari gambar kontainer, Anda harus membangun gambar secara lokal dan mengunggahnya ke repositori Amazon. ECR Saat Anda membuat fungsi, tentukan ECR repositori URI Amazon.
Pastikan bahwa izin untuk pengguna atau peran yang membuat fungsi termasuk GetRepositoryPolicy
danSetRepositoryPolicy
.
Misalnya, gunakan IAM konsol untuk membuat peran dengan kebijakan berikut:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:
us-east-1
:111122223333
:repository/hello-world
" } ] }
Kebijakan ECR repositori Amazon
Untuk fungsi di akun yang sama dengan gambar penampung di AmazonECR, Anda dapat menambahkan ecr:BatchGetImage
dan ecr:GetDownloadUrlForLayer
mengizinkan kebijakan ECR repositori Amazon Anda. Contoh berikut menunjukkan kebijakan minimum:
{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }
Untuk informasi selengkapnya tentang izin ECR repositori Amazon, lihat Kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.
Jika ECR repositori Amazon tidak menyertakan izin ini, Lambda menambahkan ecr:BatchGetImage
dan ecr:GetDownloadUrlForLayer
ke izin repositori gambar kontainer. Lambda dapat menambahkan izin ini hanya jika pemanggil utama Lambda memiliki dan izin. ecr:getRepositoryPolicy
ecr:setRepositoryPolicy
Untuk melihat atau mengedit izin ECR repositori Amazon Anda, ikuti petunjuk di Menyetel pernyataan kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.
Izin ECR lintas akun Amazon
Akun yang berbeda di wilayah yang sama dapat membuat fungsi yang menggunakan gambar kontainer yang dimiliki oleh akun Anda. Dalam contoh berikut, kebijakan izin ECR repositori Amazon Anda memerlukan pernyataan berikut untuk memberikan akses ke nomor akun 123456789012.
CrossAccountPermission— Memungkinkan akun 123456789012 untuk membuat dan memperbarui fungsi Lambda yang menggunakan gambar dari repositori ini. ECR
L ambdaECRImage CrossAccountRetrievalPolicy - Lambda pada akhirnya akan menyetel status fungsi menjadi tidak aktif jika tidak dipanggil untuk jangka waktu yang lama. Pernyataan ini diperlukan agar Lambda dapat mengambil gambar kontainer untuk optimasi dan caching atas nama fungsi yang dimiliki oleh 123456789012.
contoh — Tambahkan izin lintas akun ke repositori Anda
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPermission", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "AWS": "arn:aws:iam::
123456789012
:root" } }, { "Sid": "LambdaECRImageCrossAccountRetrievalPolicy", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "StringLike": { "aws:sourceARN": "arn:aws:lambda:us-east-1
:123456789012
:function:*" } } } ] }
Untuk memberikan akses ke beberapa akun, Anda menambahkan akun IDs ke daftar Utama dalam CrossAccountPermission
kebijakan dan daftar Evaluasi kondisi diLambdaECRImageCrossAccountRetrievalPolicy
.
Jika Anda bekerja dengan beberapa akun di AWS Organisasi, sebaiknya Anda menghitung setiap ID akun dalam kebijakan izin. ECR Pendekatan ini sejalan dengan praktik terbaik AWS keamanan dalam menyetel izin sempit dalam IAM kebijakan.
Selain izin Lambda, pengguna atau peran yang membuat fungsi juga harus memiliki BatchGetImage
dan izin. GetDownloadUrlForLayer
Siklus hidup fungsi
Setelah Anda mengunggah gambar kontainer baru atau yang diperbarui, Lambda mengoptimalkan gambar sebelum fungsi dapat memproses pemanggilan. Proses pengoptimalan dapat memakan waktu beberapa detik. Fungsi tetap dalam status Pending
sampai proses selesai. Fungsi selanjutnya bertransisi ke status Active
. Sewaktu berstatus Pending
, Anda dapat memanggil fungsi, tetapi operasi lain pada fungsi gagal. Invokasi yang terjadi saat pembaruan gambar sedang berlangsung menjalankan kode dari gambar sebelumnya.
Jika fungsi tidak dipanggil selama beberapa minggu, Lambda mengeklaim kembali versi dioptimalkan, dan fungsi bertransisi ke status Inactive
. Untuk mengaktifkan kembali fungsinya, Anda harus memanggilnya. Lambda menolak invokasi pertama dan fungsi memasuki status Pending
sampai Lambda mengoptimalkan kembali gambar. Fungsi kemudian kembali ke status Active
.
Lambda secara berkala mengambil gambar kontainer terkait dari repositori Amazon. ECR Jika image kontainer yang sesuai tidak ada lagi di Amazon ECR atau izin dicabut, fungsi akan memasuki Failed
status, dan Lambda mengembalikan kegagalan untuk pemanggilan fungsi apa pun.
Anda dapat menggunakan Lambda API untuk mendapatkan informasi tentang status fungsi. Untuk informasi selengkapnya, lihat Status fungsi Lambda.