

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.

# Détectez automatiquement les modifications et lancez différents CodePipeline pipelines pour un monorepo dans CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha et Ricardo Morais, Amazon Web Services*

## Résumé
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Remarque** : n' AWS Cloud9 est plus disponible pour les nouveaux clients. Les clients existants de AWS Cloud9 peuvent continuer à utiliser le service normalement. [En savoir plus](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Ce modèle vous permet de détecter automatiquement les modifications apportées au code source d'une application monorepo, puis de lancer un pipeline AWS CodePipeline qui exécute l'intégration AWS CodeCommit et la livraison continues (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline), ce qui garantit une meilleure visibilité, un partage facilité du code et une collaboration, une standardisation et une découvrabilité améliorées.

La solution décrite dans ce modèle n'effectue aucune analyse de dépendance entre les microservices du monorepo. Il détecte uniquement les modifications du code source et lance le CI/CD pipeline correspondant.

Le modèle est utilisé AWS Cloud9 comme environnement de développement intégré (IDE) et AWS Cloud Development Kit (AWS CDK) pour définir une infrastructure en utilisant deux CloudFormation piles : `MonoRepoStack` et`PipelinesStack`. La `MonoRepoStack` pile crée le monorepo dans AWS CodeCommit et la AWS Lambda fonction qui initie les pipelines. CI/CD La `PipelinesStack` pile définit l'infrastructure de votre pipeline.

