

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
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="deploy-lambda-functions-with-container-images-summary"></a>

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
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**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
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Arsitektur target**

![\[Proses empat langkah untuk membuat fungsi Lambda.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

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

1.  AWS CodeBuild Proyek ini dipicu oleh perubahan komit.

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

1. 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Alat
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)AWS 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), yang membantu Anda melihat dan mengedit CloudFormation template secara visual.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah 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](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah 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](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), dan [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) adalah beberapa sistem kontrol sumber berbasis Git yang umum digunakan untuk melacak perubahan kode sumber.

## Praktik terbaik
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ 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](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epik
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Buat proyek di CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Tugas | Deskripsi | Keterampilan 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: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 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](https://gallery.ecr.aws/lambda?page=1). Jika tidak, kesalahan bootstrap akan terjadi, membuat proses pengepakan lebih sulit.Untuk detailnya, lihat bagian [Informasi tambahan](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Buat repositori di Amazon ECR. | Buat repositori kontainer di Amazon ECR. Dalam contoh perintah berikut, nama repositori yang dibuat adalah: `cf-demo`<pre>aws ecr create-repository --cf-demo </pre>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](#deploy-lambda-functions-with-container-images-additional). | 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](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Buat fungsi Lambda untuk menjalankan gambar
<a name="create-the-lambda-function-to-run-the-image"></a>


| 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](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Pengembang aplikasi | 
| Uji fungsi Lambda. | Untuk memanggil dan menguji fungsi, pilih **Uji**. Untuk informasi selengkapnya, lihat dokumentasi [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Pengembang aplikasi | 

## Pemecahan masalah
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Membangun tidak berhasil. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Sumber daya terkait
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Gambar dasar untuk Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Sampel Docker untuk CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Lulus kredensyal sementara](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Informasi tambahan
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**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.txt`Perintah menangkap dependensi yang diperlukan untuk kode. 

`RUN pip install --user -r requirements.txt`Perintah 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. `buildspec`File 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
```