Valide o código do Account Factory for Terraform (AFT) localmente - Recomendações da AWS

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

Criado por Alexandru Pop (AWS) e Michal Gorniak (AWS)

Ambiente: produção

Tecnologias: Infraestrutura DevOps; Modernização; DevelopmentAndTesting

Workload: código aberto

Serviços da AWS: AWS Control Tower

Resumo

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) de código aberto que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem. O AFT configura um pipeline do Terraform que ajuda você a provisionar e personalizar várias contas da AWS no 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 CodeCommit repositórios da AWS em 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

Pré-requisitos

Limitações

  • Esse padrão não abrange as etapas de implantação necessárias para o AWS Control Tower, 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

Pilha de tecnologias de destino

  • Infraestrutura AFT implantada em uma implantação do AWS Control Tower

  • 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 do AFT em uma única conta da AWS gerenciada pelo AFT. 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 na documentação do 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-customizationsAFT. CodeCommit

Ferramentas

Serviços da AWS

  • O AWS Control Tower ajuda você a configurar e governar um ambiente de várias contas da AWS, seguindo as melhores práticas prescritivas.

  • A ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

Outros serviços

  • HashiCorp O Terraform é uma ferramenta de infraestrutura como código (IaC) de código aberto que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.

  • O Git é 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 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

TarefaDescriçãoHabilidades necessárias

Salve o código de exemplo como um arquivo local.

  1. Copie o exemplo de script bash que está na seção Código desse padrão e cole-o em um editor de código.

  2. Nomeie o arquivo ct_terraform.sh. Em seguida, salve o arquivo localmente dentro de uma pasta dedicada, como ~/scripts ou ~/bin.

Administrador da AWS

Torne o código de exemplo executável.

Abra uma janela do terminal e autentique-se em sua conta de gerenciamento do AWS AFT seguindo um destes procedimentos:

  • Use um perfil da AWS CLI existente configurado com as permissões necessárias para acessar a conta de gerenciamento do AFT. Para usar o perfil, você pode executar o comando a seguir:

export AWS_PROFILE=<aft account profile name>
  • Se sua organização usa o SSO para acessar a AWS, insira as credenciais da sua conta de gerenciamento do AFT na página de SSO da sua organização.

Observação: sua organização também pode ter uma ferramenta personalizada para fornecer credenciais de autenticação ao seu ambiente da AWS.

Administrador da AWS

Verifique o acesso à conta de gerenciamento do AFT na região da AWS correta.

Importante: certifique-se de usar a mesma sessão de terminal com a qual você se autenticou em sua conta de gerenciamento do AFT.

  1. Navegue até a região da AWS da sua implantação do AFT executando o seguinte comando:

    export AWS_REGION=<aft_region>
  2. Verifique se a conta está correta fazendo o seguinte:

    • Execute o seguinte comando :

    aws code-commit list-repositories
    • Em seguida, verifique se os repositórios listados na saída correspondem aos nomes dos repositórios que estão na sua conta de gerenciamento do AFT.

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:

mkdir my_aft cd my_aft
Administrador da AWS

Clone o código do repositório do AFT remoto.

  1. Em seu terminal local, execute o seguinte comando:

    git clone codecommit::$AWS_REGION://aft-global-customizations

    Observação: para simplificar, esse procedimento e o AFT usam somente uma ramificação de código principal. Para usar a ramificação de código, você também pode inserir comandos de ramificação de código aqui. No entanto, todas as alterações aplicadas da ramificação não principal serão revertidas quando a automação do AFT aplicar o código da ramificação principal.

  2. Em seguida, navegue até o diretório clonado executando o seguinte comando:

    cd aft-global-customizations/terraform
Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Abra um pipeline do AFT executado anteriormente e copie os arquivos de configuração do Terraform em uma pasta local.

