

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Valide o código do 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*

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

Esse padrão mostra como testar localmente o código do HashiCorp Terraform que é gerenciado pelo AWS Control Tower Account Factory for Terraform (AFT). O Terraform é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código. O AFT configura um pipeline do Terraform que ajuda você a provisionar e personalizar várias entradas Contas da AWS . AWS Control Tower

Durante o desenvolvimento do código, pode ser útil testar sua infraestrutura como código (IaC) do Terraform localmente, fora do pipeline do AFT. Este padrão mostra como fazer o seguinte:
+ Recupere uma cópia local do código do Terraform que está armazenado nos AWS CodeCommit repositórios da sua conta de gerenciamento do AFT.
+ Simular o pipeline AFT localmente usando o código recuperado.

Esse procedimento também pode ser usado para executar comandos do Terraform que não fazem parte do pipeline AFT normal. Por exemplo, você pode usar esse método para executar comandos como `terraform validate`, `terraform plan`, `terraform destroy` e `terraform import`.

## Pré-requisitos e limitações
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Pré-requisitos **
+ Um ambiente ativo AWS de várias contas que usa [AWS Control Tower](https://aws.amazon.com/controltower)
+ Um [ambiente AFT](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) totalmente implantado
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI auxiliar de credencial para AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), instalado e configurado
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado e configurado em sua máquina local
+ Utilitário `git-remote-commit`, [instalado e configurado](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), instalado e configurado (a versão local do pacote Terraform deve corresponder à versão usada na implantação do AFT)

**Limitações**
+ Esse padrão não abrange as etapas de implantação necessárias para AWS Control Tower o AFT ou qualquer módulo específico do Terraform.
+ A saída gerada localmente durante esse procedimento não é salva nos logs de runtime do pipeline AFT.

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

**Pilha de tecnologias de destino**
+ Infraestrutura AFT implantada em uma AWS Control Tower implantação
+ Terraform
+ Git
+ AWS CLI versão 2

**Automação e escala**

Esse padrão mostra como invocar localmente o código do Terraform para personalizações de contas globais AFT em um único AFT gerenciado. Conta da AWS Depois que seu código do Terraform for validado, você poderá aplicá-lo às contas restantes em seu ambiente de várias contas. Para obter mais informações, consulte [Reinvocar personalizações](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) na documentação. AWS Control Tower 

Você também pode usar um processo semelhante para executar personalizações de contas do AFT em um terminal local. Para invocar localmente o código do Terraform a partir das personalizações da conta AFT, clone o **aft-account-customizations**repositório em vez do repositório na sua conta de gerenciamento do **aft-global-account-customizations**AFT. CodeCommit 

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

**Serviços da AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)ajuda você a configurar e administrar um ambiente AWS com várias contas, seguindo as melhores práticas prescritivas.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.

**Outros serviços**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.
+ O [Git](https://git-scm.com/docs) é um sistema de controle de versão distribuído e de código aberto.

**Código **

Veja a seguir um exemplo de script bash que pode ser usado para executar localmente o código do Terraform gerenciado pelo AFT. Para usar o script, siga as instruções na seção [Épicos](#validate-account-factory-for-terraform-aft-code-locally-epics) desse padrão.

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

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

### Salve o código de exemplo como um arquivo local
<a name="save-the-example-code-as-a-local-file"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Salve o código de exemplo como um arquivo local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador da AWS | 
| Torne o código de exemplo executável. | Abra uma janela de terminal e autentique-se em sua conta de gerenciamento do AWS AFT fazendo o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Sua organização também pode ter uma ferramenta personalizada para fornecer credenciais de autenticação ao seu AWS ambiente. | Administrador da AWS | 
| Certifique-se de que você tem acesso à conta gerencial do AFT na Região da AWS correta. | Certifique-se de usar a mesma sessão de terminal com a qual você se autenticou na conta gerencial do AFT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador da AWS | 
| Crie um novo diretório local para armazenar o código do repositório do AFT. | Na mesma sessão de terminal, execute os comandos a seguir:<pre>mkdir my_aft <br />cd my_aft</pre> | Administrador da AWS | 
| Clone o código do repositório do AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador da AWS | 

### Crie os arquivos de configuração do Terraform necessários para que o pipeline do AFT seja executado localmente
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Abra um pipeline do AFT executado anteriormente e copie os arquivos de configuração do Terraform em uma pasta local. | Os arquivos de configuração `backend.tf` e `aft-providers.tf` criados neste épico são necessários para que o pipeline do AFT seja executado localmente. Esses arquivos são criados automaticamente no pipeline do AFT baseado em nuvem, mas devem ser criados manualmente para que o pipeline seja executado localmente. Para executar o pipeline do AFT localmente, é necessário um conjunto de arquivos que represente a operação do pipeline em uma única Conta da AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Exemplo de instrução backend.tf gerada 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>****Os `aft-providers.tf` arquivos `backend.tf` e estão vinculados a uma implantação e pasta específicas Conta da AWS do AFT. Esses arquivos também são diferentes, dependendo se eles estão no **aft-account-customizations**repositório **aft-global-customizations**e dentro da mesma implantação do AFT. Certifique-se de gerar os dois arquivos a partir da mesma listagem de runtime. | Administrador da AWS | 

### Execute o pipeline do AFT localmente usando o script bash de exemplo
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implemente as alterações de configuração do Terraform que você deseja validar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador da AWS | 
| Execute o script `ct_terraform.sh` e analise a saída. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/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/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador da AWS | 

### Envio por push das alterações de código locais para o repositório do AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione referências aos arquivos `backend.tf` e `aft-providers.tf` em um arquivo `.gitignore`. | Adicione os arquivos `backend.tf`** **e `aft-providers.tf` que você criou a um arquivo `.gitignore` executando os seguintes comandos:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>A migração dos arquivos ao arquivo** **f`.gitignore` garante que eles não sejam confirmados nem enviados por push para o repositório remoto do AFT. | Administrador da AWS | 
| Confirme e envie suas alterações de código para o repositório do AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)As alterações de código que você introduz seguindo esse procedimento até esse ponto são aplicadas Conta da AWS somente a uma. | Administrador da AWS | 

### Implementação das alterações em várias contas
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implemente as alterações em todas as suas contas sob gerenciamento do AFT. | Para implementar as alterações em várias Contas da AWS que são gerenciadas pelo AFT, siga as instruções em [Reinvocar personalizações](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) na documentação. AWS Control Tower  | Administrador da AWS | 