Replikasi gambar kontainer Amazon ECR yang difilter di seluruh akun atau Wilayah - AWS Prescriptive Guidance

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

Replikasi gambar kontainer Amazon ECR yang difilter di seluruh akun atau Wilayah

Abdal Garuba, Amazon Web Services

Ringkasan

Amazon Elastic Container Registry (Amazon ECR) dapat mereplikasi semua gambar kontainer dalam repositori gambar di seluruh Wilayah Amazon Web Services (AWS) dan akun AWS secara native, dengan menggunakan fitur replikasi lintas wilayah dan lintas akun. (Untuk informasi selengkapnya, lihat posting blog AWS Replikasi lintas wilayah di Amazon ECR telah mendarat.) Namun, tidak ada cara untuk memfilter gambar yang disalin di seluruh Wilayah AWS atau akun berdasarkan kriteria apa pun. 

Pola ini menjelaskan cara mereplikasi gambar kontainer yang disimpan di Amazon ECR di seluruh akun AWS dan Wilayah, berdasarkan pola tag gambar. Pola ini menggunakan Amazon CloudWatch Events untuk mendengarkan peristiwa push untuk gambar yang memiliki tag kustom yang telah ditentukan sebelumnya. Acara push memulai CodeBuild proyek AWS dan meneruskan detail gambar ke sana. CodeBuild Proyek menyalin gambar dari registri Amazon ECR sumber ke registri tujuan berdasarkan detail yang diberikan.

Pola ini menyalin gambar yang memiliki tag tertentu di seluruh akun. Misalnya, Anda dapat menggunakan pola ini untuk menyalin hanya gambar yang siap produksi dan aman ke akun AWS produksi. Di akun pengembangan, setelah gambar diuji secara menyeluruh, Anda dapat menambahkan tag yang telah ditentukan ke gambar aman dan menggunakan langkah-langkah dalam pola ini untuk menyalin gambar yang ditandai ke akun produksi.

Prasyarat dan batasan

Prasyarat

  • Akun AWS aktif untuk pendaftar ECR Amazon sumber dan tujuan

  • Izin administratif untuk alat yang digunakan dalam pola ini

  • Docker diinstal pada mesin lokal Anda untuk pengujian

  • AWS Command Line Interface (AWS CLI), untuk autentikasi ke Amazon ECR

Batasan

  • Pola ini mengamati peristiwa push dari registri sumber hanya di satu Wilayah AWS. Anda dapat menerapkan pola ini ke Wilayah lain untuk menonton pendaftar di Wilayah tersebut.

  • Dalam pola ini, satu aturan Amazon CloudWatch Events mendengarkan pola tag gambar tunggal. Jika Anda ingin memeriksa beberapa pola, Anda dapat menambahkan acara untuk mendengarkan pola tag gambar tambahan.

Arsitektur

Arsitektur target

Arsitektur untuk mereplikasi gambar kontainer Amazon ECR yang difilter di seluruh akun dan Wilayah.

Otomatisasi dan skala

Pola ini dapat diotomatisasi dengan skrip infrastruktur sebagai kode (IAc) dan digunakan dalam skala besar. Untuk menggunakan CloudFormation templat AWS untuk menerapkan pola ini, unduh lampiran dan ikuti petunjuk di bagian Informasi tambahan.

Anda dapat mengarahkan beberapa CloudWatch peristiwa Amazon Events (dengan pola peristiwa khusus yang berbeda) ke CodeBuild project AWS yang sama untuk mereplikasi beberapa pola tag gambar, tetapi Anda perlu memperbarui validasi sekunder dalam buildspec.yaml file (yang disertakan dalam lampiran dan di bagian Alat) sebagai berikut untuk mendukung beberapa pola.

... if [[ ${IMAGE_TAG} != release-* ]]; then ...

Alat