**Important**  
Le flux de travail de ce modèle est une preuve de concept (PoC). Nous vous recommandons de l'utiliser uniquement dans un environnement de test. Si vous souhaitez utiliser l'approche de ce modèle dans un environnement de production, consultez les [meilleures pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation Gestion des identités et des accès AWS (IAM) et apportez les modifications requises à vos rôles IAM et. Services AWS 

## Conditions préalables et limitations
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Conditions préalables**
+ Un AWS compte actif.
+ AWS Command Line Interface (AWS CLI), installé et configuré. Pour plus d'informations, consultez la section [Installation, mise à jour et désinstallation du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dans la AWS CLI documentation.  
+ Python 3 et`pip`, installé sur votre machine locale. Pour plus d'informations, consultez la [documentation Python](https://www.python.org/). 
+ AWS CDK, installé et configuré. Pour plus d'informations, consultez la section [Mise en route avec le AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dans la AWS CDK documentation. 
+ Un AWS Cloud9 IDE, installé et configuré. Pour plus d'informations, consultez la section [Configuration AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) dans la AWS Cloud9 documentation. 
+ Le référentiel de [déclencheurs multi-pipelines GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), cloné sur votre machine locale. 
+ Répertoire existant contenant le code d'application que vous souhaitez utiliser pour créer et déployer CodePipeline.
+ Connaissance et expérience des DevOps meilleures pratiques en matière de AWS Cloud. Pour vous familiariser davantage DevOps, vous pouvez utiliser le modèle [Créez une architecture faiblement couplée avec des microservices en utilisant des DevOps pratiques et AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) sur le site Web du guide AWS prescriptif.  

## Architecture
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

Le schéma suivant montre comment utiliser le AWS CDK pour définir une infrastructure à deux AWS CloudFormation piles : `MonoRepoStack` et`PipelinesStack`.

![\[Flux de travail permettant d'utiliser le kit AWS CDK pour définir une infrastructure à deux CloudFormation piles.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


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

1. Le processus bootstrap utilise le AWS CDK pour créer les AWS CloudFormation piles et`MonoRepoStack`. `PipelinesStack`

1. La `MonoRepoStack` pile crée le CodeCommit référentiel pour votre application et la fonction `monorepo-event-handler` Lambda qui est lancée après chaque validation.

1. La `PipelinesStack` pile crée les pipelines CodePipeline initiés par la fonction Lambda. Chaque microservice doit disposer d'un pipeline d'infrastructure défini.

1. Le pipeline pour `microservice-n` est initié par la fonction Lambda et démarre ses CI/CD étapes isolées basées sur le code source dans. CodeCommit

1. Le pipeline pour `microservice-1` est initié par la fonction Lambda et démarre ses CI/CD étapes isolées basées sur le code source dans. CodeCommit

Le schéma suivant montre le déploiement des AWS CloudFormation stacks `MonoRepoStack` et `PipelinesStack` dans un compte.

![\[Déploiement des CloudFormation stacks MonoRepoStack et PipelinesStack dans un compte AWS.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Un utilisateur modifie le code dans l'un des microservices de l'application.

1. L'utilisateur transfère les modifications d'un dépôt local vers un CodeCommit dépôt.

1. L'activité push lance la fonction Lambda qui reçoit tous les push vers le référentiel. CodeCommit 

1. La fonction Lambda lit un paramètre dans Parameter Store, une fonctionnalité de AWS Systems Manager, pour récupérer l'ID de validation le plus récent. Le paramètre a le format de dénomination :`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Si le paramètre n'est pas trouvé, la fonction Lambda lit le dernier ID de validation dans le CodeCommit référentiel et enregistre la valeur renvoyée dans Parameter Store.

1. Après avoir identifié l'ID de validation et les fichiers modifiés, la fonction Lambda identifie les pipelines pour chaque répertoire de microservices et lance le pipeline requis. CodePipeline 

## Outils
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)est un framework de développement logiciel permettant de définir l'infrastructure cloud dans le code et de la provisionner via CloudFormation celle-ci.
+ [Python](https://www.python.org/) est un langage de programmation qui permet de travailler rapidement et d'intégrer des systèmes plus efficacement.

**Code**

Le code source et les modèles de ce modèle sont disponibles dans le référentiel de déclencheurs [multi-pipelines GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Bonnes pratiques
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Cet exemple d'architecture n'inclut pas de solution de surveillance pour l'infrastructure déployée. Si vous souhaitez déployer cette solution dans un environnement de production, nous vous recommandons d'activer la surveillance. Pour plus d'informations, consultez la section [Surveiller vos applications sans serveur avec CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) dans la documentation AWS Serverless Application Model (AWS SAM).
+ Lorsque vous modifiez l'exemple de code fourni par ce modèle, suivez les [meilleures pratiques de développement et de déploiement de l'infrastructure cloud](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) décrites dans la AWS CDK documentation.
+ Lorsque vous définissez vos pipelines de microservices, consultez les [meilleures pratiques de sécurité décrites](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dans la AWS CodePipeline documentation.
+ Vous pouvez également vérifier les meilleures pratiques de votre AWS CDK code à l'aide de l'utilitaire [cdk-nag](https://github.com/cdklabs/cdk-nag). Cet outil utilise un ensemble de règles, regroupées par packs, pour évaluer votre code. Les packs disponibles sont les suivants :
  + [AWS Bibliothèque de solutions](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Sécurité de la Health Insurance Portability and Accountability Act (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Institut national des normes et de la technologie (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 version 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Norme de sécurité des données de l'industrie des cartes de paiement (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Épopées
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Configuration de l'environnement
<a name="set-up-the-environment"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un environnement Python virtuel. | Dans votre AWS Cloud9 IDE, créez un environnement Python virtuel et installez les dépendances requises en exécutant la commande suivante :`make install` | Developer | 
| Bootstrap le Compte AWS et Région AWS pour le. AWS CDK | Démarrez le fichier requis Compte AWS et la région en exécutant la commande suivante :`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Ajouter un nouveau pipeline pour un microservice
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
|  Ajoutez votre exemple de code dans le répertoire de votre application. | Ajoutez le répertoire contenant votre exemple de code d'application au `monorepo-sample` répertoire du référentiel de déclencheurs GitHub [AWS CodeCommit monorepo multi-pipelines](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) clonés. | Developer | 
| Modifiez le fichier `monorepo-main.json`. | Ajoutez le nom du répertoire du code de votre application et le nom du pipeline au `monorepo-main.json` fichier du référentiel cloné. | Developer | 
| Créez le pipeline. | Dans le `Pipelines` répertoire du référentiel, ajoutez le pipeline `class` de votre application. Le répertoire contient deux exemples de fichiers, `pipeline_hotsite.py` et`pipeline_demo.py`. Chaque fichier comporte trois étapes : source, génération et déploiement.Vous pouvez copier l'un des fichiers et y apporter des modifications conformément aux exigences de votre application.  | Developer | 
| Modifiez le fichier `monorepo_config.py`. | Dans`service_map`, ajoutez le nom du répertoire de votre application et la classe que vous avez créée pour le pipeline.Par exemple, le code suivant montre une définition de pipeline dans le `Pipelines` répertoire qui utilise un fichier nommé `pipeline_mysample.py` avec une `MySamplePipeline` classe :<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Developer | 

### Déployez la MonoRepoStack pile
<a name="deploy-the-monorepostack-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la AWS CloudFormation pile. | Déployez la AWS CloudFormation `MonoRepoStack` pile avec les valeurs de paramètres par défaut dans le répertoire racine du référentiel cloné en exécutant la `make deploy-core` commande.Vous pouvez modifier le nom du dépôt en exécutant la `make deploy-core monorepo-name=<repo_name>` commande.Vous pouvez déployer les deux pipelines simultanément à l'aide de la `make deploy monorepo-name=<repo_name>` commande. | Developer | 
| Validez le CodeCommit référentiel. | Vérifiez que vos ressources ont été créées en exécutant la `aws codecommit get-repository --repository-name <repo_name>` commande. Étant donné que la CloudFormation pile crée le CodeCommit référentiel dans lequel le monorepo est stocké, n'exécutez pas la `cdk destroy MonoRepoStack ` commande si vous avez commencé à y apporter des modifications. | Developer | 
| Validez les résultats de la CloudFormation pile. | Vérifiez que la CloudFormation `MonoRepoStack` pile est correctement créée et configurée en exécutant la commande suivante :<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Déployez la PipelinesStack pile
<a name="deploy-the-pipelinesstack-stack"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez la CloudFormation pile. | La AWS CloudFormation `PipelinesStack` pile doit être déployée après le déploiement de la `MonoRepoStack` pile. La taille de la pile augmente lorsque de nouveaux microservices sont ajoutés à la base de code du monorepo et est redéployée lorsqu'un nouveau microservice est intégré.Déployez la PipelinesStack pile en exécutant la `make deploy-pipelines` commande.Vous pouvez également déployer simultanément les deux pipelines en exécutant la `make deploy monorepo-name=<repo_name>` commande.L'exemple de sortie suivant montre comment le `PipelinesStacks` déploiement imprime URLs les microservices à la fin de l'implémentation :<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Validez les résultats de la AWS CloudFormation pile. | Vérifiez que la AWS CloudFormation `PipelinesStacks` pile est correctement créée et configurée en exécutant la commande suivante :<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez vos AWS CloudFormation piles. | Exécutez la commande `make destroy`. | Developer | 
| Supprimez les compartiments S3 de vos pipelines. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## Résolution des problèmes
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| J'ai rencontré AWS CDK des problèmes. | Consultez la section [Résolution AWS CDK des problèmes courants](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) dans la documentation AWS CDK. | 
| J'ai envoyé mon code de microservice, mais le pipeline de microservices n'a pas fonctionné. | **Validation de configuration***Vérifiez la configuration de la branche :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Validez les fichiers de configuration :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Résolution des problèmes sur la console***AWS CodePipeline chèques :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda résolution des problèmes :*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Je dois redéployer tous mes microservices.  | Il existe deux approches pour forcer le redéploiement de tous les microservices. Choisissez l'option qui correspond à vos besoins.**Approche 1 : supprimer un paramètre dans Parameter Store**Cette méthode implique la suppression d'un paramètre spécifique dans le magasin de paramètres de Systems Manager qui suit le dernier ID de validation utilisé pour le déploiement. Lorsque vous supprimez ce paramètre, le système est obligé de redéployer tous les microservices lors du prochain déclencheur, car il le perçoit comme un nouvel état.Étapes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Avantages :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Inconvénients :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Approche 2 : envoyer un commit dans chaque sous-dossier monorepo**Cette méthode consiste à apporter une modification mineure et à l'insérer dans chaque sous-dossier de microservice du monorepo pour initier leurs pipelines individuels.Étapes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Avantages :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Inconvénients :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Ressources connexes
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Intégration et livraison continues (CI/CD) à l'aide de CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (documentation)AWS CDK 
+ [module aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (référence d'API)AWS CDK 