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

Persyaratan

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

  • 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 USERdi 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 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 FROM properti, 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.

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

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

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.