Observação: 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. Executar o pipeline do AFT localmente requer um conjunto de arquivos que representa a execução do pipeline em uma única conta da AWS.

  1. Usando as suas credenciais da conta de gerenciamento da AWS Control Tower, faça login no Console de Gerenciamento da AWS. Em seguida, abra o CodePipeline console da AWS. Certifique-se de que você está na mesma região da AWS em que implantou o AFT.

  2. No painel de navegação à esquerda, selecione Pipelines.

  3. Escolha ###########-customizations-pipeline. (O ############ é o ID da conta da AWS que você está usando para executar o código do Terraform localmente).

  4. Certifique-se de que a opção Execução mais recente marcada mostre um valor Bem-sucedido. Se o valor for diferente, você deverá invocar novamente suas personalizações no pipeline do AFT. Para obter mais informações, consulte Reinvocar personalizações na documentação do AWS Control Tower.

  5. Escolha o runtime mais recente para exibir seus detalhes.

  6. Na seção Apply-AFT-Global-Customizations, encontre o estágio Apply-Terraform.

  7. Selecione a seção Detalhes do estágio Apply-Terraform.

  8. Encontre o log de runtime para o estágio Apply-Terraform.

  9. No log de runtime, procure a seção que começa e termina com as seguintes linhas:  “\n\n aft-providers.tf … “\n \n backend.tf”  

  10. Copie a saída entre esses dois rótulos e salve-os como um arquivo local nomeado aft-providers.tf na pasta local do Terraform (o diretório de trabalho atual da sua sessão de terminal).

    Exemplo de declaração providers.tf gerada automaticamente

    ## Autogenerated providers.tf ## ## Updated on: 2022-05-31 16:27:45 ## provider "aws" { region = "us-east-2" assume_role { role_arn = "arn:aws:iam::############:role/AWSAFTExecution" } default_tags { tags = { managed_by = "AFT" } } }
  11. No log de runtime, procure a seção que começa e termina com as seguintes linhas: “\n\n tf … “\n \n backup.tf”  

  12. Copie a saída entre esses dois rótulos e salve-os como um arquivo local nomeado tf na pasta local do Terraform (o diretório de trabalho atual da sua sessão de terminal).

Exemplo de instrução backend.tf gerada automaticamente

## Autogenerated backend.tf ## ## Updated on: 2022-05-31 16:27:45 ## terraform { required_version = ">= 0.15.0" backend "s3" { region = "us-east-2" bucket = "aft-backend-############-primary-region" key = "############-aft-global-customizations/terraform.tfstate" dynamodb_table = "aft-backend-############" encrypt = "true" kms_key_id = "cbdc21d6-e04d-4c37-854f-51e199cfcb7c" kms_key_id = "########-####-####-####-############" role_arn = "arn:aws:iam::#############:role/AWSAFTExecution" } }

Observação: os arquivos backend.tf e aft-providers.tf estão vinculados a uma conta específica da AWS, à implantação do AFT e a uma pasta. Esses arquivos também são diferentes, dependendo se estão no repositório e no aft-global-customizationsaft-account-customizationsrepositório dentro da mesma implantação do AFT. Certifique-se de gerar os dois arquivos a partir da mesma listagem de runtime.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Implemente as alterações de configuração do Terraform que você deseja validar.

  1. Navegue até o aft-global-customizationsrepositório clonado executando o seguinte comando:

    cd aft-global-customizations/terraform

    Observação: os arquivos backend.tf e aft-providers.tf estão nesse diretório. O diretório também contém arquivos Terraform do aft-global-customizations repositório.

  2. Incorpore as alterações de código do Terraform que você deseja testar localmente nos arquivos de configuração.

Administrador da AWS

Execute o script ct_terraform.sh e revise a saída.

  1. Navegue até a pasta local que contém o script sh.

  2. Para validar seu código modificado do Terraform, execute o script ct_terraform.sh executando o seguinte comando:

    ~/scripts/ct_terraform.sh apply

    Observação: você pode executar qualquer comando do Terraform durante esta etapa. Para ver uma lista completa dos comandos do Terraform, execute o seguinte comando:

    terraform --help
  3. Revise a saída do comando. Em seguida, depure as alterações no código localmente antes de confirmá-las e enviá-las de volta para o repositório do AFT.

Importante:

  • Quaisquer alterações feitas localmente e não enviadas de volta ao repositório remoto são temporárias e podem ser desfeitas a qualquer momento por uma automação de pipeline do AFT em execução.

  • A automação do AFT pode ser executada a qualquer momento, pois pode ser invocada por outros usuários e acionadores de automação do AFT.

  • O AFT sempre aplicará o código da ramificação principal do repositório, desfazendo quaisquer alterações não confirmadas.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Adicione referências aos arquivos backend.tf e aft-providers.tf a um arquivo .gitignore.

Adicione os arquivos backend.tf e aft-providers.tf que você criou a um arquivo .gitignore executando os seguintes comandos:

echo backend.tf >> .gitignore echo aft-providers.tf >>.gitignore

Observação: mover os arquivos para o arquivo .gitignoregarante que eles não sejam confirmados e enviados de volta para o repositório do AFT remoto.

Administrador da AWS

Confirme e envie suas alterações de código para o repositório do AFT remoto.

  1. Para adicionar novos arquivos de configuração do Terraform ao repositório, execute o seguinte comando:

    git add <filename>
  2. Para confirmar suas alterações e enviá-las para o repositório AFT remoto na AWS CodeCommit, execute os seguintes comandos:

    git commit -a git push

Importante: as alterações de código que você introduz seguindo esse procedimento até o momento são aplicadas somente a uma conta da AWS.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Implemente as alterações para todas as contas gerenciadas pelo AFT.

Para implementar as alterações em várias contas da AWS gerenciadas pelo AFT, siga as instruções em Reinvocar personalizações na documentação do AWS Control Tower.

Administrador da AWS