Convalida il codice Account Factory for Terraform (AFT) localmente - Prontuario AWS

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

Creato da Alexandru Pop (AWS) e Michal Gorniak (AWS)

Ambiente: produzione

Tecnologie: infrastruttura DevOps; modernizzazione; DevelopmentAndTesting

Carico di lavoro: open source

Servizi AWS: AWS Control Tower

Riepilogo

Questo modello mostra come testare localmente il codice HashiCorp Terraform gestito da AWS Control Tower Account Factory for Terraform (AFT). Terraform è uno strumento open source di infrastruttura as code (IaC) che ti aiuta a utilizzare il codice per fornire e gestire infrastrutture e risorse cloud. AFT configura una pipeline Terraform che consente di effettuare il provisioning e personalizzare più account AWS in 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 CodeCommit repository AWS nel 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 cometerraform validate, terraform planterraform destroy, e. terraform import

Prerequisiti e limitazioni

Prerequisiti

Limitazioni

  • Questo modello non copre le fasi di distribuzione richieste per AWS Control Tower, AFT o qualsiasi modulo Terraform specifico.

  • L'output generato localmente durante questa procedura non viene salvato nei log di runtime della pipeline AFT.

Architettura

Stack tecnologico Target

  • Infrastruttura AFT distribuita all'interno di una distribuzione 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 singolo account AWS gestito da AFT. Dopo aver convalidato il codice Terraform, puoi applicarlo agli account rimanenti nel tuo ambiente multi-account. Per ulteriori informazioni, consulta Re-invoke customizations nella documentazione di AWS Control Tower.

Puoi anche 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-customizationsAFT. CodeCommit

Strumenti

Servizi AWS

  • AWS Control Tower ti aiuta a configurare e gestire un ambiente AWS multi-account, seguendo le best practice prescrittive.

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

