View a markdown version of this page

Buat fungsi Lambda menggunakan gambar kontainer - AWS Lambda

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 dalam dokumentasi Docker. Untuk membangun image kontainer yang efisien, ikuti Praktik terbaik untuk menulis Dockerfiles.

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.

Persyaratan

Instal AWS CLI versi 2 dan Docker CLI. Selain itu, perhatikan persyaratan berikut:

  • 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 /tmp direktori 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 untuk Lambda untuk membangun image container untuk kode fungsi Anda. Gambar dasar yang dimuat sebelumnya dengan runtime bahasa dan komponen lain yang diperlukan untuk menjalankan gambar kontainer pada Lambda. Anda menambahkan kode fungsi dan dependensi ke gambar dasar, lalu mengemasnya sebagai gambar kontainer.

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. Untuk menggunakan gambar dasar diperbarui, Anda harus membangun kembali gambar kontainer Anda dan memperbarui kode fungsi.

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 di AWS Compute Blog.

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 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.

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:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world" } ] }

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
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "CrossAccountPermission", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Resource": "arn:aws:ecr:us-east-1:123456789012:repository/example-lambda-repository" }, { "Sid": "LambdaECRImageCrossAccountRetrievalPolicy", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "ArnLike": { "aws:sourceARN": "arn:aws:lambda:us-east-1:123456789012:function:*" } }, "Resource": "arn:aws:ecr:us-east-1:123456789012:repository/example-lambda-repository" } ] }

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.