

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

# Buat dan dorong gambar Docker ke Amazon ECR menggunakan GitHub Actions dan Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Ringkasan
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Pola ini menjelaskan bagaimana Anda dapat membuat GitHub alur kerja yang dapat digunakan kembali untuk membangun Dockerfile Anda dan mendorong gambar yang dihasilkan ke Amazon Elastic Container Registry (Amazon ECR). Pola mengotomatiskan proses pembuatan Dockerfiles Anda dengan menggunakan Terraform dan Actions. GitHub Ini meminimalkan kemungkinan kesalahan manusia dan secara substansional mengurangi waktu penyebaran.

Tindakan GitHub push ke cabang utama GitHub repositori Anda memulai penyebaran sumber daya. Alur kerja membuat repositori Amazon ECR unik berdasarkan kombinasi nama GitHub organisasi dan repositori. Kemudian mendorong gambar Dockerfile ke repositori Amazon ECR.

## Prasyarat dan batasan
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+  GitHub Akun aktif.
+ Sebuah [GitHub repositori](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ Terraform versi 1 atau yang lebih baru [diinstal dan](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) dikonfigurasi.
+ [Bucket Amazon Simple Storage Service (Amazon S3) untuk backend Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3)
+ Tabel [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) untuk penguncian dan konsistensi status Terraform. Tabel harus memiliki kunci partisi bernama `LockID` dengan tipe`String`. Jika ini tidak dikonfigurasi, penguncian status akan dinonaktifkan.
+ Peran AWS Identity and Access Management (IAM) yang memiliki izin untuk menyiapkan backend Amazon S3 untuk Terraform. Untuk petunjuk konfigurasi, lihat dokumentasi [Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Keterbatasan**

Kode yang dapat digunakan kembali ini telah diuji hanya dengan GitHub Tindakan.

## Arsitektur
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Tumpukan teknologi target**
+ Repositori Amazon ECR
+ GitHub Tindakan
+ Terraform

**Arsitektur target**

![\[Alur kerja untuk membuat GitHub alur kerja yang dapat digunakan kembali untuk membangun Dockerfile dan mendorong gambar ke Amazon ECR.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Diagram ini menggambarkan hal sebagai berikut:

1. Seorang pengguna menambahkan template Dockerfile dan Terraform ke repositori. GitHub 

2. Penambahan ini memulai alur kerja GitHub Actions.

3. Alur kerja memeriksa apakah ada repositori Amazon ECR. Jika tidak, itu membuat repositori berdasarkan nama GitHub organisasi dan repositori.

4. Alur kerja membangun Dockerfile dan mendorong gambar ke repositori Amazon ECR.

## Alat
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Layanan Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri kontainer terkelola yang aman, terukur, dan andal.

**Alat-alat lainnya**
+ [GitHub Tindakan](https://docs.github.com/en/actions) diintegrasikan ke dalam GitHub platform untuk membantu Anda membuat, berbagi, dan menjalankan alur kerja dalam GitHub repositori Anda. Anda dapat menggunakan GitHub Tindakan untuk mengotomatiskan tugas seperti membangun, menguji, dan menerapkan kode Anda.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola infrastruktur cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di repositori Alur [Kerja Tindakan ECR GitHub Docker](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Saat Anda membuat GitHub Actions, file alur kerja Docker disimpan di `/.github/workflows/` folder repositori ini. Alur kerja untuk solusi ini ada di file [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ `e2e-test`Folder menyediakan contoh Dockerfile untuk referensi dan pengujian.

## Praktik terbaik
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Untuk praktik terbaik dalam menulis Dockerfiles, lihat dokumentasi [Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Gunakan titik [akhir VPC untuk Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) ECR. Titik akhir VPC didukung oleh AWS PrivateLink, teknologi yang memungkinkan Anda mengakses Amazon APIs ECR secara pribadi melalui alamat IP pribadi. Untuk tugas Amazon ECS yang menggunakan tipe peluncuran Fargate, titik akhir VPC memungkinkan tugas untuk menarik gambar pribadi dari Amazon ECR tanpa menetapkan alamat IP publik ke tugas tersebut.

## Epik
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Siapkan penyedia dan repositori OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan OpenID Connect. | Buat penyedia OpenID Connect (OIDC). Anda akan menggunakan penyedia dalam kebijakan kepercayaan untuk peran IAM yang digunakan dalam tindakan ini. Untuk petunjuk, lihat [Mengonfigurasi OpenID Connect di Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub dalam dokumentasi. | Administrator AWS, AWS DevOps, AWS Umum | 
| Kloning GitHub repositori. | Kloning repositori [Alur Kerja Tindakan ECR GitHub Docker](https://github.com/aws-samples/docker-ecr-actions-workflow) ke folder lokal Anda:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps insinyur | 

### Sesuaikan alur kerja yang GitHub dapat digunakan kembali dan terapkan gambar Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Sesuaikan acara yang memulai alur kerja Docker. | Alur kerja untuk solusi ini ada di [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Skrip ini saat ini dikonfigurasi untuk menyebarkan sumber daya saat menerima `workflow_dispatch` acara. Anda dapat menyesuaikan konfigurasi ini dengan mengubah acara ke `workflow_call` dan memanggil alur kerja dari alur kerja induk lain. | DevOps insinyur | 
| Sesuaikan alur kerja. | File [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) dikonfigurasi untuk membuat alur kerja yang dinamis dan dapat digunakan kembali. GitHub Anda dapat mengedit file ini untuk menyesuaikan konfigurasi default, atau Anda dapat meneruskan nilai input dari konsol GitHub Tindakan jika Anda menggunakan `workflow_dispatch` acara untuk memulai penerapan secara manual.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps insinyur | 
| Terapkan templat Terraform. | Alur kerja secara otomatis menyebarkan templat Terraform yang membuat repositori ECR Amazon, berdasarkan peristiwa yang Anda konfigurasikan. GitHub Template ini tersedia sebagai `.tf` file di [root repositori Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Masalah atau kesalahan saat Anda mengonfigurasi Amazon S3 dan DynamoDB sebagai backend jarak jauh Terraform. | Ikuti petunjuk dalam [dokumentasi Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) untuk menyiapkan izin yang diperlukan pada sumber daya Amazon S3 dan DynamoDB untuk konfigurasi backend jarak jauh. | 
| Tidak dapat menjalankan atau memulai alur kerja dengan `workflow_dispatch` acara tersebut. | Alur kerja yang dikonfigurasi untuk diterapkan dari `workflow_dispatch` acara akan berfungsi hanya jika alur kerja dikonfigurasi di cabang utama juga. | 

## Sumber daya terkait
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Menggunakan kembali alur kerja (dokumentasi](https://docs.github.com/en/actions/using-workflows/reusing-workflows)) GitHub 
+ [Memicu alur kerja (dokumentasi](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 