View a markdown version of this page

Deploy fungsi Lambda Python dengan gambar kontainer - AWS Lambda

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

Deploy fungsi Lambda Python dengan gambar kontainer

Ada tiga cara untuk membangun image container untuk fungsi Python Lambda:

  • Menggunakan AWS gambar dasar untuk Python

    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 kustom. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan klien antarmuka runtime untuk Python dalam gambar.

  • Menggunakan gambar non-AWS 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 Python 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.

Halaman ini menjelaskan cara membuat, menguji, dan menerapkan gambar kontainer untuk Lambda.

AWS gambar dasar untuk Python

AWS menyediakan gambar dasar berikut untuk Python:

Tanda Waktu berjalan Sistem operasi Dockerfile Penghentian

3.15

Python 3.15 Amazon Linux 2023 Dockerfile untuk Python 3.15 pada GitHub

Tidak dijadwalkan

3.14

Python 3.14 Amazon Linux 2023 Dockerfile untuk Python 3.14 pada GitHub

30 Juni 2029

3.13

Python 3.13 Amazon Linux 2023 Dockerfile untuk Python 3.13 pada GitHub

30 Juni 2029

3.12

Python 3.12 Amazon Linux 2023 Dockerfile untuk Python 3.12 pada GitHub

31 Okt 2028

3.11

Python 3.11 Amazon Linux 2 Dockerfile untuk Python 3.11 pada GitHub

30 Juni 2027

3.10

Python 3.10 Amazon Linux 2 Dockerfile untuk Python 3.10 pada GitHub

31 Okt 2026

Repositori Amazon ECR: gallery.cr. aws/lambda/pithon

Gambar dasar Python 3.12 dan yang lebih baru didasarkan pada gambar kontainer minimal Amazon Linux 2023. Gambar dasar Python 3.8-3.11 didasarkan pada gambar Amazon Linux 2. AL2023-based gambar 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.

Jalur pencarian ketergantungan di gambar dasar

Ketika Anda menggunakan import pernyataan dalam kode Anda, runtime Python mencari direktori di jalur pencariannya sampai menemukan modul atau paket. Secara default, runtime mencari {LAMBDA_TASK_ROOT} direktori terlebih dahulu. Jika Anda menyertakan versi pustaka yang disertakan runtime dalam gambar Anda, versi Anda akan diutamakan daripada versi yang disertakan dalam runtime.

Langkah-langkah lain di jalur pencarian tergantung pada versi gambar dasar Lambda untuk Python yang Anda gunakan:

  • Python 3.11 dan yang lebih baru: Runtime-included pustaka dan pustaka yang diinstal pip diinstal di direktori. /var/lang/lib/python3.11/site-packages Direktori ini lebih diutam /var/runtime akan di jalur pencarian. Anda dapat mengganti SDK dengan menggunakan pip untuk menginstal versi yang lebih baru. Anda dapat menggunakan pip untuk memverifikasi bahwa SDK yang disertakan runtime dan dependensinya kompatibel dengan paket apa pun yang Anda instal.

  • Python 3.8-3.10: Runtime-included pustaka diinstal di direktori. /var/runtime Pip-installed pustaka diinstal di /var/lang/lib/python3.x/site-packages direktori. Direk /var/runtime tori memiliki prioritas /var/lang/lib/python3.x/site-packages di jalur pencarian.

Anda dapat melihat jalur pencarian lengkap untuk fungsi Lambda Anda dengan menambahkan cuplikan kode berikut.

import sys search_path = sys.path print(search_path)

