View a markdown version of this page

Lazy-load gambar kontainer dengan Seekable OCI (SOCI) - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Lazy-load gambar kontainer dengan Seekable OCI (SOCI)

Untuk Lambda Event Functions yang digunakan sebagai image container pada Lambda Managed Instances, Lambda mengunduh dan membongkar gambar pada setiap instance sebelum memulai lingkungan eksekusi. Untuk gambar besar, tarikan ini adalah bagian terbesar dari waktu antara menerbitkan versi fungsi atau memperkecil skala dan lingkungan eksekusi menangani pemanggilan pertamanya. Dengan Seekable OCI (SOCI), Lambda dapat memulai lingkungan eksekusi sebelum seluruh gambar diunduh.

SOCI adalah sebuah teknologi open source dikembangkan oleh AWS. Ini menggunakan indeks yang memetakan setiap file dalam gambar ke lokasinya di lapisan gambar. Lambda menggunakan indeks untuk mengambil hanya file sesuai permintaan saat fungsi Anda membacanya, alih-alih mengunduh dan membongkar gambar lengkap sebelum memulai wadah. Gambar kontainer biasanya menggabungkan kumpulan pustaka dan dependensi yang luas, tidak semuanya dibaca selama startup atau pemanggilan tunggal. Lazy loading memanfaatkan ini dengan hanya mengambil apa yang sebenarnya dibaca fungsi Anda, mengurangi waktu hingga pemanggilan pertama dan membuat waktu startup jauh lebih tidak sensitif terhadap ukuran gambar total. Manfaatnya terbesar untuk gambar beberapa gigabyte di mana fungsi Anda hanya membaca sebagian konten per pemanggilan, seperti gambar yang mengemas kerangka kerja pembelajaran mesin.

Cara kerja SOCI pada Instans Terkelola Lambda

  1. Anda membuat indeks SOCI untuk gambar Anda dan mendorongnya ke Amazon ECR di samping gambar. Hasilnya adalah indeks gambar Open Container Initiative (OCI) yang mereferensikan dua artefak: manifes gambar asli Anda dan indeks SOCI.

  2. Anda membuat atau memperbarui fungsi Anda dengan URI gambar yang menunjuk ke indeks gambar. Lambda mendeteksi indeks SOCI dan memungkinkan pemuatan lambat untuk lingkungan eksekusi fungsi itu. Anda tidak perlu mengubah konfigurasi fungsi lainnya.

  3. Lambda mengambil konten gambar sesuai permintaan. File yang dibaca kode inisialisasi Anda diambil selama inisialisasi. File yang dibaca handler Anda untuk pertama kalinya diambil selama pemanggilan itu. Lambda tidak mengunduh sisa gambar di latar belakang.

catatan

Jika fungsi Anda membaca file untuk pertama kalinya selama pemanggilan daripada selama inisialisasi, Lambda mengambil file itu pada pemanggilan pertama, yang meningkatkan durasi pemanggilan itu. Agar durasi pemanggilan tetap konsisten, impor semua pustaka dan baca semua file yang dibutuhkan fungsi Anda dalam kode inisialisasi Anda, bukan di handler. Kami menyarankan untuk menguji fungsi Anda dengan dan tanpa SOCI untuk membandingkan waktu startup dan durasi pemanggilan untuk beban kerja Anda.

Buat indeks SOCI untuk gambar Anda

Contoh berikut berjalan di Amazon Linux 2023. Ini menginstal SOCI snapshotter, containerd, dan nerdctl, kemudian membuat indeks SOCI untuk gambar yang ada di Amazon ECR dan mendorong hasilnya. Ganti nilai placeholder dengan milik Anda sendiri. Untuk cara lain untuk membuat dan mendorong indeks SOCI, lihat Memulai dengan snapshotter SOCI di atas GitHub.

sudo yum install -y soci-snapshotter containerd nerdctl sudo systemctl start soci-snapshotter sudo systemctl restart containerd ACCOUNT_ID="111122223333" REGION="us-east-2" REPOSITORY_NAME="my-function" ORIGINAL_IMAGE_TAG="v1" SOCI_IMAGE_TAG="v1-soci" REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com" aws ecr get-login-password --region $REGION | sudo nerdctl login -u AWS --password-stdin $REGISTRY sudo nerdctl pull $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG sudo nerdctl image convert --soci $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG sudo nerdctl push --platform linux/arm64 $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
catatan

Contoh ini membangun sebuah arm64 (AWS Gambar Graviton). Lambda hanya mendukung gambar wadah arsitektur tunggal, sehingga gambar Anda harus menargetkan arsitektur set instruksi tunggal, dan --platform nilai harus sesuai dengan arsitektur fungsi Anda. Untuk informasi selengkapnya, lihat Memilih dan mengonfigurasi arsitektur set instruksi untuk fungsi Lambda Anda.

Gunakan $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG sebagai URI gambar saat Anda membuat atau memperbarui fungsi Anda. Kemudian publikasikan versi fungsi. Lambda menyelesaikan versi fungsi ke indeks gambar dan memungkinkan pemuatan lambat.

Persyaratan dan pembatasan

Versi indeks SOCI

Lambda hanya mendukung SOCI Index Manifest v2 (tipe media application/vnd.amazon.soci.index.v2+json). Lambda tidak mendukung indeks SOCI Index Manifest v1. Yang nerdctl image convert --soci perintah di bagian sebelumnya menghasilkan indeks v2.

Format indeks gambar

Indeks gambar harus berisi tepat dua entri: indeks SOCI dan satu manifes gambar OCI.

URI citra

Arahkan URI gambar fungsi Anda ke SOCI-indexed tag (misalnya, my-function:v1-soci), bukan pada tag gambar asli. Lambda menyelesaikan versi fungsi ke indeks gambar. Untuk mengubah gambar atau indeks, tekan yang baru SOCI-indexed tag dan perbarui URI gambar fungsi untuk itu.

Ketersediaan

SOCI hanya tersedia untuk fungsi image container yang berjalan pada Lambda Managed Instances.