

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

# Salin gambar wadah Amazon ECR di seluruh Akun AWS dan Wilayah AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Ringkasan
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Pola ini menunjukkan kepada Anda cara menggunakan pendekatan tanpa server untuk mereplikasi gambar yang ditandai dari repositori Amazon Elastic Container Registry (Amazon ECR) yang ada ke repositori lain dan. Akun AWS Wilayah AWS Solusinya digunakan AWS Step Functions untuk mengelola alur kerja replikasi dan AWS Lambda fungsi untuk menyalin gambar kontainer besar.

Amazon ECR menggunakan fitur replikasi [lintas wilayah](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) dan [lintas akun](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) asli yang mereplikasi gambar kontainer di seluruh Wilayah dan akun. Tetapi fitur-fitur ini mereplikasi gambar hanya dari saat replikasi dihidupkan. Tidak ada mekanisme untuk mereplikasi gambar yang ada di Wilayah dan akun yang berbeda. 

Pola ini membantu tim kecerdasan buatan (AI) mendistribusikan model pembelajaran mesin kontainerisasi (ML), kerangka kerja (misalnya, PyTorch, dan Hugging Face) TensorFlow, dan dependensi ke akun dan Wilayah lain. Ini dapat membantu Anda mengatasi batas layanan dan mengoptimalkan sumber daya komputasi GPU. Anda juga dapat secara selektif mereplikasi repositori Amazon ECR dari akun sumber dan Wilayah tertentu. Untuk informasi selengkapnya, lihat [Replikasi Lintas Wilayah di Amazon ECR](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/) telah mendarat.

## Prasyarat dan batasan
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Prasyarat**
+ Dua atau lebih aktif Akun AWS (satu akun sumber dan satu akun tujuan, minimal)
+ Izin yang sesuai AWS Identity and Access Management (IAM) di semua akun
+ Docker untuk membangun gambar wadah Lambda
+ AWS Command Line Interface (AWS CLI) dikonfigurasi untuk semua akun

**Batasan**
+ **Pengecualian gambar yang tidak ditandai -** Solusinya hanya menyalin gambar kontainer yang memiliki tag eksplisit. Ini melewatkan gambar yang tidak ditandai yang ada dengan intisari. `SHA256`
+ Batasan **batas waktu eksekusi Lambda — AWS Lambda dibatasi hingga batas waktu eksekusi maksimum 15 menit, yang mungkin tidak cukup untuk menyalin gambar atau repositori kontainer** besar.
+ **Manajemen gambar kontainer manual -** Kode `crane-app.py` Python memerlukan pembangunan kembali dan penempatan kembali gambar kontainer Lambda.
+ **Kapasitas pemrosesan paralel terbatas -** Pengaturan `MaxConcurrency` status membatasi berapa banyak repositori yang dapat Anda salin pada saat yang bersamaan. Namun, Anda dapat mengubah pengaturan ini di AWS CloudFormation template akun sumber. Perhatikan bahwa nilai konkurensi yang lebih tinggi dapat menyebabkan Anda melebihi batas tingkat layanan dan kuota eksekusi Lambda tingkat akun.

## Arsitektur
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Target tumpukan**

Pola ini memiliki empat komponen utama:
+ **Infrastruktur akun sumber —** CloudFormation template yang membuat komponen orkestrasi
+ **Infrastruktur akun tujuan -** CloudFormation templat yang membuat peran akses lintas akun
+ Fungsi **Lambda - Fungsi** berbasis Python yang menggunakan Crane untuk penyalinan gambar yang efisien
+ **Gambar kontainer -** Wadah Docker yang mengemas fungsi Lambda dengan alat yang diperlukan

**Arsitektur target**

![\[alt text not found\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Alur kerja Step Functions**

Mesin status Step Functions mengatur hal berikut, seperti yang ditunjukkan pada diagram berikut:
+ `PopulateRepositoryList`**—** Memindai repositori Amazon ECR dan mengisi Amazon DynamoDB
+ `GetRepositoryList`**-** Mengambil daftar repositori unik dari DynamoDB
+ `DeduplicateRepositories`**—** Memastikan bahwa tidak ada pemrosesan duplikat
+ `CopyRepositories`**—** Menangani penyalinan paralel repositori
+ `NotifySuccess`/`NotifyFailure`**—** Pemberitahuan Amazon Simple Notification Service (Amazon SNS) berdasarkan hasil eksekusi

![\[alt text not found\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Alat
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Alat Amazon**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi Lambda dan lainnya untuk membangun aplikasi bisnis yang penting. Layanan AWS 

**Alat-alat lainnya**
+ [Crane](https://michaelsauter.github.io/crane/index.html) adalah alat orkestrasi Docker. Ini mirip dengan Docker Compose tetapi memiliki fitur tambahan.
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi di tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.

**Repositori kode**
+ Kode untuk pola ini tersedia di GitHub [sample-ecr-copy repositori](https://github.com/aws-samples/sample-ecr-copy). Anda dapat menggunakan CloudFormation template dari repositori untuk membuat sumber daya yang mendasarinya.

## Praktik terbaik
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Persiapkan lingkungan Anda
<a name="prepare-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan AWS CLI profil. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 
| Kumpulkan informasi yang diperlukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 
| Kloning repositori. | Kloning repositori pola ke workstation lokal Anda:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps insinyur, insinyur data, insinyur ML | 

### Menyebarkan infrastruktur untuk akun tujuan
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi template. | Validasi CloudFormation template:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps insinyur, insinyur ML, Insinyur data | 
| Menyebarkan infrastruktur tujuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 

### Bangun dan terapkan gambar kontainer Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan kontainer build. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Bangun gambar kontainer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Buat repositori dan unggah gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 

### Menyebarkan infrastruktur akun sumber
<a name="deploy-the-source-account-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan parameter penerapan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, DevOps insinyur, insinyur ML | 
| Validasi template sumber. | Validasi CloudFormation template sumber:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Insinyur data, insinyur ML, DevOps insinyur | 
| Menyebarkan infrastruktur sumber. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi penerapan dan kumpulkan output. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Konfirmasikan langganan email Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 

### Jalankan dan pantau proses penyalinan
<a name="run-and-monitor-the-copy-process"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan dan pantau proses penyalinan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Jalankan fungsi langkah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Pantau kemajuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Periksa hasilnya. | Tunggu proses selesai (diperbarui setiap 30 detik):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps insinyur, insinyur ML, Insinyur data | 
| Verifikasi gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 

## Pemecahan masalah
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Fungsi langkah gagal dijalankan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Sumber daya terkait
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Dokumentasi derek](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [Apa itu Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Apa itu Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Informasi tambahan
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parameter konfigurasi**


| 
| 
| Parameter | Deskripsi | Contoh | 
| --- |--- |--- |
| `SourceAccountId` |  Akun AWS ID Sumber | `11111111111` | 
| `DestinationAccountId` |  Akun AWS ID Tujuan | `22222222222` | 
| `DestinationRegion` | Target Wilayah AWS | `us-east-2` | 
| `SourceRegion` | Sumber Wilayah AWS | `us-east-1` | 
| `NotificationEmail` | Email untuk notifikasi | `abc@xyz.com` | 
| `RepositoryList` | Repositori untuk disalin | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI gambar kontainer Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 