Menggunakan AWS gambar dasar untuk Python

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Untuk membuat gambar kontainer dari AWS gambar dasar untuk Python
  1. Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.

    mkdir example cd example
  2. Buat file baru yang disebutlambda_function.py. Anda dapat menambahkan contoh kode fungsi berikut ke file untuk pengujian, atau menggunakan milik Anda sendiri.

    contoh Fungsi Python
    import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
  3. Buat file baru yang disebutrequirements.txt. Jika Anda menggunakan kode fungsi sampel dari langkah sebelumnya, Anda dapat membiarkan file kosong karena tidak ada dependensi. Jika tidak, daftarkan setiap perpustakaan yang diperlukan. Misalnya, inilah tampilan requirements.txt Anda jika fungsi Anda menggunakan AWS SDK untuk Python (Boto3):

    contoh requirements.txt
    boto3
  4. Buat Dockerfile baru dengan konfigurasi berikut:

    • A FROM tur properti ke URI gambar dasar.

    • Gunakan perintah COPY untuk menyalin kode fungsi dan dependensi runtime ke{LAMBDA_TASK_ROOT}, variabel Lambda-defined lingkungan.

    • Atur CMD argumen ke pengendali fungsi Lambda.

    Perhatikan bahwa contoh Dockerfile tidak menyertakan instruksi USER. Saat Anda menerapkan image kontainer ke Lambda, Lambda secara otomatis mendefinisikan pengguna Linux default dengan izin yang paling tidak memiliki hak istimewa. Ini berbeda dari perilaku Docker standar yang default ke root pengguna ketika tidak ada USER instruksi yang diberikan.

    contoh Dockerfile
    FROM public.ecr.aws/lambda/python:3.12 # Copy requirements.txt COPY requirements.txt ${LAMBDA_TASK_ROOT} # Install the specified packages RUN pip install -r requirements.txt # Copy function code COPY lambda_function.py ${LAMBDA_TASK_ROOT} # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "lambda_function.handler" ]
  5. Bangun image Docker dengan perintah docker build. Contoh berikut memberi nama gambar docker-image dan memberinya test tag. Untuk membuat gambar Anda kompatibel dengan Lambda, Anda harus menggunakan --provenance=false opsi.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    catatan

    Perintah menentukan --platform linux/amd64 opsi untuk memastikan bahwa wadah Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda ingin membuat fungsi Lambda menggunakan arsitektur set instruksi ARM64, pastikan untuk mengubah perintah untuk menggunakan --platform linux/arm64 opsi sebagai gantinya.

  1. Mulai gambar Docker dengan perintah docker run. Dalam contoh ini, docker-image adalah nama gambar dan test merupakan tag.

    docker run --platform linux/amd64 -p 9000:8080 docker-image:test

    Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal dilocalhost:9000/2015-03-31/functions/function/invocations.

    catatan

    Jika Anda membuat gambar Docker untuk arsitektur set instruksi ARM64, pastikan untuk menggunakan --platform linux/arm64 opsi alih-alih. --platform linux/amd64

  2. Dari jendela terminal baru, posting acara ke titik akhir lokal.

    Linux/macOS

    Di Linux dan macOS, jalankan curl perintah berikut:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan muatan JSON. Contoh:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Di PowerShell, jalankan Invoke-WebRequest perintah berikut:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan muatan JSON. Contoh:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  3. Dapatkan ID kontainer.

    docker ps
  4. Gunakan perintah docker kill untuk menghentikan kontainer. Dalam perintah ini, ganti 3766c4ab331c dengan ID kontainer dari langkah sebelumnya.

    docker kill 3766c4ab331c
Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda
  1. Jalankan perintah get-login-password untuk mengotentikasi Docker CLI ke registri Amazon ECR Anda.

    • Tetapkan --region nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR.

    • Ganti 111122223333 dengan Akun AWS ID Anda.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Buat repositori di Amazon ECR menggunakan perintah create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    catatan

    Repositori Amazon ECR harus Wilayah AWS sama dengan fungsi Lambda.

    Jika berhasil, Anda melihat respons seperti ini:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Salin repositoryUri dari output pada langkah sebelumnya.

  4. Jalankan perintah tag docker untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini:

    • docker-image:testadalah nama dan tag gambar Docker Anda. Ini adalah nama gambar dan tag yang Anda tentukan dalam docker build perintah.

    • Ganti <ECRrepositoryUri> dengan repositoryUri yang Anda salin. Pastikan untuk menyertakan :latest di akhir URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Contoh:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Jalankan perintah docker push untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan :latest di akhir URI repositori.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Buat peran eksekusi untuk fungsi, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran di langkah berikutnya.

  7. Buat fungsi Lambda. UntukImageUri, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan :latest di akhir URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    catatan

    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.

  8. Memanggil fungsi.

    aws lambda invoke --function-name hello-world response.json

    Anda akan melihat respons seperti ini:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Untuk melihat output fungsi, periksa response.json file.