Layanan Amazon

  • IAM — AWS Identity and Access Management (IAM) memungkinkan Anda mengelola akses ke layanan dan sumber daya AWS dengan aman. Dalam pola ini, Anda perlu membuat peran IAM lintas akun yang CodeBuild akan diasumsikan AWS saat mendorong gambar kontainer ke registri tujuan.

  • Amazon ECR - Amazon Elastic Container Registry (Amazon ECR) adalah registri kontainer yang dikelola sepenuhnya yang memudahkan untuk menyimpan, mengelola, berbagi, dan menyebarkan gambar dan artefak kontainer Anda di mana saja. Tindakan push gambar ke registri sumber mengirim detail peristiwa sistem ke bus acara yang diambil oleh Amazon CloudWatch Events.

  • AWS CodeBuild — AWS CodeBuild adalah layanan integrasi berkelanjutan yang dikelola sepenuhnya yang menyediakan daya komputasi untuk melakukan pekerjaan seperti menyusun kode sumber, menjalankan pengujian, dan memproduksi artefak yang siap digunakan. Pola ini menggunakan AWS CodeBuild untuk melakukan tindakan penyalinan dari registri Amazon ECR sumber ke registri tujuan.

  • CloudWatch Acara — Amazon CloudWatch Events menghadirkan aliran peristiwa sistem yang menjelaskan perubahan dalam sumber daya AWS. Pola ini menggunakan aturan untuk mencocokkan tindakan push Amazon ECR dengan pola tag gambar tertentu.

Alat

  • Docker CLI — Docker adalah alat yang membuatnya lebih mudah untuk membuat dan mengelola kontainer. Container mengemas aplikasi dan semua dependensinya ke dalam satu unit atau paket yang dapat dengan mudah digunakan pada platform apa pun yang mendukung runtime kontainer.

Kode

Anda dapat menerapkan pola ini dengan dua cara:

  • Penyiapan otomatis: Terapkan dua CloudFormation templat AWS yang disediakan di lampiran. Untuk petunjuk, lihat bagian Informasi tambahan.

  • Pengaturan manual: Ikuti langkah-langkah di bagian Epik

Contoh buildspec.yaml

Jika Anda menggunakan CloudFormation template yang disediakan dengan pola ini, buildspec.yaml file tersebut disertakan dalam CodeBuild sumber daya.

version: 0.2 env: shell: bash phases: install: commands: - export CURRENT_ACCOUNT=$(echo ${CODEBUILD_BUILD_ARN} | cut -d':' -f5) - export CURRENT_ECR_REGISTRY=${CURRENT_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com - export DESTINATION_ECR_REGISTRY=${DESTINATION_ACCOUNT}.dkr.ecr.${DESTINATION_REGION}.amazonaws.com pre_build: on-failure: ABORT commands: - echo "Validating Image Tag ${IMAGE_TAG}" - | if [[ ${IMAGE_TAG} != release-* ]]; then aws codebuild stop-build --id ${CODEBUILD_BUILD_ID} sleep 60 exit 1 fi - aws ecr get-login-password --region ${AWS_REGION} | docker login -u AWS --password-stdin ${CURRENT_ECR_REGISTRY} - docker pull ${CURRENT_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} build: commands: - echo "Assume cross-account role" - CREDENTIALS=$(aws sts assume-role --role-arn ${CROSS_ACCOUNT_ROLE_ARN} --role-session-name Rolesession) - export AWS_DEFAULT_REGION=${DESTINATON_REGION} - export AWS_ACCESS_KEY_ID=$(echo ${CREDENTIALS} | jq -r '.Credentials.AccessKeyId') - export AWS_SECRET_ACCESS_KEY=$(echo ${CREDENTIALS} | jq -r '.Credentials.SecretAccessKey') - export AWS_SESSION_TOKEN=$(echo ${CREDENTIALS} | jq -r '.Credentials.SessionToken') - echo "Logging into cross-account registry" - aws ecr get-login-password --region ${DESTINATION_REGION} | docker login -u AWS --password-stdin ${DESTINATION_ECR_REGISTRY} - echo "Check if Destination Repository exists, else create" - | aws ecr describe-repositories --repository-names ${REPO_NAME} --region ${DESTINATION_REGION} \ || aws ecr create-repository --repository-name ${REPO_NAME} --region ${DESTINATION_REGION} - echo "retag image and push to destination" - docker tag ${CURRENT_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} ${DESTINATION_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG} - docker push ${DESTINATION_ECR_REGISTRY}/${REPO_NAME}:${IMAGE_TAG}

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat peran CloudWatch Acara.

Di akun AWS sumber, buat peran IAM untuk diasumsikan oleh Amazon CloudWatch Events. Peran tersebut harus memiliki izin untuk memulai CodeBuild proyek AWS.

Untuk membuat peran dengan menggunakan AWS CLI, ikuti petunjuk dalam dokumentasi IAM.

Contoh kebijakan kepercayaan (trustpolicy.json): 

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "events.amazonaws.com"}, "Action": "sts:AssumeRole" } }

