

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Convalida il codice Account Factory for Terraform (AFT) localmente
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop e Michal Gorniak, Amazon Web Services*

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

Questo modello mostra come testare localmente il codice HashiCorp Terraform gestito da AWS Control Tower Account Factory for Terraform (AFT). Terraform è uno strumento Infrastructure as Code (IaC) che ti aiuta a utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. AFT configura una pipeline Terraform che ti aiuta a fornire e personalizzare più in. Account AWS AWS Control Tower

Durante lo sviluppo del codice, può essere utile testare l'infrastruttura Terraform as code (IaC) localmente, al di fuori della pipeline AFT. Questo modello mostra come eseguire le seguenti operazioni:
+ Recupera una copia locale del codice Terraform archiviato nei AWS CodeCommit repository del tuo account di gestione AFT.
+ Simula la pipeline AFT localmente utilizzando il codice recuperato.

Questa procedura può essere utilizzata anche per eseguire comandi Terraform che non fanno parte della normale pipeline AFT. Ad esempio, è possibile utilizzare questo metodo per eseguire comandi come`terraform validate`, `terraform plan``terraform destroy`, e. `terraform import`

## Prerequisiti e limitazioni
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Prerequisiti**
+ Un ambiente AWS multi-account attivo che utilizza [AWS Control Tower](https://aws.amazon.com/controltower)
+ [Un ambiente AFT completamente distribuito](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html)
+ AWS Command Line Interface [(AWS CLI), [installato e configurato](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI credenziali helper per AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), installato e configurato
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), installato e configurato sul tuo computer locale
+ `git-remote-commit`utilità, [installata e configurata](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), installato e configurato (la versione locale del pacchetto Terraform deve corrispondere alla versione utilizzata nella distribuzione AFT)

**Limitazioni**
+ Questo modello non copre le fasi di implementazione richieste per AWS Control Tower AFT o altri moduli Terraform specifici.
+ L'output generato localmente durante questa procedura non viene salvato nei log di runtime della pipeline AFT.

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

**Stack tecnologico Target**
+ Infrastruttura AFT implementata all'interno di un'implementazione AWS Control Tower 
+ Terraform
+ Git
+ AWS CLI versione 2

**Automazione e scalabilità**

Questo modello mostra come richiamare localmente il codice Terraform per le personalizzazioni degli account globali AFT in un unico AFT gestito. Account AWS Dopo aver convalidato il codice Terraform, puoi applicarlo agli account rimanenti nel tuo ambiente multi-account. Per ulteriori informazioni, consulta [Re-invoke](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) customizations nella documentazione. AWS Control Tower 

È inoltre possibile utilizzare un processo simile per eseguire personalizzazioni dell'account AFT in un terminale locale. Per richiamare localmente il codice Terraform dalle personalizzazioni dell'account AFT, clona il repository anziché il **aft-account-customizations**repository dal tuo account di gestione **aft-global-account-customizations**AFT. CodeCommit 

## Tools (Strumenti)
<a name="validate-account-factory-for-terraform-aft-code-locally-tools"></a>

**Servizi AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)ti aiuta a configurare e gestire un ambiente AWS multi-account, seguendo le migliori pratiche prescrittive.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.

**Altri servizi**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.
+ [Git](https://git-scm.com/docs) è un sistema di controllo delle versioni distribuito e open source.

**Codice**

Di seguito è riportato un esempio di script bash che può essere utilizzato per eseguire localmente il codice Terraform gestito da AFT. Per utilizzare lo script, segui le istruzioni nella sezione [Epics](#validate-account-factory-for-terraform-aft-code-locally-epics) di questo modello.

```
#! /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 "$@"
```

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

### Salva il codice di esempio come file locale
<a name="save-the-example-code-as-a-local-file"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Salva il codice di esempio come file locale. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Amministratore AWS | 
| Rendi eseguibile il codice di esempio. | Apri una finestra di terminale ed esegui l'autenticazione nel tuo account di gestione AWS AFT effettuando una delle seguenti operazioni:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)L'organizzazione potrebbe anche disporre di uno strumento personalizzato per fornire credenziali di autenticazione al proprio ambiente. AWS  | Amministratore AWS | 
| Verifica che l'accesso all'account di gestione AFT sia corretto Regione AWS. | Assicurati di utilizzare la stessa sessione di terminale con cui ti sei autenticato nel tuo account di gestione AFT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Amministratore AWS | 
| Crea una nuova directory locale per archiviare il codice del repository AFT. | Nella stessa sessione di terminale, esegui i seguenti comandi:<pre>mkdir my_aft <br />cd my_aft</pre> | Amministratore AWS | 
| Clona il codice del repository AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Amministratore AWS | 

### Crea i file di configurazione Terraform necessari per l'esecuzione locale della pipeline AFT
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Apri una pipeline AFT precedentemente eseguita e copia i file di configurazione Terraform in una cartella locale. | I file di `aft-providers.tf` configurazione `backend.tf` e creati in questa epopea sono necessari per l'esecuzione locale della pipeline AFT. Questi file vengono creati automaticamente all'interno della pipeline AFT basata sul cloud, ma devono essere creati manualmente affinché la pipeline possa essere eseguita localmente. L'esecuzione locale della pipeline AFT richiede un set di file che rappresentino l'esecuzione della pipeline all'interno di un unico set. Account AWS[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Esempio di istruzione backend.tf generata automaticamente**<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>****I `aft-providers.tf` file `backend.tf` and sono collegati a una distribuzione AFT e a una Account AWS cartella specifiche. Questi file sono inoltre diversi, a seconda che si trovino nel **aft-account-customizations**repository **aft-global-customizations**and all'interno della stessa distribuzione AFT. Assicuratevi di generare entrambi i file dallo stesso elenco di runtime. | Amministratore AWS | 

### Esegui la pipeline AFT localmente utilizzando lo script bash di esempio
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa le modifiche alla configurazione di Terraform che desideri convalidare. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Amministratore AWS | 
| Esegui lo `ct_terraform.sh` script ed esamina l'output. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/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/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Amministratore AWS | 

### Invia le modifiche al codice locale nell'archivio AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Aggiungere riferimenti a `backend.tf` e `aft-providers.tf` file a un `.gitignore` file. | Aggiungi i `aft-providers.tf` file `backend.tf`**** and che hai creato a un `.gitignore` file eseguendo i seguenti comandi:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Lo spostamento dei `.gitignore`**** file nel file garantisce che non vengano sottoposti a commit e reinseriti nell'archivio AFT remoto. | Amministratore AWS | 
| Conferma e invia le modifiche al codice nell'archivio AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Le modifiche al codice introdotte seguendo questa procedura fino a questo punto vengono applicate a una Account AWS sola persona. | Amministratore AWS | 

### Implementa le modifiche a più account
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Implementa le modifiche a tutti i tuoi account gestiti da AFT. | Per implementare le modifiche a più Account AWS personalizzazioni gestite da AFT, segui le istruzioni in [Re-invoke customizations nella documentazione](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations). AWS Control Tower  | Amministratore AWS | 