Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Répliquez les images filtrées des conteneurs Amazon ECR sur plusieurs comptes ou régions
Créée par Abdal Garuba (AWS)
Environnement : Production | Technologies : conteneurs et microservices ; DevOps | Services AWS : registre des conteneurs Amazon EC2 ; Amazon ; AWS CodeBuild ; CloudWatch AWS Identity and Access Management ; AWS CLI |
Récapitulatif
Amazon Elastic Container Registry (Amazon ECR) peut répliquer toutes les images de conteneurs d'un référentiel d'images dans les régions Amazon Web Services (AWS) et les comptes AWS de manière native, en utilisant les fonctionnalités de réplication entre régions et entre comptes. (Pour plus d'informations, consultez le billet de blog AWS intitulé Cross region replication in Amazon ECR has landed
Ce modèle décrit comment répliquer des images de conteneurs stockées dans Amazon ECR sur des comptes et des régions AWS, sur la base de modèles de balises d'image. Le modèle utilise Amazon CloudWatch Events pour écouter les événements push relatifs aux images dotées d'une balise personnalisée prédéfinie. Un événement push démarre un CodeBuild projet AWS et lui transmet les détails de l'image. Le CodeBuild projet copie les images du registre Amazon ECR source vers le registre de destination en fonction des informations fournies.
Ce modèle copie les images dotées de balises spécifiques sur tous les comptes. Par exemple, vous pouvez utiliser ce modèle pour copier uniquement des images sécurisées prêtes à être produites sur le compte AWS de production. Dans le compte de développement, une fois les images testées de manière approfondie, vous pouvez ajouter une balise prédéfinie aux images sécurisées et suivre les étapes de ce modèle pour copier les images marquées sur le compte de production.
Conditions préalables et limitations
Prérequis
Un compte AWS actif pour les registres Amazon ECR source et de destination
Autorisations administratives pour les outils utilisés dans ce modèle
Docker
installé sur votre machine locale à des fins de test AWS Command Line Interface (AWS CLI), pour l'authentification auprès d'Amazon ECR
Limites
Ce modèle surveille les événements push du registre source dans une seule région AWS. Vous pouvez déployer ce modèle dans d'autres régions pour surveiller les registres de ces régions.
Dans ce modèle, une règle Amazon CloudWatch Events écoute un seul modèle de balise d'image. Si vous souhaitez vérifier la présence de plusieurs modèles, vous pouvez ajouter des événements afin de détecter d'autres modèles de balises d'image.
Architecture
Architecture cible
![Architecture permettant de répliquer les images de conteneurs Amazon ECR filtrées entre les comptes et les régions.](images/pattern-img/a0f635e4-3ba5-4411-b9f8-54cfc228535a/images/2cb7962d-5b45-41a2-ba8c-7a18f01b617a.png)
Automatisation et mise à l'échelle
Ce modèle peut être automatisé à l'aide d'un script d'infrastructure en tant que code (IaC) et déployé à grande échelle. Pour utiliser des CloudFormation modèles AWS afin de déployer ce modèle, téléchargez la pièce jointe et suivez les instructions de la section Informations supplémentaires.
Vous pouvez rediriger plusieurs CloudWatch événements Amazon Events (avec différents modèles d'événements personnalisés) vers le même CodeBuild projet AWS afin de répliquer plusieurs modèles de balises d'image, mais vous devrez mettre à jour la validation secondaire dans le buildspec.yaml
fichier (qui est incluse dans la pièce jointe et dans la section Outils) comme suit pour prendre en charge plusieurs modèles.
... if [[ ${IMAGE_TAG} != release-* ]]; then ...
Outils
Services Amazon
IAM
— AWS Identity and Access Management (IAM) vous permet de gérer l'accès aux services et ressources AWS en toute sécurité. Dans ce modèle, vous devez créer le rôle IAM entre comptes qu'AWS CodeBuild assumera lors du transfert d'images de conteneurs vers le registre de destination. Amazon ECR
— Amazon Elastic Container Registry (Amazon ECR) est un registre de conteneurs entièrement géré qui facilite le stockage, la gestion, le partage et le déploiement de vos images et artefacts de conteneurs où que vous soyez. Les actions d'envoi d'images vers le registre source envoient les détails des événements du système au bus d'événements qui est récupéré par Amazon CloudWatch Events. AWS CodeBuild
— AWS CodeBuild est un service d'intégration continue entièrement géré qui fournit la puissance de calcul nécessaire pour effectuer des tâches telles que la compilation du code source, l'exécution de tests et la production d'artefacts prêts à être déployés. Ce modèle utilise AWS CodeBuild pour effectuer l'action de copie du registre Amazon ECR source vers le registre de destination. CloudWatch Événements — Amazon CloudWatch Events fournit un flux d'événements système décrivant les modifications apportées aux ressources AWS. Ce modèle utilise des règles pour associer les actions push Amazon ECR à un modèle de balise d'image spécifique.
Outils
Docker CLI
— Docker est un outil qui facilite la création et la gestion de conteneurs. Les conteneurs regroupent une application et toutes ses dépendances dans une unité ou un package qui peut être facilement déployé sur n'importe quelle plate-forme prenant en charge le runtime du conteneur.
Code
Vous pouvez implémenter ce modèle de deux manières :
Configuration automatisée : déployez les deux CloudFormation modèles AWS fournis dans la pièce jointe. Pour obtenir des instructions, consultez la section Informations supplémentaires.
Configuration manuelle : suivez les étapes de la section Epics.
Exemple de buildspec.yaml
Si vous utilisez les CloudFormation modèles fournis avec ce modèle, le buildspec.yaml
fichier est inclus dans les CodeBuild ressources.
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}
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Créez un rôle CloudWatch Events. | Dans le compte AWS source, créez un rôle IAM à assumer par Amazon CloudWatch Events. Le rôle doit être autorisé à démarrer un CodeBuild projet AWS. Pour créer le rôle à l'aide de l'AWS CLI, suivez les instructions de la documentation IAM. Exemple de politique de confiance (
Exemple de politique d'autorisation (
| Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Créez un CodeBuild rôle. | Créez un rôle IAM CodeBuild à assumer par AWS en suivant les instructions de la documentation IAM. Le rôle doit disposer des autorisations suivantes :
Exemple de politique de confiance (
Exemple de politique d'autorisation (
Attachez la politique gérée
| Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Créez un rôle multicompte. | Dans le compte AWS de destination, créez un rôle IAM pour le CodeBuild rôle AWS que le compte source doit assumer. Le rôle multi-comptes doit permettre aux images de conteneur de créer un nouveau référentiel et de télécharger des images de conteneur sur Amazon ECR. Pour créer le rôle IAM à l'aide de l'AWS CLI, suivez les instructions de la documentation IAM. Pour autoriser le CodeBuild projet AWS de l'étape précédente, appliquez la politique de confiance suivante :
Pour autoriser le CodeBuild projet AWS de l'étape précédente à enregistrer des images dans le registre de destination, appliquez la politique d'autorisation suivante :
| Administrateur AWS, AWS DevOps, administrateur cloud, architecte cloud, DevOps ingénieur, administrateur système AWS |
Tâche | Description | Compétences requises |
---|---|---|
Créez un CodeBuild projet. | Créez un CodeBuild projet AWS dans le compte source en suivant les instructions de la CodeBuild documentation AWS. Le projet doit se trouver dans la même région que le registre source. Configurez le projet comme suit :
| Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Créez une règle d'événements. | Comme le modèle utilise la fonctionnalité de filtrage de contenu, vous devez créer l'événement à l'aide d'Amazon EventBridge. Créez l'événement et la cible en suivant les instructions de la EventBridge documentation, avec quelques modifications :
| Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Tâche | Description | Compétences requises |
---|---|---|
Authentifiez-vous auprès d'Amazon ECR. | Authentifiez-vous auprès des registres source et de destination en suivant les étapes de la documentation Amazon ECR. | Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, DevOps ingénieur, architecte cloud |
Testez la réplication des images. | Dans votre compte source, envoyez une image de conteneur vers un référentiel source Amazon ECR nouveau ou existant avec une balise d'image préfixée par. Vous pouvez suivre la progression du CodeBuild projet dans la CodeBuild console Une fois le CodeBuild projet terminé avec succès, connectez-vous au compte AWS de destination, ouvrez la console Amazon ECR et vérifiez que l'image existe dans le registre Amazon ECR de destination. | Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Testez l'exclusion des images. | Dans votre compte source, envoyez une image de conteneur vers un référentiel source Amazon ECR nouveau ou existant avec une balise d'image ne comportant pas de préfixe personnalisé. Vérifiez que le CodeBuild projet n'est pas démarré et qu'aucune image de conteneur n'apparaît dans le registre de destination. | Administrateur AWS, AWS DevOps, administrateur système AWS, administrateur cloud, architecte cloud, DevOps ingénieur |
Ressources connexes
Informations supplémentaires
Pour déployer automatiquement les ressources correspondant à ce modèle, procédez comme suit :
Téléchargez la pièce jointe et extrayez les deux CloudFormation modèles :
part-1-copy-tagged-images.yaml
etpart-2-destination-account-role.yaml
.Connectez-vous à la CloudFormation console AWS
et déployez part-1-copy-tagged-images.yaml
dans le même compte AWS et dans la même région que les registres Amazon ECR sources. Mettez à jour les paramètres selon vos besoins. Le modèle déploie les ressources suivantes :Rôle IAM dans Amazon CloudWatch Events
Rôle IAM dans le CodeBuild projet AWS
CodeBuild Projet AWS
Règle CloudWatch relative aux événements AWS
Prenez note de la valeur de
SourceRoleName
dans l'onglet Sorties. Vous aurez besoin de cette valeur à l'étape suivante.Déployez le second CloudFormation modèle
part-2-destination-account-role.yaml
, dans le compte AWS sur lequel vous souhaitez copier les images du conteneur Amazon ECR. Mettez à jour les paramètres selon vos besoins. Pour leSourceRoleName
paramètre, spécifiez la valeur de l'étape 3. Ce modèle déploie le rôle IAM entre comptes.Validez la réplication et l'exclusion des images, comme décrit dans la dernière étape de la section Epics.