Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Replizieren Sie gefilterte Amazon ECR-Container-Images über Konten oder Regionen hinweg
Erstellt von Abdal Garuba (AWS)
Umgebung: Produktion | Technologien: Container und Mikroservices; DevOps | AWS-Services: Amazon EC2 Container Registry; Amazon CloudWatch; AWS CodeBuild; AWS Identity and Access Management; AWS CLI |
Übersicht
Amazon Elastic Container Registry (Amazon ECR) kann alle Container-Images in einem Image-Repository über Amazon Web Services (AWS) -Regionen und AWS-Konten nativ replizieren, indem die Funktionen für die regionsübergreifende und kontoübergreifende Replikation verwendet werden. (Weitere Informationen finden Sie im AWS-Blogbeitrag Regionsübergreifende Replikation in Amazon ECR ist gelandet
Dieses Muster beschreibt, wie Container-Images, die in Amazon ECR gespeichert sind, auf der Grundlage von Image-Tag-Mustern über AWS-Konten und Regionen hinweg repliziert werden. Das Muster verwendet Amazon CloudWatch Events, um auf Push-Ereignisse für Bilder zu warten, die über ein vordefiniertes, benutzerdefiniertes Tag verfügen. Ein Push-Ereignis startet ein CodeBuild AWS-Projekt und übergibt die Bilddetails an dieses Projekt. Das CodeBuild Projekt kopiert die Bilder auf der Grundlage der bereitgestellten Details aus der Amazon ECR-Quellregistrierung in die Zielregistrierung.
Dieses Muster kopiert Bilder, die bestimmte Tags haben, kontenübergreifend. Sie können dieses Muster beispielsweise verwenden, um nur produktionsbereite, sichere Images auf das AWS-Produktionskonto zu kopieren. Im Entwicklungskonto können Sie, nachdem die Bilder gründlich getestet wurden, den sicheren Images ein vordefiniertes Tag hinzufügen und die markierten Bilder mithilfe der Schritte in diesem Muster in das Produktionskonto kopieren.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto für Amazon ECR-Quell- und Zielregister
Administratorberechtigungen für die in diesem Muster verwendeten Tools
Docker
wurde zum Testen auf Ihrem lokalen Computer installiert AWS-Befehlszeilenschnittstelle (AWS CLI) für die Authentifizierung bei Amazon ECR
Einschränkungen
Dieses Muster überwacht die Push-Ereignisse der Quellregistrierung nur in einer AWS-Region. Sie können dieses Muster in anderen Regionen bereitstellen, um Registrierungen in diesen Regionen zu überwachen.
In diesem Muster wartet eine Amazon CloudWatch Events-Regel auf ein einzelnes Bild-Tag-Muster. Wenn Sie nach mehreren Mustern suchen möchten, können Sie Ereignisse hinzufügen, um auf zusätzliche Bild-Tag-Muster zu warten.
Architektur
Zielarchitektur
![Architektur für die Replikation gefilterter Amazon ECR-Container-Images über Konten und Regionen hinweg.](images/pattern-img/a0f635e4-3ba5-4411-b9f8-54cfc228535a/images/2cb7962d-5b45-41a2-ba8c-7a18f01b617a.png)
Automatisierung und Skalierung
Dieses Muster kann mit einem Infrastructure-as-Code-Skript (IaC) automatisiert und in großem Umfang eingesetzt werden. Um dieses Muster mithilfe von CloudFormation AWS-Vorlagen bereitzustellen, laden Sie den Anhang herunter und folgen Sie den Anweisungen im Abschnitt Zusätzliche Informationen.
Sie können mehrere Amazon CloudWatch Events-Ereignisse (mit unterschiedlichen benutzerdefinierten Ereignismustern) auf dasselbe CodeBuild AWS-Projekt verweisen, um mehrere Image-Tag-Muster zu replizieren. Sie müssen jedoch die sekundäre Validierung in der buildspec.yaml
Datei (die im Anhang und im Abschnitt Tools enthalten ist) wie folgt aktualisieren, um mehrere Muster zu unterstützen.
... if [[ ${IMAGE_TAG} != release-* ]]; then ...
Tools
Amazon-Dienste
IAM
— Mit AWS Identity and Access Management (IAM) können Sie den Zugriff auf AWS-Services und -Ressourcen sicher verwalten. In diesem Muster müssten Sie die kontoübergreifende IAM-Rolle erstellen, die AWS beim Push von Container-Images in die Zielregistrierung CodeBuild übernimmt. Amazon ECR
— Amazon Elastic Container Registry (Amazon ECR) ist eine vollständig verwaltete Container-Registry, die es einfach macht, Ihre Container-Images und Artefakte überall zu speichern, zu verwalten, zu teilen und bereitzustellen. Image-Push-Aktionen an die Quellregistrierung senden Systemereignisdetails an den Event-Bus, der von Amazon CloudWatch Events abgeholt wird. AWS CodeBuild
— AWS CodeBuild ist ein vollständig verwalteter Continuous-Integration-Service, der Rechenleistung für Aufgaben wie das Kompilieren von Quellcode, das Ausführen von Tests und das Erstellen von Artefakten bereitstellt, die sofort einsatzbereit sind. Dieses Muster verwendet AWS CodeBuild , um den Kopiervorgang von der Amazon ECR-Quellregistrierung in die Zielregistrierung durchzuführen. CloudWatch Ereignisse — Amazon CloudWatch Events liefert einen Stream von Systemereignissen, die Änderungen an AWS-Ressourcen beschreiben. Dieses Muster verwendet Regeln, um Amazon ECR-Push-Aktionen einem bestimmten Image-Tag-Muster zuzuordnen.
Tools
Docker CLI
— Docker ist ein Tool, das das Erstellen und Verwalten von Containern erleichtert. Container packen eine Anwendung und all ihre Abhängigkeiten in einer Einheit oder einem Paket, das problemlos auf jeder Plattform bereitgestellt werden kann, die die Container-Laufzeit unterstützt.
Code
Sie können dieses Muster auf zwei Arten implementieren:
Automatisierte Einrichtung: Stellen Sie die beiden CloudFormation AWS-Vorlagen bereit, die im Anhang enthalten sind. Anweisungen finden Sie im Abschnitt Zusätzliche Informationen.
Manuelle Einrichtung: Folge den Schritten im Abschnitt Epics.
Beispiel für buildspec.yaml
Wenn Sie die CloudFormation Vorlagen verwenden, die mit diesem Muster bereitgestellt werden, ist die buildspec.yaml
Datei in den Ressourcen enthalten. CodeBuild
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}
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie eine Rolle „ CloudWatch Ereignisse“. | Erstellen Sie im AWS-Quellkonto eine IAM-Rolle, die Amazon CloudWatch Events übernehmen soll. Die Rolle sollte über Berechtigungen zum Starten eines CodeBuild AWS-Projekts verfügen. Folgen Sie den Anweisungen in der IAM-Dokumentation, um die Rolle mithilfe der AWS-CLI zu erstellen. Beispiel für eine Vertrauensrichtlinie (
Beispiel für eine Berechtigungsrichtlinie (
| AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Erstellen Sie eine CodeBuild Rolle. | Erstellen Sie eine IAM-Rolle, die AWS übernehmen CodeBuild soll, indem Sie den Anweisungen in der IAM-Dokumentation folgen. Die Rolle sollte über die folgenden Berechtigungen verfügen:
Beispiel für eine Vertrauensrichtlinie (
Beispiel für eine Berechtigungsrichtlinie (
Hängen Sie die verwaltete Richtlinie wie folgt
| AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Erstellen Sie eine kontoübergreifende Rolle. | Erstellen Sie im AWS-Zielkonto eine IAM-Rolle für die CodeBuild AWS-Rolle, die das Quellkonto übernehmen soll. Die kontoübergreifende Rolle sollte es Container-Images ermöglichen, ein neues Repository zu erstellen und Container-Images auf Amazon ECR hochzuladen. Folgen Sie den Anweisungen in der IAM-Dokumentation, um die IAM-Rolle mithilfe der AWS-CLI zu erstellen. Verwenden Sie die folgende Vertrauensrichtlinie, um das CodeBuild AWS-Projekt aus dem vorherigen Schritt zuzulassen:
Verwenden Sie die folgende Berechtigungsrichtlinie, damit das CodeBuild AWS-Projekt aus dem vorherigen Schritt Bilder in der Zielregistrierung speichern kann:
| AWS-Administrator DevOps, AWS, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie ein CodeBuild Projekt. | Erstellen Sie ein CodeBuild AWS-Projekt im Quellkonto, indem Sie den Anweisungen in der CodeBuild AWS-Dokumentation folgen. Das Projekt sollte sich in derselben Region wie die Quellregistrierung befinden. Konfigurieren Sie das Projekt wie folgt:
| AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie eine Ereignisregel. | Da das Muster die Inhaltsfilterfunktion verwendet, müssen Sie das Ereignis mithilfe von Amazon erstellen EventBridge. Erstellen Sie das Ereignis und das Ziel, indem Sie den Anweisungen in der EventBridge Dokumentation folgen, mit einigen Änderungen:
| AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Authentifizieren Sie sich mit Amazon ECR. | Authentifizieren Sie sich sowohl bei der Quell- als auch bei der Zielregistrierung, indem Sie die Schritte in der Amazon ECR-Dokumentation befolgen. | AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, DevOps Ingenieur, Cloud-Architekt |
Testen Sie die Image-Replikation. | Übertragen Sie in Ihrem Quellkonto ein Container-Image in ein neues oder vorhandenes Amazon ECR-Quell-Repository mit einem Image-Tag als Präfix. Sie können den Fortschritt des CodeBuild Projekts in der CodeBuild Konsole Melden Sie sich nach erfolgreichem Abschluss des CodeBuild Projekts beim AWS-Zielkonto an, öffnen Sie die Amazon ECR-Konsole und vergewissern Sie sich, dass das Bild in der Amazon ECR-Zielregistrierung vorhanden ist. | AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Testen Sie den Image-Ausschluss. | Übertragen Sie in Ihrem Quellkonto ein Container-Image in ein neues oder vorhandenes Amazon ECR-Quell-Repository mit einem Image-Tag, das nicht über das benutzerdefinierte Präfix verfügt. Vergewissern Sie sich, dass das CodeBuild Projekt nicht gestartet wurde und dass keine Container-Images in der Zielregistrierung erscheinen. | AWS-Administrator DevOps, AWS, AWS-Systemadministrator, Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur |
Zugehörige Ressourcen
Zusätzliche Informationen
Gehen Sie folgendermaßen vor, um die Ressourcen für dieses Muster automatisch bereitzustellen:
Laden Sie den Anhang herunter und extrahieren Sie die beiden CloudFormation Vorlagen:
part-1-copy-tagged-images.yaml
undpart-2-destination-account-role.yaml
.Melden Sie sich bei der CloudFormation AWS-Konsole
an und führen Sie die Bereitstellung part-1-copy-tagged-images.yaml
in demselben AWS-Konto und derselben Region wie die Amazon ECR-Quellregistrierungen durch. Aktualisieren Sie die Parameter nach Bedarf. Die Vorlage stellt die folgenden Ressourcen bereit:CloudWatch IAM-Rolle bei Amazon Events
CodeBuild IAM-Rolle des AWS-Projekts
CodeBuild AWS-Projekt
CloudWatch AWS-Ereignisregel
Notieren Sie sich den Wert von
SourceRoleName
auf der Registerkarte Ausgaben. Sie benötigen diesen Wert im nächsten Schritt.Stellen Sie die zweite CloudFormation Vorlage in dem AWS-Konto bereit,
part-2-destination-account-role.yaml
in das Sie die Amazon ECR-Container-Images kopieren möchten. Aktualisieren Sie die Parameter nach Bedarf. Geben Sie für denSourceRoleName
Parameter den Wert aus Schritt 3 an. Diese Vorlage stellt die kontoübergreifende IAM-Rolle bereit.