

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Validar Account Factory para el código Terraform (AFT) localmente
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop y Michal Gorniak, Amazon Web Services*

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

Este patrón muestra cómo probar localmente el código de HashiCorp Terraform administrado por AWS Control Tower Account Factory for Terraform (AFT). Terraform es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube. AFT configura una canalización de Terraform que le ayuda a aprovisionar y personalizar múltiples entradas. Cuentas de AWS AWS Control Tower

Durante el desarrollo del código, puede resultar útil probar su infraestructura de Terraform como código (IaC) a nivel local, fuera de la canalización de AFT. Este ejemplo muestra cómo hacer lo siguiente:
+ Recupere una copia local del código de Terraform que está almacenado en los AWS CodeCommit repositorios de su cuenta de administración de AFT.
+ Simule la canalización de AFT de forma local con el código recuperado.

Este procedimiento también se puede utilizar para ejecutar comandos de Terraform que no forman parte de la canalización AFT normal. Por ejemplo, puede usar este método para ejecutar comandos como `terraform validate`, `terraform plan`, `terraform destroy`, y`terraform import`.

## Requisitos previos y limitaciones
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Requisitos previos **
+ Un entorno activo de AWS múltiples cuentas que utiliza [AWS Control Tower](https://aws.amazon.com/controltower)
+ Un [entorno AFT](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html) completamente implementado
+ AWS Command Line Interface [(AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI asistente de credenciales para AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), instalado y configurado
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), instalado y configurado en su equipo local
+ Utilidad de `git-remote-commit` [instalada and configurada](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 y configurado (la versión local del paquete Terraform debe coincidir con la versión que se utiliza en la implementación de AFT)

**Limitaciones**
+ Este patrón no cubre los pasos de implementación necesarios para AWS Control Tower el AFT o cualquier módulo específico de Terraform.
+ El resultado que se genera localmente durante este procedimiento no se guarda en los registros de tiempo de ejecución de AFT Pipeline.

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

**Pila de tecnología de destino**
+ Infraestructura AFT implementada dentro de una AWS Control Tower implementación
+ Terraform
+ Git
+ AWS CLI versión 2

**Automatización y escala**

Este patrón muestra cómo invocar localmente el código de Terraform para las personalizaciones de cuentas globales de AFT en una sola cuenta administrada por AFT. Cuenta de AWS Una vez validado el código de Terraform, puede aplicarlo al resto de las cuentas de su entorno de múltiples cuentas. Para obtener más información, consulte [Volver](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations) a invocar las personalizaciones en la documentación. AWS Control Tower 

También puede usar un proceso similar para ejecutar las personalizaciones de la cuenta AFT en una terminal local. Para invocar localmente el código de Terraform desde las personalizaciones de la cuenta AFT, clone el **aft-account-customizations**repositorio en lugar del **aft-global-account-customizations**repositorio desde CodeCommit su cuenta de administración de AFT.

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

**Servicios de AWS**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)le ayuda a configurar y gobernar un entorno de AWS cuentas múltiples, siguiendo las mejores prácticas prescriptivas.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante los comandos de tu shell de línea de comandos.

**Otros servicios**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube.
+ [Git](https://git-scm.com/docs) es un sistema de control de versiones distribuido y de código abierto.

**Código**

El siguiente es un ejemplo de un script bash que se puede usar para ejecutar localmente el código de Terraform administrado por AFT. Para usar el script, siga las instrucciones de la sección [Epics](#validate-account-factory-for-terraform-aft-code-locally-epics) de este patrón.

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

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

### Guardar el código de ejemplo como un archivo local
<a name="save-the-example-code-as-a-local-file"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Guardar el código de ejemplo como un archivo local. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Haga que el código de ejemplo sea ejecutable. | Abra una ventana de terminal y autentifíquese en su cuenta de administración de AWS AFT realizando una de las siguientes acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Es posible que su organización también tenga una herramienta personalizada para proporcionar credenciales de autenticación a su AWS entorno. | Administrador de AWS | 
| Verifique el acceso a la cuenta de administración de AFT en la Región de AWS correcta. | Asegúrese de utilizar la misma sesión de terminal con la que se autenticó en su cuenta de administración de AFT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Crear un nuevo directorio local para almacenar el código del repositorio de AFT. | En la misma sesión de terminal, ejecute los siguientes comandos:<pre>mkdir my_aft <br />cd my_aft</pre> | Administrador de AWS | 
| Clone el código del repositorio AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 

### Cree los archivos de configuración de Terraform necesarios para que la canalización AFT se ejecute localmente
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Abra una canalización AFT previamente ejecutada y copie los archivos de configuración de Terraform en una carpeta local. | Los archivos de configuración `backend.tf` y `aft-providers.tf` que se crean en esta epic son necesarios para que la canalización de AFT se ejecute localmente. Estos archivos se crean automáticamente dentro de la canalización de AFT basada en la nube, pero deben crearse manualmente para que la canalización se ejecute localmente. La ejecución local de la canalización de AFT requiere un conjunto de archivos que represente la ejecución de la canalización en una sola Cuenta de AWS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Ejemplo de instrucción backend.tf generada automáticamente**<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>****Los `aft-providers.tf` archivos `backend.tf` y están vinculados a una implementación y una carpeta específicas Cuenta de AWS de AFT. Estos archivos también son diferentes, dependiendo de si están en el **aft-account-customizations**repositorio **aft-global-customizations**y dentro de la misma implementación de AFT. Asegúrese de generar ambos archivos a partir de la misma lista de tiempo de ejecución. | Administrador de AWS | 

### Ejecute la canalización AFT localmente mediante el script bash de ejemplo
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente los cambios de configuración de Terraform que desee validar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 
| Ejecute el script `ct_terraform.sh` y revise el resultado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | Administrador de AWS | 

### Devolución de los cambios de código local al repositorio de AFT
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Agregue referencias a los archivos `backend.tf` y `aft-providers.tf` a un archivo `.gitignore`. | Añada los archivos `backend.tf`** **y `aft-providers.tf` que creó a un archivo `.gitignore` ejecutando los siguientes comandos:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Al mover los archivos al archivo `.gitignore`****, se garantiza que no se confirmen ni se devuelvan al repositorio de AFT remoto. | Administrador de AWS | 
| Confirme y envíe los cambios de código al repositorio AFT remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Los cambios de código que introduzca siguiendo este procedimiento hasta ese momento se aplicarán Cuenta de AWS únicamente a uno de ellos. | Administrador de AWS | 

### Implementación de los cambios en varias cuentas
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Implemente los cambios en todas sus cuentas administradas por AFT. | Para implementar los cambios en varios Cuentas de AWS gestionados por AFT, siga las instrucciones de la documentación sobre cómo [volver a invocar las personalizaciones](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations). AWS Control Tower  | Administrador de AWS | 