Untuk memperbarui kode fungsi, Anda harus membuat gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan perintah update-function-code untuk menyebarkan gambar ke fungsi Lambda.

Lambda menyelesaikan tag gambar ke intisari gambar tertentu. Ini berarti bahwa jika Anda mengarahkan tag gambar yang digunakan untuk menerapkan fungsi ke gambar baru di Amazon ECR, Lambda tidak secara otomatis memperbarui fungsi untuk menggunakan gambar baru.

Untuk menerapkan gambar baru ke fungsi Lambda yang sama, Anda harus menggunakan perintah update-function-code, bahkan jika tag gambar di Amazon ECR tetap sama. Dalam contoh berikut, --publish opsi membuat versi baru dari fungsi menggunakan gambar kontainer yang diperbarui.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Menggunakan gambar dasar alternatif dengan 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 memperluasAPI runtime, yang mengelola interaksi antara Lambda dan kode fungsi Anda.

Instal klien antarmuka runtime untuk Python menggunakan manajer paket pip:

pip install awslambdaric

Anda juga dapat mengunduh klien antarmuka runtime Python dari GitHub.

Contoh berikut menunjukkan bagaimana membangun image container untuk Python menggunakan gambar non-AWS base. Contoh Dockerfile menggunakan gambar dasar Python resmi. Dockerfile menyertakan klien antarmuka runtime untuk Python.

Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:

Untuk membuat gambar kontainer dari non-AWS gambar dasar
  1. Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.

    mkdir example cd example
  2. Buat file baru yang disebutlambda_function.py. Anda dapat menambahkan contoh kode fungsi berikut ke file untuk pengujian, atau menggunakan milik Anda sendiri.

    contoh Fungsi Python
    import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
  3. Buat file baru yang disebutrequirements.txt. Jika Anda menggunakan kode fungsi sampel dari langkah sebelumnya, Anda dapat membiarkan file kosong karena tidak ada dependensi. Jika tidak, daftarkan setiap perpustakaan yang diperlukan. Misalnya, inilah tampilan requirements.txt Anda jika fungsi Anda menggunakan AWS SDK untuk Python (Boto3):

    contoh requirements.txt
    boto3
  4. Buat Dockerfile baru. Dockerfile berikut menggunakan gambar dasar Python resmi alih-alih gambar AWS dasar. Dockerfile menyertakan klien antarmuka runtime, yang membuat gambar kompatibel dengan Lambda. Contoh berikut Dockerfile menggunakan build multi-tahap.

    • Atur FROM properti ke gambar dasar.

    • Atur ENTRYPOINT ke modul yang Anda inginkan untuk menjalankan wadah Docker saat dimulai. Dalam hal ini, modul adalah klien antarmuka runtime.

    • Atur CMD ke pengendali fungsi Lambda.

    Perhatikan bahwa contoh Dockerfile tidak menyertakan instruksi USER. Saat Anda menerapkan image kontainer ke Lambda, Lambda secara otomatis mendefinisikan pengguna Linux default dengan izin yang paling tidak memiliki hak istimewa. Ini berbeda dari perilaku Docker standar yang default ke root pengguna ketika tidak ada USER instruksi yang diberikan.

    contoh Dockerfile
    # Define custom function directory ARG FUNCTION_DIR="/function" FROM python:3.12 AS build-image # Include global arg in this stage of the build ARG FUNCTION_DIR # Copy function code RUN mkdir -p ${FUNCTION_DIR} COPY . ${FUNCTION_DIR} # Install the function's dependencies RUN pip install \ --target ${FUNCTION_DIR} \ awslambdaric # Use a slim version of the base Python image to reduce the final image size FROM python:3.12-slim # Include global arg in this stage of the build ARG FUNCTION_DIR # Set working directory to function root directory WORKDIR ${FUNCTION_DIR} # Copy in the built dependencies COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR} # Set runtime interface client as default command for the container runtime ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ] # Pass the name of the function handler as an argument to the runtime CMD [ "lambda_function.handler" ]
  5. Bangun image Docker dengan perintah docker build. Contoh berikut memberi nama gambar docker-image dan memberinya test tag. Untuk membuat gambar Anda kompatibel dengan Lambda, Anda harus menggunakan --provenance=false opsi.

    docker buildx build --platform linux/amd64 --provenance=false -t docker-image:test .
    catatan

    Perintah menentukan --platform linux/amd64 opsi untuk memastikan bahwa wadah Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda ingin membuat fungsi Lambda menggunakan arsitektur set instruksi ARM64, pastikan untuk mengubah perintah untuk menggunakan --platform linux/arm64 opsi sebagai gantinya.

