Créez automatiquement des pipelines CI/CD et des clusters Amazon ECS pour les microservices à l'aide d'AWS CDK - Recommandations AWS

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.

Créez automatiquement des pipelines CI/CD et des clusters Amazon ECS pour les microservices à l'aide d'AWS CDK

Créée par Varsha Raju (AWS)

Récapitulatif

Ce modèle décrit comment créer automatiquement l'intégration continue et la livraison continue (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipelines) que vous pouvez ensuite personnaliser ou modifier en fonction des exigences de votre organisation. 

L'approche du modèle crée un environnement de production et un environnement hors production dotés chacun d'un cloud privé virtuel (VPC) et d'un cluster Amazon ECS configurés pour s'exécuter dans deux zones de disponibilité. Ces environnements sont partagés par tous vos microservices, puis vous créez des CI/CD pipeline for each microservice. These CI/CD pipelines, vous extrayez les modifications depuis un référentiel source dans AWS CodeCommit, vous les générez automatiquement, puis vous les déployez dans vos environnements de production et hors production. Lorsqu'un pipeline termine avec succès toutes ses étapes, vous pouvez l'utiliser URLs pour accéder au microservice dans les environnements de production et hors production.

Conditions préalables et limitations

Prérequis

  • Un compte Amazon Web Services (AWS) actif.

  • Un compartiment Amazon Simple Storage Service (Amazon S3) existant contenant starter-code.zip le fichier (joint).

  • AWS Cloud Development Kit (AWS CDK), installé et configuré dans votre compte. Pour plus d'informations à ce sujet, consultez Getting started with the AWS CDK dans la documentation AWS CDK.

  • Python 3 etpip, installé et configuré. Pour plus d'informations à ce sujet, consultez la documentation Python.

  • Connaissance d'AWS CDK, d'AWS, d' CodePipelineAWS CodeBuild, d' CodeCommitAmazon Elastic Container Registry (Amazon ECR), d'Amazon ECS et d'AWS Fargate.

  • Connaissance de Docker.

  • Compréhension du CI/CD et. DevOps

Limites

  • Les limites générales du compte AWS s'appliquent. Pour plus d'informations à ce sujet, consultez les quotas de service AWS dans la documentation de référence générale AWS.

Versions du produit

  • Le code a été testé à l'aide de Node.js version 16.13.0 et d'AWS CDK version 1.132.0.

Architecture

AWS Cloud architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

Le schéma suivant illustre le flux de travail suivant :

  1. Un développeur d'applications valide le code dans un CodeCommit référentiel.

  2. Un pipeline est lancé.

  3. CodeBuild crée et envoie l'image Docker vers un référentiel Amazon ECR

  4. CodePipeline déploie une nouvelle image sur un service Fargate existant dans un cluster Amazon ECS hors production.

  5. Amazon ECS extrait l'image du référentiel Amazon ECR vers un service Fargate hors production.

  6. Les tests sont effectués à l'aide d'une URL hors production.

  7. Le responsable de publication approuve le déploiement en production.

  8. CodePipeline déploie la nouvelle image sur un service Fargate existant dans un cluster Amazon ECS de production

  9. Amazon ECS extrait l'image du référentiel Amazon ECR vers le service de production Fargate.

  10. Les utilisateurs de production accèdent à votre fonctionnalité à l'aide d'une URL de production.

Pile technologique

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Automatisation et mise à l'échelle

Vous pouvez utiliser l'approche de ce modèle pour créer des pipelines pour les microservices déployés dans une CloudFormation pile AWS partagée. L'automatisation peut créer plusieurs clusters Amazon ECS dans chaque VPC et également créer des pipelines pour les microservices déployés dans un cluster Amazon ECS partagé. Toutefois, cela nécessite que vous fournissiez de nouvelles informations sur les ressources en entrée de la pile de pipelines.

Outils

  • AWS CDK — AWS Cloud Development Kit (AWS CDK) est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via AWS. CloudFormation

  • AWS CodeBuild — AWS CodeBuild est un service de création entièrement géré dans le cloud. CodeBuild compile votre code source, exécute des tests unitaires et produit des artefacts prêts à être déployés.

  • AWS CodeCommit — AWS CodeCommit est un service de contrôle de version qui vous permet de stocker et de gérer de manière privée des référentiels Git dans le cloud AWS. CodeCommit vous n'avez plus à gérer votre propre système de contrôle de source ou à vous soucier de la mise à l'échelle de son infrastructure.

  • AWS CodePipeline — AWS CodePipeline est un service de livraison continue que vous pouvez utiliser pour modéliser, visualiser et automatiser les étapes nécessaires à la publication de votre logiciel. Vous pouvez rapidement modéliser et configurer les différentes étapes d'un processus de publication d'un logiciel. CodePipeline automatise les étapes nécessaires à la publication continue des modifications de votre logiciel.

  • Amazon ECS — Amazon Elastic Container Service (Amazon ECS) est un service de gestion de conteneurs rapide et hautement évolutif utilisé pour exécuter, arrêter et gérer des conteneurs sur un cluster. Vous pouvez exécuter vos tâches et services sur une infrastructure sans serveur gérée par AWS Fargate. Pour mieux contrôler votre infrastructure, vous pouvez également exécuter vos tâches et services sur un cluster d'instances Amazon Elastic Compute Cloud (Amazon EC2) que vous gérez.

  • Docker — Docker aide les développeurs à emballer, expédier et exécuter n'importe quelle application sous la forme d'un conteneur léger, portable et autonome.

Code

Le code de ce modèle est disponible dans les starter-code.zip fichiers cicdstarter.zip et (joints).

Épopées

TâcheDescriptionCompétences requises
Configurez le répertoire de travail pour AWS CDK.
  1. Créez un répertoire nommé cicdproject sur votre machine locale.

  2. Téléchargez le cicdstarter.zip fichier (joint) dans le cicdproject répertoire et décompressez-le. Cela crée un dossier nommécicdstarter.

  3. Exécutez la commande cd <user-home>/cicdproject/cicdstarter

  4. Configurez l'environnement virtuel Python en exécutant la python3 -m venv .venv commande.

  5. Exécutez la commande source ./.venv/bin/activate.

  6. Configurez votre environnement AWS en exécutant la aws configure commande ou en utilisant les variables d'environnement suivantes : 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, infrastructure cloud
TâcheDescriptionCompétences requises
Créez l'infrastructure partagée.
  1. Dans votre répertoire de travail, exécutez la cd cicdvpcecs commande. 

  2. Exécutez la pip3 install -r requirements.txt commande pour installer toutes les dépendances Python requises

  3. Exécutez le cdk bootstrap command pour définir l'environnement AWS pour le CDK AWS. 

  4. Exécutez la commande cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region>

  5. Exécutez la commande cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region>.

  6. La CloudFormation pile AWS crée l'infrastructure suivante :

    • Un VPC hors production nommé cicd-vpc-ecs/cicd-vpc-nonprod

    • Un VPC de production nommé cicd-vpc-ecs/cicd-vpc-prod

    • Un cluster Amazon ECS hors production nommé cicd-ecs-nonprod

    • Un cluster Amazon ECS de production nommé cicd-ecs-prod

AWS DevOps, infrastructure cloud
Surveillez la CloudFormation pile AWS.
  1. Connectez-vous à l'AWS Management Console, ouvrez la CloudFormation console AWS, puis choisissez la cicd-vpc-ecs pile dans la liste. 

  2. Dans le volet des détails de la pile, choisissez l'onglet Événements et surveillez la progression de la création de votre pile.

AWS DevOps, infrastructure cloud
Testez la CloudFormation pile AWS.
  1. Une fois la CloudFormation pile cicd-vpc-ecs AWS créée, assurez-vous que les cicd-vpc-ecs/cicd-vpc-nonprod et cicd-vpc-ecs/cicd-vpc-prod VPCs sont créés. 

  2. Assurez-vous que les clusters cicd-ecs-nonprod et cicd-ecs-prod Amazon ECS sont créés.

Important

Assurez-vous d'enregistrer le IDs pour les deux groupes de sécurité VPCs et le groupe de sécurité IDs pour les groupes de sécurité par défaut dans les deux VPCs.

AWS DevOps, infrastructure cloud
TâcheDescriptionCompétences requises
Créez l'infrastructure du microservice.
  1. Donnez un nom à votre microservice. Par exemple, ce modèle utilise myservice1 comme nom du microservice.

  2. Dans votre répertoire de travail, exécutez la cd <working-directory>/cdkpipeline commande.

  3. Exécutez la commande pip3 install -r requirements.txt.

  4. Exécutez la cdk synth commande complète disponible dans la section Informations supplémentaires de ce modèle.

  5. Exécutez la cdk deploy commande complète disponible dans la section Informations supplémentaires de ce modèle.

Note

Vous pouvez également fournir les valeurs des deux commandes en utilisant le cdk.json fichier du répertoire.

AWS DevOps, infrastructure cloud
Surveillez la CloudFormation pile AWS.

Ouvrez la CloudFormation console AWS et surveillez la progression de la myservice1-cicd-stack pile. Finalement, le statut passe à CREATE_COMPLETE.

AWS DevOps, infrastructure cloud
Testez la CloudFormation pile AWS.
  1. Sur la CodeCommit console AWS, vérifiez qu'un référentiel nommé myservice1 existe et contient le code de démarrage.

  2. Sur la CodeBuild console AWS, vérifiez qu'un projet de construction nommé myservice1 existe.

  3. Sur la console Amazon ECR, vérifiez qu'un référentiel Amazon ECR nommé myservice1 existe.

  4. Sur la console Amazon ECS, vérifiez qu'un service Fargate myservice1 nommé existe à la fois dans un cluster Amazon ECS hors production et dans un cluster Amazon ECS de production.

  5. Sur la console Amazon Elastic Compute Cloud (Amazon EC2), vérifiez que les équilibreurs de charge des applications hors production et de production sont créés. Enregistrez les noms DNS du ALBs.

  6. Sur la CodePipeline console AWS, vérifiez qu'un pipeline nommé myservice1 existe. Il doit avoir SourceBuild,Deploy-NonProd, et Deploy-Prod étapes. Le pipeline doit également avoir un in progress statut.

  7. Surveillez le pipeline jusqu'à ce que toutes les étapes soient terminées. 

  8. Approuvez-le manuellement pour la production.

  9. Dans une fenêtre de navigateur, entrez les noms DNS du ALBs.

  10. L'application doit s'afficher Hello World en mode hors production et en mode production URLs.

Utilisez le pipeline.
  1. Ouvrez le CodeCommit référentiel que vous avez créé précédemment et ouvrez le index.js fichier. 

  2. Remplacez Hello World par Hello CI/CD.

  3. Enregistrez et validez les modifications apportées à la branche principale.

  4. Vérifiez que le pipeline démarre et que la modification passe par les Deploy-Prod  étapesBuild,Deploy-NonProd, et. 

  5. Approuvez manuellement la production.

  6. La production et la non-production URLs devraient désormais s'afficherHello CICD.

AWS DevOps, infrastructure cloud
Répétez cette épopée pour chaque microservice.

Répétez les tâches de cette épopée pour créer un pipeline CI/CD pour chacun de vos microservices.

AWS DevOps, infrastructure cloud

Ressources connexes

Informations supplémentaires

Commande cdk synth de la

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy commande

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip