

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)
<a name="lambda-managed-instances-seekable-oci"></a>

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](https://github.com/awslabs/soci-snapshotter) 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
<a name="lambda-managed-instances-seekable-oci-how-it-works"></a>

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.

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

1. 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
<a name="lambda-managed-instances-seekable-oci-create-index"></a>

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](https://github.com/awslabs/soci-snapshotter/blob/main/docs/getting-started.md) 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](foundation-arch.md).

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
<a name="lambda-managed-instances-seekable-oci-requirements"></a>

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.