Altri servizi

  • HashiCorp Terraform è uno strumento open source di infrastruttura come codice (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

  • Git è 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 di questo pattern.

#! /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

AttivitàDescrizioneCompetenze richieste

Salva il codice di esempio come file locale.

  1. Copia lo script bash di esempio che si trova nella sezione Code di questo pattern e incollalo in un editor di codice.

  2. Assegnare un nome al file ct_terraform.sh. Quindi, salva il file localmente all'interno di una cartella dedicata, ad esempio ~/scripts o~/bin.

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:

  • Utilizza un profilo AWS CLI esistente configurato con le autorizzazioni necessarie per accedere all'account di gestione AFT. Per utilizzare il profilo, puoi eseguire il seguente comando:

export AWS_PROFILE=<aft account profile name>
  • Se la tua organizzazione utilizza SSO per accedere ad AWS, inserisci le credenziali per il tuo account di gestione AFT nella pagina SSO dell'organizzazione.

Nota: la tua organizzazione potrebbe anche disporre di uno strumento personalizzato per fornire credenziali di autenticazione al tuo ambiente AWS.

Amministratore AWS

Verifica l'accesso all'account di gestione AFT nella regione AWS corretta.

Importante: assicurati di utilizzare la stessa sessione di terminale con cui ti sei autenticato nel tuo account di gestione AFT.

  1. Passa alla regione AWS della tua distribuzione AFT eseguendo il seguente comando:

    export AWS_REGION=<aft_region>
  2. Assicurati di avere l'account corretto effettuando le seguenti operazioni:

    • Esegui il comando seguente:

    aws code-commit list-repositories
    • Quindi, verifica che i repository elencati nell'output corrispondano ai nomi dei repository presenti nel tuo account di gestione AFT.

Amministratore AWS

Crea una nuova directory locale per archiviare il codice del repository AFT.

Nella stessa sessione di terminale, esegui i seguenti comandi:

mkdir my_aft cd my_aft
Amministratore AWS

Clona il codice del repository AFT remoto.

  1. Nel terminale locale, esegui il seguente comando:

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

    Nota: per semplicità, questa procedura e AFT utilizzano solo un ramo di codice principale. Per utilizzare la ramificazione del codice, puoi inserire anche i comandi di ramificazione del codice qui. Tuttavia, tutte le modifiche applicate dal ramo non principale verranno annullate quando l'automazione AFT applica il codice del ramo principale.

  2. Quindi, accedi alla directory clonata eseguendo il seguente comando:

    cd aft-global-customizations/terraform
Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Apri una pipeline AFT precedentemente eseguita e copia i file di configurazione Terraform in una cartella locale.

Nota: i file di configurazione backend.tf e aft-providers.tf 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 rappresenti l'esecuzione della pipeline all'interno di un singolo account AWS.

  1. Utilizzando le credenziali dell'account di gestione AWS Control Tower, accedi alla Console di gestione AWS. Quindi apri la CodePipeline console AWS. Assicurati di trovarti nella stessa regione AWS in cui hai distribuito AFT.

  2. Nel riquadro di navigazione a sinistra, seleziona Pipelines (Pipeline).

  3. Scegli ############-customizations-pipeline. (Il ############ è l'ID dell'account AWS che stai utilizzando per eseguire il codice Terraform localmente).

  4. Assicurati che Most Recent Execution Marked mostri un valore Riuscito. Se il valore è diverso, è necessario richiamare nuovamente le personalizzazioni nella pipeline AFT. Per ulteriori informazioni, consulta Re-invoke customizations nella documentazione di AWS Control Tower.

  5. Scegli il runtime più recente per visualizzarne i dettagli.

  6. Nella sezione Apply-AFT-Global-Customizations, trova lo stage Apply-Terraform.

  7. Seleziona la sezione Dettagli dello stage Apply-Terraform.

  8. Trova il log di runtime per la fase Apply-Terraform.

  9. Nel log di runtime, cercate la sezione che inizia e termina con le seguenti righe: «\n\naft-providers.tf... «\n\nbackend.tf» 

  10. Copia l'output tra queste due etichette e salvale come file locale denominato aft-providers.tf all'interno della cartella Terraform locale (la directory di lavoro corrente della sessione terminale).

    Esempio di dichiarazione providers.tf generata 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. Nel log di runtime, cercate la sezione che inizia e termina con le seguenti righe: «\n\ntf... «\n\nbackup.tf» 

  12. Copia l'output tra queste due etichette e salvale come file locale denominato tf all'interno della cartella Terraform locale (la directory di lavoro corrente della sessione terminale).

Esempio di istruzione backend.tf generata 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" } }

Nota: i aft-providers.tf file backend.tf and sono collegati a un account AWS, a una distribuzione AFT e a una cartella specifici. Questi file sono inoltre diversi, a seconda che si trovino nel aft-global-customizationsrepository e aft-account-customizationsnell'archivio all'interno della stessa distribuzione AFT. Assicurati di generare entrambi i file dallo stesso elenco di runtime.

Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Implementa le modifiche alla configurazione di Terraform che desideri convalidare.

  1. Passa al aft-global-customizationsrepository clonato eseguendo il seguente comando:

    cd aft-global-customizations/terraform

    Nota: i file backend.tf e si aft-providers.tf trovano in questa directory. La directory contiene anche i file Terraform dal aft-global-customizations repository.

  2. Incorpora le modifiche al codice Terraform che desideri testare localmente nei file di configurazione.

Amministratore AWS

Esegui lo script ct_terraform.sh ed esamina l'output.

  1. Accedere alla cartella locale che contiene lo script sh.

  2. Per convalidare il codice Terraform modificato, esegui lo ct_terraform.sh script eseguendo il seguente comando:

    ~/scripts/ct_terraform.sh apply

    Nota: puoi eseguire qualsiasi comando Terraform durante questo passaggio. Per visualizzare un elenco completo dei comandi Terraform, esegui il seguente comando:

    terraform --help
  3. Esamina l'output del comando. Quindi, esegui il debug delle modifiche al codice localmente prima di eseguire il commit e reinviarle al repository AFT.

Importante:

  • Tutte le modifiche apportate localmente e non trasferite all'archivio remoto sono temporanee e possono essere annullate in qualsiasi momento da un'automazione della pipeline AFT in esecuzione.

  • L'automazione AFT può essere eseguita in qualsiasi momento, poiché può essere richiamata da altri utenti e dai trigger di automazione AFT.

  • AFT applicherà sempre il codice del ramo principale del repository, annullando eventuali modifiche non eseguite.

Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Aggiungi riferimenti ai file backend.tf e aft-providers.tf a un file.gitignore.

Aggiungi i file and che hai creato a un file eseguendo i backend.tf seguenti comandiaft-providers.tf: .gitignore

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

Nota: lo spostamento dei .gitignore file nel file garantisce che non vengano salvati e reinseriti nell'archivio AFT remoto.

Amministratore AWS

Conferma e invia le modifiche al codice nell'archivio AFT remoto.

  1. Per aggiungere nuovi file di configurazione Terraform al repository, esegui il seguente comando:

    git add <filename>
  2. Per eseguire il commit delle modifiche e inviarle al repository AFT remoto in AWS CodeCommit, esegui i seguenti comandi:

    git commit -a git push

Importante: le modifiche al codice introdotte seguendo questa procedura fino a questo punto vengono applicate a un solo account AWS.

Amministratore AWS
AttivitàDescrizioneCompetenze richieste

Implementa le modifiche a tutti i tuoi account gestiti da AFT.

Per implementare le modifiche a più account AWS gestiti da AFT, segui le istruzioni in Re-invoke customizations nella documentazione di AWS Control Tower.

Amministratore AWS