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

Untuk membuat fungsi Lambda dari image kontainer, buat gambar Anda secara lokal dan unggah ke repositori Amazon Elastic Container Registry (Amazon ECR). Kemudian, tentukan URI repositori saat Anda membuat fungsi. Repositori Amazon ECR 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 lintas akun Amazon ECR.

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.

Persyaratan

Instal AWS Command Line Interface (AWS CLI) versi 2 dan CLI Docker. Selain itu, perhatikan persyaratan berikut:

  • Gambar kontainer harus mengimplementasikan fileAPI runtime Lambda. 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, 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. 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 wadah multi-arsitektur.

Menggunakan gambar AWS dasar untuk Lambda

Anda dapat menggunakan salah satu gambar AWS dasar untuk Lambda untuk membangun gambar kontainer 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 akan 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, AL2023, 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 penyebaran yang lebih kecil dan versi pustaka yang diperbarui seperti. glibc

Gambar berbasis AL2023 menggunakan microdnf (symlinked asdnf) sebagai manajer paket, bukanyum, yang merupakan pengelola paket default di Amazon Linux 2. microdnfadalah implementasi mandiri dari. dnf Untuk daftar paket yang disertakan dalam gambar berbasis AL2023, lihat kolom Penampung Minimal di Membandingkan paket yang diinstal pada Gambar Kontainer Amazon Linux 2023. Untuk informasi selengkapnya tentang perbedaan antara AL2023 dan Amazon Linux 2, lihat Memperkenalkan runtime Amazon Linux 2023 untuk AWS Lambda di Blog Komputasi. AWS

catatan

Untuk menjalankan gambar berbasis AL2023 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 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.

Tanda Waktu berjalan Sistem operasi Dockerfile penghentian

al2023

Runtime Khusus OS Amazon Linux 2023 Dockerfile untuk Runtime khusus OS aktif GitHub

al2

Runtime Khusus OS Amazon Linux 2 Dockerfile untuk Runtime khusus OS aktif GitHub

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 yang 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 memperluasAPI runtime Lambda, 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.

Izin Amazon ECR

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 URI repositori Amazon ECR.

Pastikan bahwa izin untuk pengguna atau peran yang membuat fungsi termasuk GetRepositoryPolicy danSetRepositoryPolicy.

Untuk contoh, gunakan konsol IAM 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 repositori Amazon ECR

Untuk fungsi di akun yang sama dengan gambar penampung di Amazon ECR, Anda dapat menambahkan ecr:BatchGetImage dan ecr:GetDownloadUrlForLayer mengizinkan kebijakan repositori Amazon ECR 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 repositori Amazon ECR, lihat Kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.

Jika repositori Amazon ECR tidak mencakup izin ini, Lambda menambahkan ecr:BatchGetImage dan ecr:GetDownloadUrlForLayer untuk 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 repositori Amazon ECR Anda, ikuti petunjuk dalam Menyetel pernyataan kebijakan repositori pribadi di Panduan Pengguna Amazon Elastic Container Registry.

Izin lintas akun Amazon ECR

Akun yang berbeda di wilayah yang sama dapat membuat fungsi yang menggunakan gambar kontainer yang dimiliki oleh akun Anda. Dalam contoh berikut, kebijakan izin repositori Amazon ECR Anda memerlukan pernyataan berikut untuk memberikan akses ke nomor akun 123456789012.

  • CrossAccountIzin - Memungkinkan akun 123456789012 untuk membuat dan memperbarui fungsi Lambda yang menggunakan gambar dari repositori ECR ini.

  • Kebijakan LambDaecr ImageCross AccountRetrieval — Lambda pada akhirnya akan menyetel status fungsi menjadi tidak aktif jika tidak dipanggil untuk 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 ID akun 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 kebijakan IAM.

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 API Lambda untuk mendapatkan informasi tentang status fungsi. Untuk informasi selengkapnya, lihat Status fungsi Lambda.