Contoh kebijakan izin (permissionpolicy.json):

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "codebuild:StartBuild", "Resource": "<CodeBuild Project ARN>" } }
Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur

Buat CodeBuild peran.

Buat peran IAM untuk diasumsikan AWS CodeBuild , dengan mengikuti petunjuk dalam dokumentasi IAM. Peran harus memiliki izin berikut:

Contoh kebijakan kepercayaan (trustpolicy.json):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Contoh kebijakan izin (permissionpolicy.json):

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codebuild:StartBuild", "codebuild:StopBuild", "codebuild:Get*", "codebuild:List*", "codebuild:BatchGet*" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*", "Effect": "Allow" }, { "Action": "sts:AssumeRole", "Resource": "<ARN of destination role>", "Effect": "Allow", "Sid": "AssumeCrossAccountArn" } ] }

Lampirkan kebijakan terkelola AmazonEC2ContainerRegistryReadOnly ke perintah CLI sebagai berikut:

~$ aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name <name of CodeBuild Role>
Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur

Buat peran lintas akun.

Di akun AWS tujuan, buat peran IAM untuk CodeBuild peran AWS untuk diasumsikan oleh akun sumber. Peran lintas akun harus memungkinkan gambar kontainer untuk membuat repositori baru dan mengunggah gambar kontainer ke Amazon ECR.

Untuk membuat peran IAM dengan menggunakan AWS CLI, ikuti petunjuk dalam dokumentasi IAM. 

Untuk mengizinkan CodeBuild proyek AWS dari langkah sebelumnya, gunakan kebijakan kepercayaan berikut:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "<ARN of source codebuild role>" }, "Action": "sts:AssumeRole" } }

Untuk mengizinkan CodeBuild proyek AWS dari langkah sebelumnya untuk menyimpan gambar di registri tujuan, gunakan kebijakan izin berikut:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchCheckLayerAvailability", "ecr:PutImage", "ecr:InitiateLayerUpload", "ecr:UploadLayerPart", "ecr:CompleteLayerUpload", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:GetAuthorizationToken", "ecr:CreateRepository" ], "Resource": "*", "Effect": "Allow" } ] }
Administrator AWS, AWS DevOps, Administrator cloud, arsitek Cloud, DevOps insinyur, administrator sistem AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Buat CodeBuild proyek.

Buat CodeBuild proyek AWS di akun sumber dengan mengikuti petunjuk dalam CodeBuild dokumentasi AWS. Proyek harus berada di Wilayah yang sama dengan registri sumber. 

Konfigurasikan proyek sebagai berikut:

  • Jenis lingkungan: LINUX CONTAINER

  • Peran layanan: CodeBuild Role

  • Mode istimewa: true

  • Gambar lingkungan: aws/codebuild/standard:x.x (gunakan gambar terbaru yang tersedia)

  • Variabel lingkungan:

    • CROSS_ACCOUNT_ROLE_ARN: Nama Sumber Daya Amazon (ARN) dari peran lintas akun

    • DESTINATION_REGION: Nama Wilayah lintas akun

    • DESTINATION_ACCOUNT: Jumlah akun tujuan

  • Spesifikasi build: Gunakan buildspec.yaml file yang tercantum di bagian Tools.

Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat aturan acara.

