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
Creado por Alexandru Pop (AWS) y Michal Gorniak (AWS)
Entorno: producción | Tecnologías: infraestructura; modernización; DevOps DevelopmentAndTesting | Carga de trabajo: código abierto |
Servicios de AWS: AWS Control Tower |
Resumen
Este patrón muestra cómo probar localmente el código de HashiCorp Terraform administrado por AWS Control Tower Account Factory for Terraform (AFT). HashiCorp Terraform es una herramienta de infraestructura como código (IaC) y de código abierto que facilita usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube. AFT configura una canalización de Terraform que le ayuda a aprovisionar y personalizar varias cuentas de 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:
Obtenga una copia local del código de Terraform que está almacenado en los CodeCommit repositorios de AWS 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
, yterraform import
.
Requisitos previos y limitaciones
Requisitos previos
Un entorno multicuenta de AWS activo que utiliza AWS Control Tower
Un entorno AFT completamente implementado
Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada
Ayudante de credenciales de AWS CLI para Code Commit, instalado y configurado
Python 3.x
Git
, instalado y configurado en su equipo local git-remote-commit utilidad, instalada y configurada
Terraform
, 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, AFT ni ningún 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
Pila de tecnología de destino
Infraestructura AFT implementada dentro de una implementación de AWS Control Tower
Terraform
Git
CLI de AWS versión 2
Automatizar y escalar
Este patrón muestra cómo invocar localmente el código de Terraform para las personalizaciones de cuentas globales de AFT en una única cuenta de AWS administrada por AFT. 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 a invocar las personalizaciones en la documentación de 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-customizationsrepositorio desde CodeCommit su cuenta de administración de AFT.
Herramientas
Servicios de AWS
AWS Control Tower le ayuda a configurar y regular un entorno de cuentas múltiples de AWS siguiendo las prácticas recomendadas prescriptivas.
La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
Otros servicios
HashiCorp Terraform
es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube. Git
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 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
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Guardar el código de ejemplo como un archivo local. |
| Administrador de AWS |
Haga que el código de ejemplo sea ejecutable. | Abra una ventana de terminal y autentíquese en su cuenta de administración de AWS AFT al realizar una de las siguientes acciones:
Nota: Es posible que su organización también tenga una herramienta personalizada para proporcionar credenciales de autenticación a su entorno de AWS. | Administrador de AWS |
Verifique el acceso a la cuenta de administración de AFT en la región de AWS correcta. | Importante: asegúrese de utilizar la misma sesión de terminal con la que se autenticó en su cuenta de administración de AFT.
| 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:
| Administrador de AWS |
Clone el código del repositorio AFT remoto. |
| Administrador de AWS |
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. | Nota: 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.
Ejemplo de sentencia backend.tf generada automáticamente
Nota: Los archivos | Administrador de AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Implemente los cambios de configuración de Terraform que desee validar. |
| Administrador de AWS |
Ejecute el script ct_terraform.sh y revise el resultado. |
Importante:
| Administrador de AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Añada referencias a los archivos.tf de backend.tf y aft-providers.tf a un archivo.gitignore. | Añada los archivos
Nota: Al mover los archivos al archivo | Administrador de AWS |
Confirme y envíe los cambios de código al repositorio AFT remoto. |
Importante: los cambios de código que introduzca siguiendo este procedimiento hasta este momento se aplican únicamente a una cuenta de AWS. | Administrador de AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Implementar los cambios en todas sus cuentas administradas por AFT. | Para implementar los cambios en varias cuentas de AWS administradas por AFT, siga las instrucciones en Volver a invocar personalizaciones en la documentación de AWS Control Tower. | Administrador de AWS |