Gunakan emulator antarmuka runtime untuk menguji gambar secara lokal. Anda dapat membangun emulator ke dalam gambar Anda atau menggunakan prosedur berikut untuk menginstalnya di mesin lokal Anda.

Untuk menginstal dan menjalankan emulator antarmuka runtime di mesin lokal Anda
  1. Dari direktori proyek Anda, jalankan perintah berikut untuk mengunduh emulator antarmuka runtime (arsitektur x86-64) dari GitHub dan menginstalnya di mesin lokal Anda.

    Linux/macOS
    mkdir -p ~/.aws-lambda-rie && \ curl -Lo ~/.aws-lambda-rie/aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && \ chmod +x ~/.aws-lambda-rie/aws-lambda-rie

    Untuk menginstal emulator arm64, ganti URL GitHub repositori di perintah sebelumnya dengan yang berikut:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
    PowerShell
    $dirPath = "$HOME\.aws-lambda-rie" if (-not (Test-Path $dirPath)) { New-Item -Path $dirPath -ItemType Directory } $downloadLink = "https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie" $destinationPath = "$HOME\.aws-lambda-rie\aws-lambda-rie" Invoke-WebRequest -Uri $downloadLink -OutFile $destinationPath

    Untuk menginstal emulator arm64, ganti $downloadLink dengan yang berikut ini:

    https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie-arm64
  2. Mulai gambar Docker dengan perintah docker run. Perhatikan hal-hal berikut:

    • docker-imageadalah nama gambar dan test merupakan tag.

    • /usr/local/bin/python -m awslambdaric lambda_function.handleradalah yang ENTRYPOINT diikuti oleh CMD dari Dockerfile Anda.

    Linux/macOS
    docker run --platform linux/amd64 -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie \ docker-image:test \ /usr/local/bin/python -m awslambdaric lambda_function.handler
    PowerShell
    docker run --platform linux/amd64 -d -v "$HOME\.aws-lambda-rie:/aws-lambda" -p 9000:8080 ` --entrypoint /aws-lambda/aws-lambda-rie ` docker-image:test ` /usr/local/bin/python -m awslambdaric lambda_function.handler

    Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal dilocalhost:9000/2015-03-31/functions/function/invocations.

    catatan

    Jika Anda membuat gambar Docker untuk arsitektur set instruksi ARM64, pastikan untuk menggunakan --platform linux/arm64 opsi alih-alih. --platform linux/amd64

  3. Posting acara ke titik akhir lokal.

    Linux/macOS

    Di Linux dan macOS, jalankan curl perintah berikut:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan muatan JSON. Contoh:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
    PowerShell

    Di PowerShell, jalankan Invoke-WebRequest perintah berikut:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{}' -ContentType "application/json"

    Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Jika Anda menggunakan kode fungsi Anda sendiri daripada kode fungsi sampel, Anda mungkin ingin memanggil fungsi dengan muatan JSON. Contoh:

    Invoke-WebRequest -Uri "http://localhost:9000/2015-03-31/functions/function/invocations" -Method Post -Body '{"payload":"hello world!"}' -ContentType "application/json"
  4. Dapatkan ID kontainer.

    docker ps
  5. Gunakan perintah docker kill untuk menghentikan kontainer. Dalam perintah ini, ganti 3766c4ab331c dengan ID kontainer dari langkah sebelumnya.

    docker kill 3766c4ab331c
Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda
  1. Jalankan perintah get-login-password untuk mengotentikasi Docker CLI ke registri Amazon ECR Anda.

    • Tetapkan --region nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR.

    • Ganti 111122223333 dengan Akun AWS ID Anda.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-east-1.amazonaws.com
  2. Buat repositori di Amazon ECR menggunakan perintah create-repository.

    aws ecr create-repository --repository-name hello-world --region us-east-1 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
    catatan

    Repositori Amazon ECR harus Wilayah AWS sama dengan fungsi Lambda.

    Jika berhasil, Anda melihat respons seperti ini:

    { "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
  3. Salin repositoryUri dari output pada langkah sebelumnya.

  4. Jalankan perintah tag docker untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini:

    • docker-image:testadalah nama dan tag gambar Docker Anda. Ini adalah nama gambar dan tag yang Anda tentukan dalam docker build perintah.

    • Ganti <ECRrepositoryUri> dengan repositoryUri yang Anda salin. Pastikan untuk menyertakan :latest di akhir URI.

    docker tag docker-image:test <ECRrepositoryUri>:latest

    Contoh:

    docker tag docker-image:test 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  5. Jalankan perintah docker push untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan :latest di akhir URI repositori.

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  6. Buat peran eksekusi untuk fungsi, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran di langkah berikutnya.

  7. Buat fungsi Lambda. UntukImageUri, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan :latest di akhir URI.

    aws lambda create-function \ --function-name hello-world \ --package-type Image \ --code ImageUri=111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --role arn:aws:iam::111122223333:role/lambda-ex
    catatan

    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.

  8. Memanggil fungsi.

    aws lambda invoke --function-name hello-world response.json

    Anda akan melihat respons seperti ini:

    { "ExecutedVersion": "$LATEST", "StatusCode": 200 }
  9. Untuk melihat output fungsi, periksa response.json file.

Untuk memperbarui kode fungsi, Anda harus membuat gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan perintah update-function-code untuk menyebarkan gambar ke fungsi Lambda.

Lambda menyelesaikan tag gambar ke intisari gambar tertentu. Ini berarti bahwa jika Anda mengarahkan tag gambar yang digunakan untuk menerapkan fungsi ke gambar baru di Amazon ECR, Lambda tidak secara otomatis memperbarui fungsi untuk menggunakan gambar baru.

Untuk menerapkan gambar baru ke fungsi Lambda yang sama, Anda harus menggunakan perintah update-function-code, bahkan jika tag gambar di Amazon ECR tetap sama. Dalam contoh berikut, --publish opsi membuat versi baru dari fungsi menggunakan gambar kontainer yang diperbarui.

aws lambda update-function-code \ --function-name hello-world \ --image-uri 111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest \ --publish

Untuk contoh cara membuat gambar Python dari gambar dasar Alpine, lihat Dukungan gambar kontainer untuk Lambda di Blog AWS .