Menyebarkan fungsi Lambda dengan gambar kontainer - AWS Prescriptive Guidance

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

Proses empat langkah untuk membuat fungsi Lambda.

  1. Anda membuat repositori Git dan mengkomit kode aplikasi ke repositori.

  2. AWS CodeBuild Proyek ini dipicu oleh perubahan komit.

  3. CodeBuild Proyek ini membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.

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

TugasDeskripsiKeterampilan yang dibutuhkan

Buat repositori Git.

Buat repositori Git yang akan berisi kode sumber aplikasi, Dockerfile, dan file. buildspec.yaml

Developer

Buat CodeBuild proyek.

Untuk menggunakan CodeBuild proyek untuk membuat gambar Lambda kustom, lakukan hal berikut:

  1. Masuk ke Konsol Manajemen AWS, dan buka CodeBuild konsol di https://console.aws.amazon.com/codesuite/ codebuild/.

  2. Buat proyek baru. Untuk sumber, pilih repositori Git yang Anda buat. Untuk informasi tentang berbagai jenis integrasi repositori Git, lihat dokumentasi Bekerja dengan koneksi.

  3. Konfirmasikan bahwa mode istimewa diaktifkan. Untuk membuat gambar Docker, ini diperlukan. Jika tidak, gambar tidak akan berhasil dibangun.

  4. Berikan nilai untuk nama dan deskripsi proyek.

Developer

Edit Dockerfile.

Dockerfile harus ditempatkan di direktori tingkat atas tempat Anda mengembangkan aplikasi. Kode Python harus ada di folder. src

Saat Anda membuat gambar, gunakan gambar resmi yang didukung Lambda. Jika tidak, kesalahan bootstrap akan terjadi, membuat proses pengepakan lebih sulit.

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: cf-demo

aws ecr create-repository --cf-demo

Repositori akan direferensikan dalam file. buildspec.yaml

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

IsuSolusi

Membangun tidak berhasil.

  1. Periksa apakah mode istimewa dihidupkan untuk CodeBuild proyek.

  2. Pastikan bahwa perintah terkait Docker memiliki izin yang diperlukan. sudoMencoba menambahkan perintah.

  3. Verifikasi bahwa peran IAM yang terkait dengan CodeBuild memiliki kebijakan dengan tindakan yang sesuai untuk berinteraksi dengan Amazon ECR, Amazon S3, dan log. CloudWatch

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