

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.

# Configurez un CI/CD pipeline pour les charges de travail hybrides sur Amazon ECS Anywhere à l'aide d'AWS CDK et GitLab
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab"></a>

*Rafael Ortiz, Amazon Web Services*

## Résumé
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-summary"></a>

Amazon ECS Anywhere est une extension d'Amazon Elastic Container Service (Amazon ECS). Elle prend en charge l'enregistrement d'une *instance externe*, telle qu'un serveur sur site ou une machine virtuelle (VM), sur votre cluster Amazon ECS. Cette fonctionnalité permet de réduire les coûts et d'atténuer l'orchestration et les opérations complexes des conteneurs locaux. Vous pouvez utiliser ECS Anywhere pour déployer et exécuter des applications de conteneur dans des environnements sur site et dans le cloud. Ainsi, votre équipe n'a plus besoin d'apprendre plusieurs domaines et compétences, ou de gérer elle-même des logiciels complexes.

Ce modèle décrit une step-by-step approche pour approvisionner un cluster Amazon ECS avec des instances Amazon ECS Anywhere à l'aide de piles Amazon Web Services (AWS) Cloud Development Kit (AWS CDK). Vous utilisez ensuite AWS CodePipeline pour configurer un pipeline d'intégration et de déploiement continus (CI/CD). Ensuite, vous répliquez votre référentiel de GitLab code sur AWS CodeCommit et vous déployez votre application conteneurisée sur le cluster Amazon ECS.

Ce modèle est conçu pour aider ceux qui utilisent une infrastructure sur site à exécuter des applications de conteneur et GitLab à gérer la base de code de l'application. Vous pouvez gérer ces charges de travail à l'aide des services cloud AWS, sans perturber votre infrastructure sur site existante.

