

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 un CI/CD pipeline pour valider les configurations Terraform à l'aide d'AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan et Vijesh Vijayakumaran Nair, Amazon Web Services*

## Résumé
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Ce modèle montre comment tester les configurations HashiCorp Terraform à l'aide d'un pipeline d'intégration continue et de livraison continue (CI/CD) déployé par AWS. CodePipeline

Terraform est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud. [La solution fournie dans ce modèle crée un CI/CD pipeline qui vous aide à valider l'intégrité de vos configurations Terraform en exécutant cinq CodePipeline étapes :](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`extrait la configuration Terraform que vous testez à partir d'un référentiel AWS CodeCommit .

1. `"validate"`exécute des outils de validation de l'infrastructure en tant que code (IaC) [TFLint](https://github.com/terraform-linters/tflint), notamment [tfsec](https://github.com/aquasecurity/tfsec) et [checkov](https://www.checkov.io/). Le stage exécute également les commandes de validation Terraform IaC suivantes : `terraform validate` et. `terraform fmt`

1. `"plan"`indique quelles modifications seront appliquées à l'infrastructure si la configuration Terraform est appliquée.

1. `"apply"`utilise le plan généré pour fournir l'infrastructure requise dans un environnement de test.

1. `"destroy"`supprime l'infrastructure de test créée au cours de l'`"apply"`étape.

## Conditions préalables et limitations
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ [Interface de ligne de commande AWS (AWS CLI)[, installée et](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) configurée](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installé et configuré sur votre machine locale
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), installé et configuré sur votre machine locale

**Limites**
+ L'approche de ce modèle déploie AWS CodePipeline sur un seul compte AWS et dans une seule région AWS. Des modifications de configuration sont nécessaires pour les déploiements multicomptes et multirégions.
+ Le rôle AWS Identity and Access Management (IAM) fourni par ce modèle (**codepipeline\$1iam\$1role**) suit le principe du moindre privilège. Les autorisations de ce rôle IAM doivent être mises à jour en fonction des ressources spécifiques que votre pipeline doit créer. ****

**Versions du produit**
+ AWS CLI version 2.9.15 ou ultérieure
+ Terraform version 1.3.7 ou ultérieure

## Architecture
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Pile technologique cible**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Architecture cible**

Le schéma suivant montre un exemple de flux de travail de CI/CD pipeline pour tester les configurations Terraform dans. CodePipeline

![\[Architecture permettant de tester les configurations Terraform à l'aide d'un pipeline AWS CI/CD .\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


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

1. Dans CodePipeline, un utilisateur AWS lance les actions proposées dans un plan Terraform en exécutant la `terraform apply` commande dans l'AWS CLI.

1. AWS CodePipeline assume un rôle de service IAM qui inclut les politiques requises pour accéder CodeCommit à AWS KMS et à Amazon S3. CodeBuild

1. CodePipeline exécute l'étape du `"checkout"` pipeline pour extraire la configuration Terraform d'un CodeCommit référentiel AWS à des fins de test.

1. CodePipeline exécute l'`"validate"`étape pour tester la configuration de Terraform en exécutant les outils de validation IaC et en exécutant les commandes de validation Terraform iAc dans un projet. CodeBuild 

1. CodePipeline exécute l'`"plan"`étape pour créer un plan dans le CodeBuild projet basé sur la configuration Terraform. L'utilisateur AWS peut consulter ce plan avant que les modifications ne soient appliquées à l'environnement de test.

1. Code Pipeline exécute l'`"apply"`étape de mise en œuvre du plan en utilisant le CodeBuild projet pour fournir l'infrastructure requise dans l'environnement de test.

1. CodePipeline exécute la `"destroy"` phase, qui permet CodeBuild de supprimer l'infrastructure de test créée pendant la `"apply"` phase.

1. Un compartiment Amazon S3 stocke les artefacts du pipeline, qui sont chiffrés et déchiffrés à l'aide d'une clé gérée par le [client](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) AWS KMS.

## Outils
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Outils**

*Services AWS*
+ [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.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) est un service de génération entièrement géré qui vous aide à compiler le code source, à exécuter des tests unitaires et à produire des artefacts prêts à être déployés.
+ [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 Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.

*Autres services*
+ [HashiCorp Terraform](https://www.terraform.io/docs) est une application d'interface en ligne de commande qui vous aide à utiliser du code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Code**

Le code de ce modèle est disponible dans le GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)référentiel. Le référentiel contient les configurations Terraform requises pour créer l'architecture cible décrite dans ce modèle.

## Épopées
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Fournir les composants de la solution
<a name="provision-the-solution-components"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez le GitHub dépôt. | Clonez le GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)dépôt en exécutant la commande suivante dans une fenêtre de terminal :<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Pour plus d'informations, consultez la section [Clonage d'un dépôt](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) dans la GitHub documentation. | DevOps ingénieur | 
| Créez un fichier de définitions de variables Terraform.  | Créez un `terraform.tfvars` fichier en fonction des exigences de votre cas d'utilisation. Vous pouvez mettre à jour les variables dans le `examples/terraform.tfvars` fichier qui se trouve dans le dépôt cloné.Pour plus d'informations, consultez [Affecter des valeurs aux variables du module racine](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) dans la documentation Terraform.Le `Readme.md` fichier du référentiel contient plus d'informations sur les variables requises. | DevOps ingénieur | 
| Configurez AWS en tant que fournisseur Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Pour plus d'informations, consultez le [fournisseur AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) dans la documentation Terraform. | DevOps ingénieur | 
| Mettez à jour la configuration du fournisseur Terraform pour créer le compartiment de réplication Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)La réplication active la copie automatique et asynchrone des objets dans les compartiments Amazon S3. | DevOps ingénieur | 
| Initialisez la configuration Terraform. | Pour initialiser votre répertoire de travail qui contient les fichiers de configuration Terraform, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform init</pre> | DevOps ingénieur | 
| Créez le plan Terraform. | Pour créer un plan Terraform, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform évalue les fichiers de configuration pour déterminer l'état cible des ressources déclarées. Il compare ensuite l'état cible à l'état actuel et crée un plan. | DevOps ingénieur | 
| Vérifiez le plan Terraform. | Passez en revue le plan Terraform et confirmez qu'il configure l'architecture requise dans votre compte AWS cible. | DevOps ingénieur | 
| Déployez la solution. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform crée, met à jour ou détruit l'infrastructure pour atteindre l'état cible déclaré dans les fichiers de configuration. | DevOps ingénieur | 

### Validez les configurations Terraform en exécutant le pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Configurez le référentiel de code source. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps ingénieur | 
| Validez les étapes du pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Pour plus d'informations, consultez [Afficher les détails et l'historique du pipeline (console)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) dans le *guide de CodePipeline l'utilisateur AWS*.Lorsqu'une modification est validée dans la branche principale du référentiel source, le pipeline de test est automatiquement activé. | DevOps ingénieur | 
| Vérifiez le résultat du rapport. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Le `<project_name>-validate` CodeBuild projet génère des rapports de vulnérabilité pour votre code au cours de l'`"validate"`étape. | DevOps ingénieur | 

### Nettoyage de vos ressources
<a name="clean-up-your-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Nettoyez le pipeline et les ressources associées. | Pour supprimer les ressources de test de votre compte AWS, exécutez la commande suivante dans le dossier racine du référentiel cloné :<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps ingénieur | 

## Résolution des problèmes
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Vous recevez un **AccessDenied **message d'erreur au cours de l'`"apply"`étape. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Ressources connexes
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blocs de modules](https://developer.hashicorp.com/terraform/language/modules/syntax) (documentation Terraform)
+ [Comment utiliser pour CI/CD déployer et configurer les services de sécurité AWS avec Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (article de blog AWS)
+ [Utilisation de rôles liés à un service (documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) IAM)
+ [create-pipeline](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) (documentation de la CLI AWS)
+ [Configurer le chiffrement côté serveur pour les artefacts stockés dans Amazon S3 pour (documentation CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) AWS CodePipeline )
+ [Quotas pour AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild documentation AWS)
+ [Protection des données dans AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline documentation AWS)

## Informations supplémentaires
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Modules Terraform personnalisés**

Voici une liste des modules Terraform personnalisés utilisés dans ce modèle :
+ `codebuild_terraform`crée les CodeBuild projets qui constituent chaque étape du pipeline.
+ `codecommit_infrastructure_source_repo`capture et crée le CodeCommit référentiel source.
+ `codepipeline_iam_role`crée les rôles IAM requis pour le pipeline.
+ `codepipeline_kms`crée la clé AWS KMS requise pour le chiffrement et le déchiffrement des objets Amazon S3.
+ `codepipeline_terraform`crée le pipeline de test pour le CodeCommit référentiel source.
+ `s3_artifacts_bucket`crée un compartiment Amazon S3 pour gérer les artefacts du pipeline.

**Fichiers de spécifications de construction**

Voici une liste des fichiers de spécification de construction (buildspec) que ce modèle utilise pour exécuter chaque étape du pipeline :
+ `buildspec_validate.yml`dirige la `"validate"` scène.
+ `buildspec_plan.yml`dirige la `"plan"` scène.
+ `buildspec_apply.yml`dirige la `"apply"` scène.
+ `buildspec_destroy.yml`dirige la `"destroy"` scène.

*Variables du fichier de spécifications de construction*

Chaque fichier buildspec utilise les variables suivantes pour activer différents paramètres spécifiques à la version :


| 
| 
| Variable | Valeur par défaut | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." | Définit le CodeCommit répertoire source | 
| `TF_VERSION` | « 1,3,7 » | Définit la version Terraform pour l'environnement de construction | 

Le `buildspec_validate.yml` fichier prend également en charge les variables suivantes pour activer différents paramètres spécifiques à la version :


| 
| 
| Variable | Valeur par défaut | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | «. /modèles/scripts » | Définit le répertoire des scripts | 
| `ENVIRONMENT` | « développeur » | Définit le nom de l'environnement | 
| `SKIPVALIDATIONFAILURE` | « Y » | Ignore la validation en cas d'échec | 
| `ENABLE_TFVALIDATE` | « Y » | Active la validation Terraform  | 
| `ENABLE_TFFORMAT` | « Y » | Active le format Terraform | 
| `ENABLE_TFCHECKOV` | « Y » | Active le scan de vérification | 
| `ENABLE_TFSEC` | « Y » | Active le scan TFSEC | 
| `TFSEC_VERSION` | « v1.28.1 » | Définit la version tfsec | 