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 wadah untuk fungsi Lambda:
-
Menggunakan AWS gambar 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 AWS OS-only gambar dasar
AWS OS-only gambar dasar
berisi distribusi Amazon Linux dan emulator antarmuka runtime . Gambar-gambar ini biasanya digunakan untuk membuat gambar wadah 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 OS-only dasar untuk mengimplementasikan runtime khusus. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk bahasa Anda dalam gambar. -
Menggunakan non-AWS gambar dasar
Anda dapat menggunakan gambar dasar alternatif dari registri kontainer lain, seperti Alpine Linux atau Debian. Anda juga dapat menggunakan gambar khusus 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 fungsi penampung Lambda untuk menjadi aktif, lihat Menggunakan build multi-tahap
Untuk membuat fungsi Lambda dari image wadah, buat gambar Anda secara lokal dan unggah ke repositori Amazon Elastic Container Registry (Amazon ECR). Jika Anda menggunakan gambar kontainer yang disediakan oleh AWS Marketplace penjual, Anda harus mengkloning gambar ke repositori Amazon ECR pribadi Anda terlebih dahulu. Kemudian, tentukan URI repositori saat Anda membuat fungsi. Repositori Amazon ECR harus Wilayah AWS sama 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 lintas akun Amazon ECR.
catatan
Lambda tidak mendukung titik akhir Amazon ECR FIPS untuk gambar kontainer. Jika URI repositori Anda 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 Lambda-compatible kontainer.
catatan
Anda tidak dapat mengubah jenis paket penerapan (.zip atau image container) untuk fungsi yang ada. Misalnya, Anda tidak dapat mengonversi fungsi gambar kontainer untuk menggunakan arsip berkas.zip. Anda harus membuat fungsi baru.
Topik
Persyaratan
Instal AWS CLI versi 2 dan Docker CLI
-
Gambar wadah harus mengimplementasikanMenggunakan API runtime Lambda untuk runtime khusus. Klien antarmuka runtime sumber terbuka AWS menerapkan 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
/tmpdirektori yang dapat ditulis dengan penyimpanan antara 512 MB dan 10.240 MB, dengan penambahan 1 MB. -
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 bahwa Anda tidak perlu menentukan USER
di Dockerfile Anda. Verifikasi bahwa kode aplikasi Anda tidak bergantung pada file yang dibatasi pengguna Linux lain untuk berjalan. -
Lambda hanya mendukung gambar Linux-based kontainer.
-
Lambda menyediakan gambar dasar multi-arsitektur. Namun, gambar yang Anda buat untuk fungsi Anda harus menargetkan hanya salah satu arsitektur. Lambda tidak mendukung fungsi yang menggunakan gambar kontainer multi-arsitektur.
Menggunakan AWS gambar 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 properti FROM, klien Docker Anda menarik versi terbaru gambar dari repositori Amazon ECR.
Gambar dasar Node.js 20, Python 3.12, Java 21, .NET 8, Ruby 3.3, dan 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 penerapan yang lebih kecil dan versi perpustakaan yang diperbarui sepertiglibc.
AL2023-based gambar menggunakan microdnf (disambungkan sebagaidnf) sebagai manajer paket alih-alihyum, yang merupakan manajer paket default di Amazon Linux 2. microdnfadalah implementasi mandiri daridnf. Untuk daftar paket yang disertakan dalam AL2023-based gambar, lihat kolom Minimal Container di Membandingkan paket yang diinstal pada Amazon Linux 2023 Container Images. Untuk informasi selengkapnya tentang perbedaan antara AL2023 dan Amazon Linux 2, lihat Memperkenalkan runtime Amazon Linux 2023 untuk AWS Lambda
catatan
Untuk menjalankan AL2023-based gambar secara lokal, termasuk dengan 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 AWS OS-only gambar dasar
AWS OS-only gambar dasar
| Tag | Waktu berjalan | Sistem operasi | Dockerfile | Penghentian |
|---|---|---|---|---|
al2023 |
OS-only Waktu pelaksanaan | Amazon Linux 2023 | Dockerfile untuk Runtime aktif OS-only GitHub |
30 Juni 2029 |
Galeri Publik Registri Kontainer Elastis Amazon: gallery.cr. aws/lambda/disediakan
Menggunakan non-AWS gambar 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 yang lebih tinggi)
Lambda mendukung ukuran gambar tidak terkompresi maksimum 10 GB, termasuk semua lapisan.
catatan
-
Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk bahasa Anda dalam gambar.
-
Untuk kinerja optimal, pertahankan ukuran manifes gambar Anda di bawah 25.400 byte. Untuk mengurangi ukuran manifes gambar, minimalkan jumlah lapisan dalam gambar Anda dan kurangi anotasi.
Klien antarmuka runtime
Jika Anda menggunakan gambar OS-only dasar atau gambar dasar alternatif, Anda harus menyertakan klien antarmuka runtime dalam gambar Anda. Klien antarmuka runtime harus memperluasMenggunakan API runtime Lambda untuk runtime khusus, yang mengelola interaksi antara Lambda dan kode fungsi Anda. AWS menyediakan klien antarmuka runtime sumber terbuka untuk bahasa-bahasa berikut:
Jika Anda menggunakan bahasa yang tidak memiliki klien antarmuka runtime yang AWS disediakan, Anda harus membuatnya sendiri.
Izin Amazon ECR
Sebelum Anda membuat fungsi Lambda dari image wadah, Anda harus membuat gambar secara lokal dan mengunggahnya ke repositori Amazon ECR. Saat Anda membuat fungsi, tentukan URI repositori Amazon ECR.
Pastikan bahwa izin untuk pengguna atau peran yang membuat fungsi termasukGetRepositoryPolicy,, SetRepositoryPolicyBatchGetImage, danGetDownloadUrlForLayer.
Untuk contoh, gunakan konsol IAM untuk membuat peran dengan kebijakan berikut:
Izin yang dibutuhkan Lambda untuk mengambil gambar kontainer Anda bergantung pada apakah repositori Amazon ECR berada di AWS akun yang sama dengan fungsi atau di akun yang berbeda. Bagian berikut menjelaskan persyaratan untuk setiap skenario.
catatan
Di IAM, akses akun yang sama hanya memerlukan satu sisi untuk memberikan izin — baik kebijakan berbasis identitas (pada peran) atau kebijakan berbasis sumber daya (di repositori Amazon ECR). Cross-account akses mengharuskan kedua belah pihak untuk memberikan izin — kebijakan berbasis identitas tentang peran dalam akun konsumen DAN kebijakan berbasis sumber daya pada repositori Amazon ECR di akun pemilik harus mengizinkan tindakan tersebut.
Same-account Kebijakan repositori Amazon ECR
Untuk fungsi di akun yang sama dengan gambar kontainer di Amazon ECR, Anda dapat memberikan akses Lambda melalui kebijakan berbasis identitas pada peran eksekusi atau kebijakan berbasis sumber daya di repositori Amazon ECR. Hanya satu sisi yang perlu mengizinkan akses.
Jika Anda memilih untuk menggunakan kebijakan repositori Amazon ECR, tambahkan ecr:BatchGetImage dan ecr:GetDownloadUrlForLayer izin. Contoh berikut menunjukkan kebijakan minimum:
{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }
Untuk informasi selengkapnya tentang izin repositori Amazon ECR, lihat Kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.
Jika repositori Amazon ECR tidak menyertakan izin ini, Lambda mencoba menambahkannya secara otomatis. Lambda dapat menambahkan izin hanya jika pemanggil utama Lambda memiliki ecr:getRepositoryPolicy dan ecr:setRepositoryPolicy izin.
Untuk melihat atau mengedit izin repositori Amazon ECR Anda, ikuti petunjuk di Meng atur pernyataan kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.
Izin lintas akun Amazon ECR
Ketika fungsi dalam satu akun menggunakan gambar kontainer dari repositori Amazon ECR di akun yang berbeda, kedua belah pihak harus memberikan akses. Kebijakan berbasis identitas tentang peran dalam akun konsumen harus memungkinkan ecr:BatchGetImage danecr:GetDownloadUrlForLayer, dan kebijakan berbasis sumber daya pada repositori Amazon ECR di akun pemilik juga harus mengizinkan tindakan ini.
Dalam contoh berikut, kebijakan izin repositori Amazon ECR Anda memerlukan pernyataan berikut untuk memberikan akses ke nomor akun 123456789012.
CrossAccountPermission- Mengizinkan akun 123456789012 untuk membuat dan memperbarui fungsi Lambda yang menggunakan gambar dari repositori ECR ini.
LambdaECRImageCrossAccountRetrievalPolicy— Lambda akhirnya menetapkan status fungsi menjadi tidak aktif jika tidak dipanggil untuk waktu yang lama. Pernyataan ini diperlukan agar Lambda dapat mengambil gambar kontainer untuk pengoptimalan dan caching atas nama fungsi yang dimiliki oleh 123456789012.
contoh— Tambahkan izin lintas akun ke repositori Anda
Untuk memberikan akses ke beberapa akun, Anda menambahkan ID akun ke daftar Prinsipal dalam CrossAccountPermission kebijakan dan ke 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 menetapkan izin sempit dalam kebijakan IAM.
Selain kebijakan repositori Amazon ECR, pengguna atau peran yang membuat fungsi juga harus memiliki BatchGetImage dan GetDownloadUrlForLayer izin dalam kebijakan berbasis identitas mereka.
Siklus hidup fungsi
Setelah Anda mengunggah gambar kontainer baru atau diperbarui, Lambda mengoptimalkan gambar sebelum fungsi dapat memproses pemanggilan. Proses pengoptimalan dapat memakan waktu beberapa detik. Fungsi tetap dalam Pending keadaan sampai proses selesai, ketika status bertransisi keActive. Anda tidak dapat memanggil fungsi sampai mencapai Active status.
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 gambar kontainer yang sesuai tidak ada lagi di Amazon ECR atau izin dicabut, fungsi memasuki Failed status, dan Lambda mengembalikan kegagalan untuk pemanggilan fungsi apa pun.
Anda dapat menggunakan API Lambda untuk mendapatkan informasi tentang status fungsi. Lihat informasi yang lebih lengkap di Status fungsi lambda.