## Conditions préalables et limitations
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Application conteneur exécutée sur une infrastructure sur site.
+ Un GitLab référentiel dans lequel vous gérez la base de code de votre application. Pour plus d'informations, consultez [Repository](https://docs.gitlab.com/ee/user/project/repository/) (GitLab).
+ Interface de ligne de commande AWS (AWS CLI), installée et configurée. Pour plus d'informations, consultez [Installation ou mise à jour de la dernière version de l'interface de ligne de commande AWS](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (documentation de l'interface de ligne de commande AWS).
+ AWS CDK Toolkit, installé et configuré dans le monde entier. Pour plus d'informations, consultez [Installer le CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) (documentation du CDK AWS).
+ npm, installé et configuré pour le AWS CDK dans. TypeScript Pour plus d'informations, consultez [Téléchargement et installation de Node.js et de npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) (documentation npm).

**Limites**
+ Pour connaître les limites et les considérations, consultez la section [Instances externes (Amazon ECS Anywhere)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations) dans la documentation Amazon ECS.

**Versions du produit**
+ AWS CDK Toolkit version 2.27.0 ou ultérieure
+ npm version 7.20.3 ou ultérieure
+ Node.js version 16.6.1 ou ultérieure

## Architecture
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-architecture"></a>

**Pile technologique cible**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ Amazon ECS Anywhere
+ Amazon Elastic Container Registry (Amazon ECR)
+ AWS Identity and Access Management (IAM)
+ Gestionnaire du système AWS
+ GitLab référentiel

**Architecture cible**

![\[Schéma d'architecture de configuration du cluster et du CI/CD pipeline Amazon ECS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/b0f35986-a839-4b01-8eb0-4748182ddafc/images/85b8d4d9-3591-4d69-a54b-64aa543498f1.png)


Ce diagramme représente deux flux de travail principaux décrits dans ce modèle, à savoir le provisionnement du cluster Amazon ECS et la configuration du CI/CD pipeline qui configure et déploie le CI/CD pipeline, comme suit :

1. **Provisionnement du cluster Amazon ECS**

   1. Lorsque vous déployez la première pile AWS CDK, elle crée une CloudFormation pile sur AWS.

   1. Cette CloudFormation pile fournit un cluster Amazon ECS et les ressources AWS associées.

   1. Pour enregistrer une instance externe auprès d'un cluster Amazon ECS, vous devez installer l'agent AWS Systems Manager (agent SSM) sur votre machine virtuelle et enregistrer la machine virtuelle en tant qu'instance gérée par AWS Systems Manager. 

   1. Vous devez également installer l'agent de conteneur Amazon ECS et Docker sur votre machine virtuelle pour l'enregistrer en tant qu'instance externe auprès du cluster Amazon ECS.

   1. Lorsque l'instance externe est enregistrée et configurée avec le cluster Amazon ECS, elle peut exécuter plusieurs conteneurs sur votre machine virtuelle, qui est enregistrée en tant qu'instance externe.

   1. Le cluster Amazon ECS est actif et peut exécuter les charges de travail des applications via des conteneurs. L'instance de conteneur Amazon ECS Anywhere s'exécute dans un environnement sur site mais est associée au cluster Amazon ECS dans le cloud.

1. **Configuration et déploiement du CI/CD pipeline**

   1. Lorsque vous déployez la deuxième pile AWS CDK, elle en crée une autre CloudFormation sur AWS.

   1. Cette CloudFormation pile fournit un pipeline dans les ressources AWS CodePipeline et les ressources associées.

   1. Vous transférez et fusionnez les modifications du code de l'application dans un GitLab référentiel local. 

   1. Le GitLab référentiel est automatiquement répliqué dans le CodeCommit référentiel.

   1. Les mises à jour du CodeCommit dépôt CodePipeline démarrent automatiquement. 

   1. CodePipeline copie le code depuis CodeCommit et crée l'application déployable intégrée. CodeBuild

   1. CodePipeline crée une image Docker de l'environnement de CodeBuild construction et l'envoie vers le dépôt Amazon ECR.

   1. CodePipeline lance des CodeDeploy actions qui extraient l'image du conteneur depuis le dépôt Amazon ECR.

   1. CodePipeline déploie l'image du conteneur sur le cluster Amazon ECS.

**Automatisation et mise à l'échelle**

Ce modèle utilise le CDK AWS comme outil d'infrastructure sous forme de code (IaC) pour configurer et déployer cette architecture. AWS CDK vous aide à orchestrer les ressources AWS et à configurer Amazon ECS Anywhere et le CI/CD pipeline.

## Outils
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-tools"></a>

**Services AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) est un framework de développement logiciel qui vous aide à définir et à provisionner l'infrastructure du cloud AWS sous forme de code.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 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, sans avoir à gérer votre propre système de contrôle de source.
+ [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) vous CodePipeline aide à modéliser et à configurer rapidement les différentes étapes d'une version logicielle et à automatiser les étapes nécessaires à la publication continue des modifications logicielles.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) est un service de gestion de conteneurs évolutif et rapide, qui facilite l'exécution, l'arrêt et la gestion de conteneurs Docker sur un cluster. Ce modèle utilise également [Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html), qui permet d'enregistrer un serveur ou une machine virtuelle sur site dans votre cluster Amazon ECS.

**Autres outils**
+ [Node.js](https://nodejs.org/en/docs/) est un environnement d' JavaScript exécution piloté par les événements conçu pour créer des applications réseau évolutives.
+ [npm](https://docs.npmjs.com/about-npm) est un registre de logiciels qui s'exécute dans un environnement Node.js et est utilisé pour partager ou emprunter des packages et gérer le déploiement de packages privés.
+ [Vagrant](https://developer.hashicorp.com/vagrant/docs) est un utilitaire open source permettant de créer et de maintenir des environnements de développement de logiciels virtuels portables. À des fins de démonstration, ce modèle utilise Vagrant pour créer une machine virtuelle sur site.

**Référentiel de code**

Le code de ce modèle est disponible dans le [pipeline GitHub CI/CD pour Amazon ECS Anywhere à l'aide du référentiel AWS CDK](https://github.com/aws-samples/amazon-ecs-anywhere-cicd-pipeline-cdk-sample).

## Bonnes pratiques
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-best-practices"></a>

Tenez compte des meilleures pratiques suivantes lors du déploiement de ce modèle :
+ [Bonnes pratiques pour le développement et le déploiement d'une infrastructure cloud avec le CDK AWS](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)
+ [Bonnes pratiques pour le développement d'applications cloud avec AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (article de blog AWS)

## Épopées
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-epics"></a>

### Vérifiez la configuration du kit AWS CDK
<a name="verify-the-aws-cdk-configuration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez la version du kit AWS CDK. | Vérifiez la version du kit d'outils AWS CDK en saisissant la commande suivante.<pre>cdk --version</pre>Ce modèle nécessite la version 2.27.0 ou ultérieure. Si vous disposez d'une version antérieure, suivez les instructions de la [documentation AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) pour la mettre à jour. | DevOps ingénieur | 
| Vérifiez la version de npm. | Vérifiez la version de npm en saisissant la commande suivante.<pre>npm --version</pre>Ce modèle nécessite la version 7.20.3 ou ultérieure. Si vous avez une version antérieure, suivez les instructions de la [documentation de npm](https://docs.npmjs.com/try-the-latest-stable-version-of-npm) pour la mettre à jour. | DevOps ingénieur | 
| Configurez les informations d'identification AWS. | Configurez les informations d'identification AWS en saisissant la `aws configure` commande et en suivant les instructions.<pre>$aws configure<br />AWS Access Key ID [None]: <your-access-key-ID><br />AWS Secret Access Key [None]: <your-secret-access-key><br />Default region name [None]: <your-Region-name><br />Default output format [None]:</pre> | DevOps ingénieur | 

### Démarrez l'environnement AWS CDK
<a name="bootstrap-the-aws-cdk-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le référentiel de code AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps ingénieur | 
| Démarrez l'environnement. | Déployez le CloudFormation modèle sur le compte et la région AWS que vous souhaitez utiliser en saisissant la commande suivante.<pre>cdk bootstrap <account-number>/<Region></pre>Pour plus d'informations, consultez la section [Bootstrapping](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) dans la documentation AWS CDK. | DevOps ingénieur | 

### Créez et déployez l'infrastructure pour Amazon ECS Anywhere
<a name="build-and-deploy-the-infrastructure-for-amazon-ecs-anywhere"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Installez les dépendances du package et compilez les TypeScript fichiers. | Installez les dépendances du package et compilez les TypeScript fichiers en saisissant les commandes suivantes.<pre>$cd EcsAnywhereCdk<br />$npm install<br />$npm fund </pre>Ces commandes installent tous les packages du référentiel d'échantillons. Pour plus d'informations, consultez [npm ci](https://docs.npmjs.com/cli/v7/commands/npm-ci) et [npm install](https://docs.npmjs.com/cli/v7/commands/npm-install) dans la documentation de npm. Si vous recevez des erreurs concernant des packages manquants lorsque vous entrez ces commandes, consultez la section [Dépannage](#set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting) de ce modèle. | DevOps ingénieur | 
| Générez le projet. | Pour créer le code du projet, entrez la commande suivante.<pre>npm run build</pre>Pour plus d'informations sur la création et le déploiement du projet, consultez [Votre première application AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#:~:text=the%20third%20parameter.-,Synthesize%20an%20AWS%20CloudFormation%20template,-Synthesize%20an%20AWS) dans la documentation du CDK AWS. | DevOps ingénieur | 
| Déployez la pile d'infrastructure Amazon ECS Anywhere. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps ingénieur | 
| Vérifiez la création et la sortie de la pile. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps ingénieur | 

### Configuration d'une machine virtuelle sur site
<a name="set-up-an-on-premises-vm"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez votre machine virtuelle. | Créez une machine virtuelle Vagrant en entrant la `vagrant up` commande depuis le répertoire racine où se trouve Vagrantfile. Pour plus d'informations, consultez la [documentation de Vagrant](https://developer.hashicorp.com/vagrant/docs/cli/up). | DevOps ingénieur | 
| Enregistrez votre machine virtuelle en tant qu'instance externe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html)Cela permet de configurer votre machine virtuelle en tant qu'instance externe Amazon ECS Anywhere et d'enregistrer l'instance dans le cluster Amazon ECS. Pour plus d'informations, consultez la section [Enregistrement d'une instance externe dans un cluster](https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ecs-anywhere-registration.html) dans la documentation Amazon ECS. Si vous rencontrez des problèmes, consultez la section [Dépannage](#set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting). | DevOps ingénieur | 
| Vérifiez l'état d'Amazon ECS Anywhere et de la machine virtuelle externe. | Pour vérifier si votre machine virtuelle est connectée au plan de contrôle Amazon ECS et en cours d'exécution, utilisez les commandes suivantes.<pre>$aws ssm describe-instance-information<br />$aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | DevOps ingénieur | 

### Déployer le CI/CD pipeline
<a name="deploy-the-ci-cd-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une branche dans le CodeCommit dépôt. | Créez une branche nommée `main` dans le CodeCommit dépôt en créant le premier commit pour le référentiel. Vous pouvez suivre la documentation AWS pour [créer un commit dans CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-commit.html#create-first-commit). Voici un exemple de commande.<pre>aws codecommit put-file \<br />  --repository-name EcsAnywhereRepo \<br />  --branch-name main \<br />  --file-path README.md \<br />  --file-content "Test" \<br />  --name "Dev Ops" \<br />  --email "devops@example.com" \<br />  --commit-message "Adding README."</pre> | DevOps ingénieur | 
| Configurez la mise en miroir des dépôts. | Vous pouvez mettre en miroir un GitLab référentiel depuis et vers des sources externes. Vous pouvez sélectionner le référentiel qui servira de source. Les branches, les tags et les commits sont synchronisés automatiquement. Configurez un miroir push entre le GitLab référentiel hébergeant votre application et le CodeCommit référentiel. Pour obtenir des instructions, voir [Configurer un miroir push de GitLab à CodeCommit](https://docs.gitlab.com/ee/user/project/repository/mirror/push.html#set-up-a-push-mirror-from-gitlab-to-aws-codecommit) (GitLab documentation).Par défaut, la mise en miroir synchronise automatiquement le référentiel. Si vous souhaitez mettre à jour les référentiels manuellement, voir [Mettre à jour un miroir](https://docs.gitlab.com/ee/user/project/repository/mirror/#update-a-mirror) (GitLab documentation). | DevOps ingénieur | 
| Déployez la pile de CI/CD pipelines. | Déployez la `EcsAnywherePipelineStack` pile en saisissant la commande suivante.<pre>$cdk  deploy EcsAnywherePipelineStack</pre> | DevOps ingénieur | 
| Testez le CI/CD pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps ingénieur | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez et supprimez les ressources. | Après avoir suivi ce modèle, vous devez supprimer les proof-of-concept ressources que vous avez créées. Pour nettoyer, entrez les commandes suivantes.<pre>$cdk destroy EcsAnywherePipelineStack<br />$cdk destroy EcsAnywhereInfraStack</pre> | DevOps ingénieur | 

## Résolution des problèmes
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Erreurs relatives à des packages manquants lors de l'installation des dépendances des packages. | Entrez l'une des commandes suivantes pour résoudre les packages manquants.<pre>$npm ci</pre>or<pre>$npm install -g @aws-cdk/<package_name></pre> | 
| Lorsque vous exécutez la `aws ssm create-activation` commande sur la machine virtuelle, le message d'erreur suivant s'affiche.`An error occurred (ValidationException) when calling the CreateActivation operation: Nonexistent role or missing ssm service principal in trust policy: arn:aws:iam::000000000000:role/EcsAnywhereInstanceRole` | La `EcsAnywhereInfraStack` pile n'est pas complètement déployée et le rôle IAM nécessaire pour exécuter cette commande n'a pas encore été créé. Vérifiez l'état de la pile dans la CloudFormation console. Réessayez la commande une fois que le statut est passé à`CREATE_COMPLETE`. | 
| Un bilan de santé Amazon ECS est renvoyé et l'erreur suivante s'affiche dans la section **Services** du cluster de la console Amazon ECS. `UNHEALTHY``service EcsAnywhereService was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster.` | Redémarrez l'agent Amazon ECS sur votre machine virtuelle Vagrant en saisissant les commandes suivantes.<pre>$vagrant ssh<br />$sudo systemctl restart ecs<br />$sudo systemctl status ecs</pre> | 

## Ressources connexes
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-resources"></a>
+ [Page marketing d'Amazon ECS Anywhere](https://aws.amazon.com/ecs/anywhere/)
+ [Documentation Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations)
+ [Démonstration d'Amazon ECS Anywhere](https://www.youtube.com/watch?v=-eud6yUXsJM) (vidéo)
+ [Exemples d'ateliers Amazon ECS Anywhere](https://github.com/aws-samples/aws-ecs-anywhere-workshop-samples) (GitHub)
+ [Mise en miroir de référentiels](https://docs.gitlab.com/ee/user/project/repository/mirror/) (GitLab documentation)