Le Blog Amazon Web Services
Créez un pipeline de livraison continue pour vos images de conteneur avec Amazon ECR comme source
Depuis le 27 Novembre 2018, il est possible d’utiliser Amazon Elastic Container Registry (Amazon ECR) comme fournisseur de source dans AWS CodePipeline. Il est ainsi possible de déclencher une mise à jour d’un pipeline AWS CodePipeline simplement en téléchargeant une nouvelle image sur Amazon ECR. Cela facilite la création et la configuration d’un pipeline de livraison continue (Contiuous Delivery) utilisant les outils de développement AWS pour CI/CD.
Vous pouvez utiliser Amazon ECR comme source si vous implémentez un déploiement bleu/vert avec AWS CodeDeploy. Pour plus d’informations sur l’utilisation de la console Amazon Elastic Container Service (Amazon ECS) pour implémenter un déploiement bleu / vert sans AWS CodePipeline, consultez Création d’un service à l’aide d’un déploiement bleu/vert.
Cet article illustre comment créer un pipeline de déploiement continu (CD) complet et de bout en bout avec Amazon ECR et AWS CodePipeline. Il vous guidera tout au long de la configuration d’un pipeline pour créer vos images lorsque l’image de base en amont est mise à jour.
Prérequis
Pour la suite de l’article, vous aurez besoin des ressources suivantes :
- Un référentiel de code source contenant le fichier Dockerfile décrivant l’image de base ainsi qu’un référentiel d’images Docker pour stocker votre image. Dans cet exemple, nous utilisons pour l’image de base un fichier Dockerfile contenant simplement les directives suivantes:
- Un référentiel avec le fichier Dockerfile de votre application et son code source ainsi qu’un référentiel pour stocker votre image Docker. Pour le fichier Dockerfile de l’application, nous utilisons notre image de base à laquelle on ajoutera notre code d’application :
Remarque: Remplacez 012345678919
par l’ID de votre compte AWS et us-east-1
par la région dans laquelle vous déployez vos ressources.
Cet exemple utilise AWS CodeCommit pour les référentiels de code source et Amazon ECR pour les référentiels d’images Docker. Pour plus d’informations, consultez Créer un référentiel AWS CodeCommit dans le guide d’utilisateur AWS CodeCommit et Création d’un référentiel dans le guide d’utilisateur Amazon ECR.
Remarque: les référentiels de code source et les référentiels d’images doivent être créés dans la même région AWS.
Configurer les rôles de service IAM (Identity and Access Management)
Dans cet exemple, on utilise AWS CodeBuild et AWS CodePipeline pour créer les images Docker et les pousser vers Amazon ECR. Les deux services utilisent des rôles de service de gestion des identités et des accès (IAM) pour effectuer des appels à l’API d’Amazon ECR. Les rôles de service doivent avoir une stratégie qui fournit des autorisations pour effectuer ces appels à l’API Amazon ECR. La procédure suivante utilise la console IAM pour créer un rôle de service auquel on attachera les autorisations nécessaires pour le bon fonctionnement de AWS CodeBuild.
Création d’un rôle de service pour AWS CodeBuild
Suivez ces étapes pour créer un rôle de service AWS CodeBuild en utilisant la console IAM.
À l’étape 10, assurez-vous d’ajouter également la stratégie AmazonEC2ContainerRegistryPowerUser
à votre rôle.
Création d’un fichier de spécification de build pour l’image de base
Un fichier de spécification de build (ou build spec) est une suite de commandes de build et de paramètres associés, au format YAML, qu’AWS CodeBuild utilise pour exécuter un build. Ajoutez un fichier buildspec.yml
à votre référentiel de code source pour indiquer à AWS CodeBuild comment créer votre image de base. L’exemple de spécification de construction utilisé ici réalise les étapes suivantes :
- Étape de pre-build :
- Connexion à Amazon ECR,
- Définition de l’URI du référentiel vers votre image ECR et ajout d’un tag d’image avec les sept premiers caractères de l’ID du commit Git.
- Étape de build :
- Création de l’image Docker et ajout d’un tag à l’image avec latest et l’ID du commit Git.
- Étape post-build :
- Envoi de l’image avec les deux tags dans votre référentiel Amazon ECR.
Ajout d’un fichier buildspec.yml à votre référentiel source
- Ouvrez un éditeur de texte, puis copiez et collez la spécification de build ci-dessus dans un nouveau fichier.
- Remplacez
REPOSITORY_URI
avec sa valeur (012345678910.dkr.ecr.us-east-1.amazonaws.com/base-image
) par votre URI de référentiel Amazon ECR (sans aucun tag d’image) pour votre image Docker. Remplacezbase-image
par le nom de votre image Docker de base. - Faites un Commit puis un Push de votre fichier
buildspec.yml
vers votre référentiel de code source.
git add .
git commit -m "Adding build specification."
git push
Création d’un fichier de spécification de build pour votre application
Ajoutez un fichier buildspec.yml
à votre référentiel de code source pour indiquer à AWS CodeBuild comment construire votre code source et l’image de votre application. L’exemple de spécification de build utilisé ici décrit les étapes suivantes :
- Étape de pre-build :
- Connexion à Amazon ECR,
- Définition de l’URI du référentiel vers votre image ECR et ajout d’un tag d’image avec les sept premiers caractères de l’ID de build CodeBuild.
- Étape de build :
- Création de l’image Docker et ajout de tag d’image avec latest et l’ID du commit Git.
- Étape post-build :
- Enregistrement de l’image avec les deux tags dans votre référentiel ECR.
Remarque: Pour REPOSITORY_URI, remplacez 012345678919
par l’ID de votre compte AWS et us-east-1
par la région dans laquelle vous déployez vos ressources.
Pour ajouter un fichier buildspec.yml à votre référentiel source
- Ouvrez un éditeur de texte, puis copiez et collez la spécification de build ci-dessus dans un nouveau fichier.
- Remplacez
012345678910
par votre ID de compte dans la commande suivante:aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 012345678910.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
- Remplacez REPOSITORY_URI avec sa valeur (
012345678910.dkr.ecr.us-east-1.amazonaws.com/hello-world
) par votre URI de référentiel Amazon ECR (sans aucun tag d’image) pour votre image Docker. Remplacez hello-world par le nom du conteneur dans la définition de tâche de votre service qui fait référence à votre image Docker. - Faites un Commit puis un Push de votre fichier
buildspec.yml
vers votre référentiel de code source.
git add .
git commit -m "Adding build specification."
git push
Création d’un pipeline de déploiement continu pour votre image de base
Utilisez AWS CodePipeline pour créer vos étapes de pipeline:
- Ouvrez la console AWS CodePipeline à l’adresse https://console.thinkwithwp.com/codepipeline/.
- Sur la page de Bienvenue, choisissez Créer un pipeline. Si c’est la première fois que vous utilisez AWS CodePipeline, une page d’introduction apparaît à la place de bienvenue. Choisissez Commencer maintenant.
- Dans l’étape 1: Paramètres de pipeline, saisissez le nom de votre pipeline dans le champs Nom de pipeline, et cliquez sur Suivant. Pour cette procédure pas à pas, le nom du pipeline est base-image.
- Dans l’étape 2: Source, pour le Fournisseur Source, choisissez AWS CodeCommit.
- Pour Nom du référentiel, choisissez le nom du référentiel AWS CodeCommit à utiliser comme emplacement source pour votre pipeline.
- Pour Nom de la branche, choisissez la branche à utiliser, puis cliquez sur suivant.
- Dans l’étape 3: Génération (Build), choisissez AWS CodeBuild, puis choisissez Créer un projet.
- Pour Nom du projet, choisissez un nom unique pour votre projet de génération. Pour cette procédure pas à pas, le nom du projet est base-image.
- Pour Système d’exploitation, choisissez Ubuntu.
- Pour Environnement(s) d’exécution, choisissez Standard.
- Pour Image, choisissez aws/codebuild/standard:5.0.
- Pour Privilégié, cochez la case Activer cet indicateur si vous souhaitez créer des images Docker ou pour que vos générations bénéficient de privilèges élevés.
- Pour Rôle de service, cliquez sur Rôle de service existant, puis choisissez le rôle de service CodeBuild que vous avez créé précédemment, puis décochez la case Autoriser AWS CodeBuild à modifier ce rôle de service afin qu’il puisse être utilisé avec ce projet de génération.
- Cliquez sur Continuer vers CodePipeline.
- Cliquez sur Suivant.
- Dans l’étape 4: Déploiement, choisissez Ignorer l’étape de déploiement et acceptez le warning de la pop up.
- Dans l’étape 5: Révision, vérifiez la configuration de votre pipeline, puis choisissez Créer un pipeline.
Création d’un pipeline de déploiement continu pour l’image de votre application
L’exécution du pipeline d’image applicative est déclenchée par des modifications du code source de l’application et par des modifications de l’image de base en amont. Vous créez d’abord un pipeline, puis vous le modifiez pour ajouter une deuxième étape Source.
- Ouvrez la console AWS CodePipeline à l’adresse https://console.thinkwithwp.com/codepipeline/.
- Sur la page Bienvenue, choisissez Créer un pipeline.
- Dans l’étape 1: Paramètres de pipeline, pour le nom du pipeline, tapez le nom de votre pipeline. Pour cette procédure pas à pas, le nom du pipeline est hello-world.
- Pour le Rôle de service, choisissez Nouveau rôle de service. Cliquez ensuite sur Suivant.
- Dans l’étape 2: Source, pour le Fournisseur Source, choisissez Amazon ECR.
- Pour Nom du référentiel, choisissez le nom du référentiel Amazon ECR à utiliser comme emplacement source pour votre pipeline. Pour cette procédure pas à pas, le nom du référentiel est base-image.
- Dans l’étape 3: Génération, choisissez AWS CodeBuild, puis choisissez Créer un projet,
- Pour Nom du projet, choisissez un nom unique pour votre projet de génération. Pour cette procédure pas à pas, le nom du projet est hello-world.
- Pour Système d’exploitation, choisissez Ubuntu.
- our Environnement(s) d’exécution, choisissez Standard.
- Pour Image, choisissez aws/codebuild/standard:5.0.
- Pour Privilégié, cochez la case Activer cet indicateur si vous souhaitez créer des images Docker ou pour que vos générations bénéficient de privilèges élevés.
- Pour Rôle de service, cliquez sur Rôle de service existant, puis choisissez le rôle de service CodeBuild que vous avez créé précédemment, puis décochez la case Autoriser AWS CodeBuild à modifier ce rôle de service afin qu’il puisse être utilisé avec ce projet de génération.
- Cliquez sur Continuer vers CodePipeline.
- Cliquez sur Suivant.
- Dans l’étape 4: Déploiement, choisissez Ignorer l’étape de déploiement et acceptez le warning de la pop up.
- Dans l’étape 5: Révision, vérifiez la configuration de votre pipeline, puis choisissez Créer un pipeline.
Le pipeline échouera, car il manque le code source de l’application. Vous modifiez ensuite le pipeline pour ajouter une action supplémentaire à l’étape source.
- Ouvrez la console AWS CodePipeline à l’adresse https://console.thinkwithwp.com/codepipeline/.
- Sur la page Bienvenue, choisissez votre pipeline dans la liste. Pour cette procédure pas à pas, le nom du pipeline est hello-world.
- Sur la page du pipeline, choisissez Modifier.
- Sur la page Édition: hello-world, dans Modifier: Source, choisissez Modifier l’étape.
- Cliquez sur l’icône d’édition de la Source existante
- Remplacez les Artefacts de sortie par BaseImage, puis cliquez sur Effectué.
- Cliquez sur Ajouter une action, puis entrez un nom pour l’action (par exemple, Code).
- Pour Fournisseur d’action, choisissez AWS CodeCommit.
- Pour Nom du référentiel, choisissez le nom du référentiel AWS CodeCommit pour le code source de votre application.
- Pour le Nom de la branche, choisissez la branche.
- Pour les Artefacts de sortie, spécifiez SourceArtifact, puis cliquez sur Effectué.
- Sur la page Modification: hello-world, cliquez sur Enregistrer et acceptez l’avertissement contextuel.
Testez votre pipeline de bout en bout
Votre pipeline doit avoir tout ce qu’il faut pour exécuter un déploiement continu AWS natif de bout en bout. Vous pouvez maintenant tester ses fonctionnalités en poussant un changement de code dans votre référentiel d’images de base.
- Apportez une modification à votre référentiel source configuré, puis validez et transmettez la modification.
- Ouvrez la console AWS CodePipeline à l’adresse https://console.thinkwithwp.com/codepipeline/.
- Choisissez votre pipeline dans la liste.
- Regardez le pipeline progresser à travers ses étapes. Au fur et à mesure que l’image de base est créée et transmise à Amazon ECR, voyez également comment le deuxième pipeline est déclenché. Lorsque l’exécution de votre pipeline est terminée, l’image de votre application est poussée vers Amazon ECR et vous êtes maintenant prêt à déployer votre application. Pour plus d’informations sur le déploiement continu de votre application, consultez Créer un pipeline avec une source Amazon ECR et un déploiement d’ECS vers CodeDeploy dans le guide d’utilisateur AWS CodePipeline.
Conclusion
Dans cet article, nous vous avons montré comment créer un pipeline de déploiement continu (CD) complet et de bout en bout avec Amazon ECR et AWS CodePipeline. Vous avez vu comment lancer une mise à jour du pipeline AWS CodePipeline en téléchargeant une nouvelle image sur Amazon ECR. La prise en charge d’Amazon ECR dans AWS CodePipeline facilite la configuration d’un pipeline de livraison continue et l’utilisation des outils de développement AWS pour CI/CD.
Article original réalisé par Daniele Stroppa et traduit en français par Zineb Swidnane, Solutions Architect dans l’équipe AWS France.