Karena pola menggunakan fitur pemfilteran konten, Anda perlu membuat acara dengan menggunakan Amazon EventBridge. Buat acara dan target dengan mengikuti petunjuk dalam EventBridge dokumentasi, dengan beberapa modifikasi:

  • Untuk Define pattern, pilih Event Pattern, lalu pilih Custom pattern.

  • Salin kode contoh pola peristiwa kustom berikut ke dalam kotak teks yang disediakan:

    {   "source": ["aws.ecr"],   "detail-type": ["ECR Image Action"],   "detail": {     "action-type": ["PUSH"],     "result": ["SUCCESS"],     "image-tag": [{ "prefix": "release-"}]   } }
  • Untuk target Pilih, pilih CodeBuild proyek AWS, dan tempel ARN untuk CodeBuild project AWS yang Anda buat di epik sebelumnya.

  • Untuk Konfigurasi Input, pilih Input Transformer.

    • Di kotak teks Input Path, tempel:

      {"IMAGE_TAG":"$.detail.image-tag","REPO_NAME":"$.detail.repository-name"}
    • Di kotak teks Template Masukan, tempel:

      {"environmentVariablesOverride": [ {"name": "IMAGE_TAG", "value":<IMAGE_TAG>},{"name":"REPO_NAME","value":<REPO_NAME>}]}
  • Pilih Gunakan peran yang ada, dan pilih nama peran CloudWatch Acara yang Anda buat sebelumnya di epik Buat peran IAM.

Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Otentikasi dengan Amazon ECR.

Otentikasi ke pendaftar sumber dan tujuan dengan mengikuti langkah-langkah dalam dokumentasi Amazon ECR.

Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, DevOps insinyur, arsitek Cloud

Uji replikasi gambar.

Di akun sumber Anda, dorong gambar kontainer ke repositori sumber Amazon ECR baru atau yang sudah ada dengan tag gambar yang diawali dengan. release- Untuk mendorong gambar, ikuti langkah-langkah dalam dokumentasi Amazon ECR

Anda dapat memantau kemajuan CodeBuild proyek di CodeBuild konsol

Setelah CodeBuild proyek berhasil diselesaikan, masuk ke akun AWS tujuan, buka konsol Amazon ECR, dan konfirmasikan bahwa gambar ada di registri ECR Amazon tujuan.

Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur

Uji pengecualian gambar.

Di akun sumber Anda, dorong gambar kontainer ke repositori sumber Amazon ECR baru atau yang sudah ada dengan tag gambar yang tidak memiliki awalan khusus. 

Konfirmasikan bahwa CodeBuild proyek belum dimulai, dan tidak ada gambar kontainer yang muncul di registri tujuan.

Administrator AWS, AWS DevOps, administrator sistem AWS, Administrator cloud, arsitek Cloud, DevOps insinyur

Sumber daya terkait

Informasi tambahan

Untuk secara otomatis menyebarkan sumber daya untuk pola ini, ikuti langkah-langkah berikut:

  1. Unduh lampiran dan ekstrak dua CloudFormation templat: part-1-copy-tagged-images.yaml danpart-2-destination-account-role.yaml.

  2. Masuk ke CloudFormation konsol AWS, dan terapkan part-1-copy-tagged-images.yaml di akun AWS dan Wilayah yang sama dengan sumber pendaftar ECR Amazon. Perbarui parameter sesuai kebutuhan. Template menyebarkan sumber daya berikut:

    • Peran IAM CloudWatch Acara Amazon

    • Peran IAM CodeBuild proyek AWS

    • CodeBuild Proyek AWS

    • Aturan AWS CloudWatch Events

  3. Perhatikan nilai SourceRoleName di tab Output. Anda akan membutuhkan nilai ini di langkah berikutnya.

  4. Terapkan CloudFormation templat kedua,part-2-destination-account-role.yaml, di akun AWS tempat Anda ingin menyalin gambar penampung Amazon ECR. Perbarui parameter sesuai kebutuhan. Untuk SourceRoleName parameter, tentukan nilai dari langkah 3. Template ini menerapkan peran IAM lintas akun.

  5. Validasi replikasi dan pengecualian gambar, seperti yang dijelaskan pada langkah terakhir bagian Epik.

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip