Créez automatiquement des pipelines CI/CD et des ECS clusters Amazon pour les microservices à l'aide de 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 ECS clusters Amazon pour les microservices à l'aide de AWS CDK

Créée par Varsha Raju () AWS

Environnement : PoC ou pilote

Technologies : DevOps ; Conteneurs et microservices ; Modernisation ; Infrastructure

AWSservices : AWS CodeBuild AWS CodeCommit ; AWS CodePipeline ; Amazon ECS ; AWS CDK

Récapitulatif

Ce modèle décrit comment créer automatiquement les pipelines d'intégration continue et de livraison continue (CI/CD) ainsi que l'infrastructure sous-jacente pour créer et déployer des microservices sur Amazon Elastic Container Service (Amazon). ECS Vous pouvez utiliser cette approche si vous souhaitez configurer des pipelines proof-of-concept CI/CD afin de montrer à votre organisation les avantages de la CI/CD, des microservices et. DevOps Vous pouvez également utiliser cette approche pour créer des pipelines CI/CD initiaux que vous pouvez ensuite personnaliser ou modifier en fonction des besoins 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 ECS cluster Amazon configurés pour s'exécuter dans deux zones de disponibilité. Ces environnements sont partagés par tous vos microservices et vous créez ensuite un pipeline CI/CD pour chaque microservice. Ces pipelines CI/CD extraient les modifications d'un référentiel source AWS CodeCommit, les intègrent automatiquement, puis les déploient 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).

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

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

  • Connaissance d'AWSCDKAmazon Elastic Container Registry (AmazonECR)ECS, Amazon et AWS Fargate. AWS CodePipeline AWS CodeBuild CodeCommit

  • Connaissance de Docker.

  • Compréhension du CI/CD et. DevOps

Limites

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

Versions du produit

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

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 hors production. ECS

  5. Amazon ECS extrait l'image du ECR référentiel Amazon vers un service Fargate non destiné à la production.

  6. Les tests sont effectués à l'aide d'une non-productionURL.

  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 de production ECS

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

  10. Les utilisateurs de production accèdent à votre fonctionnalité en utilisant une productionURL.

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 AWS CloudFormation pile partagée. L'automatisation peut créer plusieurs ECS clusters Amazon dans chaque cluster VPC et également créer des pipelines pour les microservices déployés dans un ECS cluster Amazon partagé. Toutefois, cela nécessite que vous fournissiez de nouvelles informations sur les ressources en tant qu'entrées dans la pile de pipelines.

Outils

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

  • 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 AWS cloud. 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 (AmazonECS) 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 (AmazonEC2) 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 AWSCDK.
  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 AWS environnement 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'AWSenvironnement du AWSCDK. 

  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 AWS CloudFormation pile crée l'infrastructure suivante :

    • Une non-production nommée VPC cicd-vpc-ecs/cicd-vpc-nonprod

    • Une production VPC nommée cicd-vpc-ecs/cicd-vpc-prod

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

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

AWS DevOps, Infrastructure cloud
Surveillez la AWS CloudFormation pile.
  1. Connectez-vous à la console AWS de gestion, ouvrez la AWS CloudFormation console, 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 AWS CloudFormation pile.
  1. Une fois la cicd-vpc-ecs AWS CloudFormation pile 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 ECS clusters cicd-ecs-nonprod et cicd-ecs-prod Amazon 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 deuxVPCs.

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.

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

AWS DevOps, Infrastructure cloud
Surveillez la AWS CloudFormation pile.

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

AWS DevOps, Infrastructure cloud
Testez la AWS CloudFormation pile.
  1. Sur la AWS CodeCommit console, vérifiez qu'un dépôt nommé myservice1 existe et qu'il contient le code de démarrage.

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

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

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

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

  6. Sur la AWS CodePipeline console, 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 DNS noms desALBs.

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

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