

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.

# Validez le code Account Factory pour Terraform (AFT) localement
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop et Michal Gorniak, Amazon Web Services*

## Résumé
<a name="validate-account-factory-for-terraform-aft-code-locally-summary"></a>

Ce modèle montre comment tester localement le code HashiCorp Terraform géré par AWS Control Tower Account Factory for Terraform (AFT). Terraform est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud. AFT met en place un pipeline Terraform qui vous aide à approvisionner et à personnaliser plusieurs Comptes AWS entrées. AWS Control Tower

Lors du développement du code, il peut être utile de tester votre infrastructure Terraform en tant que code (IaC) localement, en dehors du pipeline AFT. Ce modèle montre comment effectuer les opérations suivantes :
+ Récupérez une copie locale du code Terraform stocké dans les AWS CodeCommit référentiels de votre compte de gestion AFT.
+ Simulez le pipeline AFT localement en utilisant le code récupéré.

Cette procédure peut également être utilisée pour exécuter des commandes Terraform qui ne font pas partie du pipeline AFT normal. Par exemple, vous pouvez utiliser cette méthode pour exécuter des commandes telles que `terraform validate``terraform plan`,`terraform destroy`, et`terraform import`.

## Conditions préalables et limitations
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Conditions préalables**
+ Un environnement AWS multi-comptes actif qui utilise [AWS Control Tower](https://aws.amazon.com/controltower)
+ Un [environnement AFT](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) entièrement déployé
+ AWS Command Line Interface (AWS CLI), [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI assistant d'identification pour AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), installé et configuré
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installé et configuré sur votre machine locale
+ `git-remote-commit`utilitaire, [installé et configuré](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)
+ [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é (la version du package Terraform local doit correspondre à la version utilisée dans le déploiement AFT)

**Limites**
+ Ce modèle ne couvre pas les étapes de déploiement requises pour AWS Control Tower AFT ou tout autre module Terraform spécifique.
+ La sortie générée localement au cours de cette procédure n'est pas enregistrée dans les journaux d'exécution du pipeline AFT.

## Architecture
<a name="validate-account-factory-for-terraform-aft-code-locally-architecture"></a>

**Pile technologique cible**
+ Infrastructure AFT déployée dans le cadre d'un AWS Control Tower déploiement
+ Terraform
+ Git
+ AWS CLI version 2

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

Ce modèle montre comment invoquer localement le code Terraform pour les personnalisations de comptes globaux AFT dans un seul compte géré par AFT. Compte AWS Une fois votre code Terraform validé, vous pouvez l'appliquer aux comptes restants de votre environnement multi-comptes. Pour plus d'informations, voir [Réinvoquer les personnalisations](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) dans la AWS Control Tower documentation.

Vous pouvez également utiliser un processus similaire pour exécuter des personnalisations de compte AFT dans un terminal local. Pour invoquer localement le code Terraform à partir des personnalisations de compte AFT, clonez le **aft-account-customizations**référentiel plutôt que le **aft-global-account-customizations**référentiel depuis votre compte de CodeCommit gestion AFT.

## Outils
<a name="validate-account-factory-for-terraform-aft-code-locally-tools"></a>

**Services AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)vous aide à configurer et à gérer un environnement AWS multi-comptes, conformément aux meilleures pratiques prescriptives.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir Services AWS par le biais de commandes dans votre interface de ligne de commande.

**Autres services**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.
+ [Git](https://git-scm.com/docs) est un système de contrôle de version distribué et open source.

**Code**

Voici un exemple de script bash qui peut être utilisé pour exécuter localement du code Terraform géré par AFT. Pour utiliser le script, suivez les instructions de la section [Epics](#validate-account-factory-for-terraform-aft-code-locally-epics) de ce modèle.

```
#! /bin/bash
# Version: 1.1 2022-06-24 Unsetting AWS_PROFILE since, when set, it interferes with script operation
#          1.0 2022-02-02 Initial Version
#
# Purpose: For use with AFT: This script runs the local copy of TF code as if it were running within AFT pipeline.
#        * Facilitates testing of what the AFT pipline will do 
#           * Provides the ability to run terraform with custom arguments (like 'plan' or 'move') which are currently not supported within the pipeline.
#
# © 2021 Amazon Web Services, Inc. or its affiliates. All Rights Reserved.
# This AWS Content is provided subject to the terms of the AWS Customer Agreement
# available at http://aws.amazon.com/agreement or other written agreement between
# Customer and either Amazon Web Services, Inc. or Amazon Web Services EMEA SARL or both.
#
# Note: Arguments to this script are passed directly to 'terraform' without parsing nor validation by this script.
#
# Prerequisites:
#    1. local copy of ct GIT repositories
#    2. local backend.tf and aft-providers.tf filled with data for the target account on which terraform is to be run
#       Hint: The contents of above files can be obtain from the logs of a previous execution of the AFT pipeline for the target account.
#    3. 'terraform' binary is available in local PATH
#    4. Recommended: .gitignore file containing 'backend.tf', 'aft_providers.tf' so the local copy of these files are not pushed back to git

readonly credentials=$(aws sts assume-role \
    --role-arn arn:aws:iam::$(aws sts get-caller-identity --query "Account" --output text ):role/AWSAFTAdmin \
    --role-session-name AWSAFT-Session \
    --query Credentials )

unset AWS_PROFILE
export AWS_ACCESS_KEY_ID=$(echo $credentials | jq -r '.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo $credentials | jq -r '.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo $credentials | jq -r '.SessionToken')
terraform "$@"
```

## Épopées
<a name="validate-account-factory-for-terraform-aft-code-locally-epics"></a>

### Enregistrez l'exemple de code dans un fichier local
<a name="save-the-example-code-as-a-local-file"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Enregistrez l'exemple de code dans un fichier local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrateur AWS | 
| Rendez l'exemple de code exécutable. | Ouvrez une fenêtre de terminal et authentifiez-vous dans votre compte de gestion AWS AFT en effectuant l'une des opérations suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Votre organisation peut également disposer d'un outil personnalisé pour fournir des informations d'authentification à votre AWS environnement. | Administrateur AWS | 
| Vérifiez correctement l'accès au compte de gestion AFT Région AWS. | Assurez-vous d'utiliser la même session de terminal que celle avec laquelle vous vous êtes authentifié sur votre compte de gestion AFT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrateur AWS | 
| Créez un nouveau répertoire local pour stocker le code du référentiel AFT. | Au cours de la même session de terminal, exécutez les commandes suivantes :<pre>mkdir my_aft <br />cd my_aft</pre> | Administrateur AWS | 
| Clonez le code du référentiel AFT distant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrateur AWS | 

### Créez les fichiers de configuration Terraform requis pour que le pipeline AFT s'exécute localement
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ouvrez un pipeline AFT déjà exécuté et copiez les fichiers de configuration Terraform dans un dossier local. | Les fichiers `aft-providers.tf` de configuration `backend.tf` et créés dans cette épopée sont nécessaires au fonctionnement local du pipeline AFT. Ces fichiers sont créés automatiquement dans le pipeline AFT basé sur le cloud, mais doivent être créés manuellement pour que le pipeline s'exécute localement. L'exécution locale du pipeline AFT nécessite un ensemble de fichiers représentant l'exécution du pipeline en un seul Compte AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Exemple d'instruction backend.tf générée automatiquement**<pre>## Autogenerated backend.tf ##<br />## Updated on: 2022-05-31 16:27:45 ##<br />terraform {<br />  required_version = ">= 0.15.0"<br />  backend "s3" {<br />    region         = "us-east-2"<br />    bucket         = "aft-backend-############-primary-region"<br />    key            = "############-aft-global-customizations/terraform.tfstate"<br />    dynamodb_table = "aft-backend-############"<br />    encrypt        = "true"<br />    kms_key_id     = "########-####-####-####-############"<br />    role_arn       = "arn:aws:iam::#############:role/AWSAFTExecution"<br />  }<br />}</pre>****Les `aft-providers.tf` fichiers `backend.tf` et sont liés à un déploiement et à un dossier AFT spécifiques Compte AWS. Ces fichiers sont également différents selon qu'ils se trouvent ou non dans le **aft-account-customizations**référentiel **aft-global-customizations**and au sein du même déploiement AFT. Assurez-vous de générer les deux fichiers à partir de la même liste d'environnements d'exécution. | Administrateur AWS | 

### Exécutez le pipeline AFT localement en utilisant l'exemple de script bash
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Implémentez les modifications de configuration Terraform que vous souhaitez valider. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrateur AWS | 
| Exécutez le `ct_terraform.sh` script et examinez le résultat. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)** **[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrateur AWS | 

### Transférez vos modifications de code local vers le référentiel AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Ajoutez des références aux `aft-providers.tf` fichiers `backend.tf` et à un `.gitignore` fichier. | Ajoutez les `aft-providers.tf` fichiers `backend.tf`**** et que vous avez créés à un `.gitignore` fichier en exécutant les commandes suivantes :<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Le déplacement des fichiers vers le `.gitignore`**** fichier garantit qu'ils ne sont pas validés et renvoyés vers le référentiel AFT distant. | Administrateur AWS | 
| Validez et transférez vos modifications de code dans le référentiel AFT distant. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Les modifications de code que vous introduisez en suivant cette procédure jusqu'à présent ne sont appliquées qu'à une Compte AWS seule. | Administrateur AWS | 

### Déployez les modifications sur plusieurs comptes
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Appliquez les modifications à tous vos comptes gérés par AFT. | Pour appliquer les modifications à plusieurs Comptes AWS options gérées par AFT, suivez les instructions de la section [Réinvoquer les personnalisations](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) dans la AWS Control Tower documentation. | Administrateur AWS | 