Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan fungsi Lambda dengan gambar kontainer
Ram Kandaswamy, Amazon Web Services
Ringkasan
AWS Lambda mendukung gambar kontainer sebagai model penerapan. Pola ini menunjukkan cara menerapkan fungsi Lambda melalui gambar kontainer.
Lambda adalah layanan komputasi tanpa server dan berbasis peristiwa yang dapat Anda gunakan untuk menjalankan kode untuk hampir semua jenis aplikasi atau layanan backend tanpa menyediakan atau mengelola server. Dengan dukungan gambar kontainer untuk fungsi Lambda, Anda mendapatkan manfaat penyimpanan hingga 10 GB untuk artefak aplikasi Anda dan kemampuan untuk menggunakan alat pengembangan gambar kontainer yang sudah dikenal.
Contoh dalam pola ini menggunakan Python sebagai bahasa pemrograman yang mendasarinya, tetapi Anda dapat menggunakan bahasa lain, seperti Java, Node.js, atau Go. Untuk sumbernya, pertimbangkan sistem berbasis Git seperti GitHub,, atau Bitbucket GitLab, atau gunakan Amazon Simple Storage Service (Amazon S3).
Prasyarat dan batasan
Prasyarat
Amazon Elastic Container Registry (Amazon ECR) diaktifkan
Kode aplikasi
Gambar Docker dengan klien antarmuka runtime dan versi terbaru Python
Pengetahuan tentang Git
Batasan
Ukuran gambar maksimum yang didukung adalah 10 GB.
Runtime maksimum untuk penerapan kontainer berbasis Lambda adalah 15 menit.
Arsitektur
Arsitektur target

Anda membuat repositori Git dan mengkomit kode aplikasi ke repositori.
AWS CodeBuild Proyek ini dipicu oleh perubahan komit.
CodeBuild Proyek ini membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.
Anda membuat fungsi Lambda menggunakan gambar di Amazon ECR.
Otomatisasi dan skala
Pola ini dapat diotomatisasi dengan menggunakan AWS CloudFormation AWS Cloud Development Kit (AWS CDK),, atau operasi API dari SDK. Lambda dapat secara otomatis menskalakan berdasarkan jumlah permintaan, dan Anda dapat menyetelnya dengan menggunakan parameter konkurensi. Untuk informasi selengkapnya, lihat dokumentasi Lambda.
Alat
Layanan AWS
AWS CloudFormationAWS CloudFormationhelps Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS Pola ini menggunakan AWS CloudFormation Application Composer, yang membantu Anda melihat dan mengedit CloudFormation template secara visual.
AWS CodeBuildadalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
Alat-alat lainnya
Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. GitHub
, GitLab , dan Bitbucket adalah beberapa sistem kontrol sumber berbasis Git yang umum digunakan untuk melacak perubahan kode sumber.
Praktik terbaik
Jadikan fungsi Anda seefisien dan sekecil mungkin untuk menghindari memuat file yang tidak perlu.
Berusahalah untuk memiliki lapisan statis yang lebih tinggi di daftar file Docker Anda, dan tempatkan lapisan yang lebih sering berubah di bawah. Ini meningkatkan caching, yang meningkatkan kinerja.
Pemilik gambar bertanggung jawab untuk memperbarui dan menambal gambar. Tambahkan irama pembaruan itu ke proses operasional Anda. Lihat informasi yang lebih lengkap dalam dokumentasi AWS Lambda.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat repositori Git. | Buat repositori Git yang akan berisi kode sumber aplikasi, Dockerfile, dan file. | Developer |
Buat CodeBuild proyek. | Untuk menggunakan CodeBuild proyek untuk membuat gambar Lambda kustom, lakukan hal berikut:
| Developer |
Edit Dockerfile. | Dockerfile harus ditempatkan di direktori tingkat atas tempat Anda mengembangkan aplikasi. Kode Python harus ada di folder. Saat Anda membuat gambar, gunakan gambar resmi yang didukung Lambda Untuk detailnya, lihat bagian Informasi tambahan. | Developer |
Buat repositori di Amazon ECR. | Buat repositori kontainer di Amazon ECR. Dalam contoh perintah berikut, nama repositori yang dibuat adalah:
Repositori akan direferensikan dalam file. | Administrator AWS, Pengembang |
Dorong gambar ke Amazon ECR. | Anda dapat menggunakannya CodeBuild untuk melakukan proses pembuatan gambar. CodeBuild memerlukan izin untuk berinteraksi dengan Amazon ECR dan bekerja dengan S3. Sebagai bagian dari proses, image Docker dibuat dan didorong ke registri Amazon ECR. Untuk detail tentang template dan kode, lihat bagian Informasi tambahan. | Developer |
Verifikasi bahwa gambar ada di repositori. | Untuk memverifikasi bahwa gambar ada di repositori, di konsol Amazon ECR, pilih Repositori. Gambar harus terdaftar, dengan tag dan dengan hasil laporan pemindaian kerentanan jika fitur itu diaktifkan di pengaturan Amazon ECR. Untuk informasi selengkapnya, lihat dokumentasi AWS. | Developer |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat fungsi Lambda. | Di konsol Lambda, pilih Create function, lalu pilih Container image. Masukkan nama fungsi dan URI untuk gambar yang ada di repositori Amazon ECR, lalu pilih Create function. Untuk informasi selengkapnya, lihat dokumentasi AWS Lambda. | Pengembang aplikasi |
Uji fungsi Lambda. | Untuk memanggil dan menguji fungsi, pilih Uji. Untuk informasi selengkapnya, lihat dokumentasi AWS Lambda. | Pengembang aplikasi |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
Membangun tidak berhasil. |
|
Sumber daya terkait
Informasi tambahan
Edit Dockerfile
Kode berikut menunjukkan perintah yang Anda edit di Dockerfile:
FROM public.ecr.aws/lambda/python:3.xx # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} COPY requirements.txt ${LAMBDA_TASK_ROOT} # install dependencies RUN pip3 install --user -r requirements.txt # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.lambda_handler" ]
Dalam FROM perintah, gunakan nilai yang sesuai untuk versi Python yang didukung oleh Lambda (misalnya,). 3.12 Ini akan menjadi gambar dasar yang tersedia di repositori gambar Amazon ECR publik.
COPY app.py ${LAMBDA_TASK_ROOT}Perintah menyalin kode ke direktori root tugas, yang akan digunakan fungsi Lambda. Perintah ini menggunakan variabel lingkungan sehingga kita tidak perlu khawatir tentang jalur yang sebenarnya. Fungsi yang akan dijalankan diteruskan sebagai argumen ke CMD [ "app.lambda_handler" ] perintah.
COPY requirements.txtPerintah menangkap dependensi yang diperlukan untuk kode.
RUN pip install --user -r requirements.txtPerintah menginstal dependensi ke direktori pengguna lokal.
Untuk membangun gambar Anda, jalankan perintah berikut.
docker build -t <image name> .
Tambahkan gambar di Amazon ECR
Dalam kode berikut, ganti aws_account_id dengan nomor akun, dan ganti us-east-1 jika Anda menggunakan Wilayah yang berbeda. buildspecFile menggunakan nomor CodeBuild build untuk mengidentifikasi versi gambar secara unik sebagai nilai tag. Anda dapat mengubah ini agar sesuai dengan kebutuhan Anda.
Kode kustom buildspec
phases: install: runtime-versions: python: 3.xx pre_build: commands: - python3 --version - pip3 install --upgrade pip - pip3 install --upgrade awscli - sudo docker info build: commands: - echo Build started on `date` - echo Building the Docker image... - ls - cd app - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER . - docker container ls post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER