Validieren Sie den Code von Account Factory for Terraform (AFT) lokal - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Validieren Sie den Code von Account Factory for Terraform (AFT) lokal

Erstellt von Alexandru Pop (AWS) und Michal Gorniak (AWS)

Umgebung: Produktion

Technologien: Infrastruktur DevOps; Modernisierung; DevelopmentAndTesting

Arbeitslast: Open Source

AWS-Services: AWS Control Tower

Übersicht

Dieses Muster zeigt, wie HashiCorp Terraform-Code, der von AWS Control Tower Account Factory for Terraform (AFT) verwaltet wird, lokal getestet wird. Terraform ist ein Open-Source-Tool für Infrastruktur als Code (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können. AFT richtet eine Terraform-Pipeline ein, mit der Sie mehrere AWS-Konten in AWS Control Tower bereitstellen und anpassen können.

Während der Codeentwicklung kann es hilfreich sein, Ihre Terraform-Infrastruktur als Code (IaC) lokal außerhalb der AFT-Pipeline zu testen. Dieses Muster zeigt, wie Sie Folgendes tun können:

  • Rufen Sie eine lokale Kopie des Terraform-Codes ab, der in den CodeCommit AWS-Repositorys in Ihrem AFT-Verwaltungskonto gespeichert ist.

  • Simulieren Sie die AFT-Pipeline lokal mithilfe des abgerufenen Codes.

Dieses Verfahren kann auch verwendet werden, um Terraform-Befehle auszuführen, die nicht Teil der normalen AFT-Pipeline sind. Sie können diese Methode beispielsweise verwenden, um Befehle wieterraform validate, terraform planterraform destroy, und auszuführen. terraform import

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Dieses Muster deckt nicht die Bereitstellungsschritte ab, die für AWS Control Tower, AFT oder bestimmte Terraform-Module erforderlich sind.

  • Die Ausgabe, die während dieses Vorgangs lokal generiert wird, wird nicht in den Laufzeitprotokollen der AFT-Pipeline gespeichert.

Architektur

Zieltechnologie-Stack

  • AFT-Infrastruktur, die innerhalb einer AWS Control Tower Tower-Bereitstellung bereitgestellt wird

  • Terraform

  • Git

  • AWS-CLI Version 2

Automatisierung und Skalierung

Dieses Muster zeigt, wie Terraform-Code für globale AFT-Kontoanpassungen in einem einzigen von AFT verwalteten AWS-Konto lokal aufgerufen wird. Nachdem Ihr Terraform-Code validiert wurde, können Sie ihn auf die verbleibenden Konten in Ihrer Umgebung mit mehreren Konten anwenden. Weitere Informationen finden Sie unter Anpassungen erneut aufrufen in der AWS Control Tower Tower-Dokumentation.

Sie können auch einen ähnlichen Prozess verwenden, um AFT-Kontoanpassungen in einem lokalen Terminal durchzuführen. Um Terraform-Code lokal aus AFT-Kontoanpassungen aufzurufen, klonen Sie das aft-account-customizations Repository anstelle des Repositorys CodeCommit in Ihrem aft-global-account-customizationsAFT-Verwaltungskonto.

Tools

AWS-Services

  • AWS Control Tower unterstützt Sie bei der Einrichtung und Verwaltung einer AWS-Umgebung mit mehreren Konten und folgt dabei den vorgeschriebenen Best Practices.

  • AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.

Andere Dienste

  • HashiCorp Terraform ist ein Open-Source-Tool für Infrastruktur als Code (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

  • Git ist ein verteiltes Open-Source-Versionskontrollsystem.

Code

Im Folgenden finden Sie ein Beispiel für ein Bash-Skript, mit dem Terraform-Code, der von AFT verwaltet wird, lokal ausgeführt werden kann. Folgen Sie den Anweisungen im Abschnitt Epics dieses Musters, um das Skript zu verwenden.

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

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Speichern Sie den Beispielcode als lokale Datei.

  1. Kopieren Sie das Bash-Beispielskript, das sich im Codeabschnitt dieses Musters befindet, und fügen Sie es in einen Code-Editor ein.

  2. Benennen Sie die Datei ct_terraform.sh. Speichern Sie die Datei anschließend lokal in einem dafür vorgesehenen Ordner, z. B. ~/scripts oder~/bin.

AWS-Administrator

Machen Sie den Beispielcode lauffähig.

Öffnen Sie ein Terminalfenster und authentifizieren Sie sich bei Ihrem AWS AFT-Managementkonto, indem Sie einen der folgenden Schritte ausführen:

  • Verwenden Sie ein vorhandenes AWS-CLI-Profil, das mit den für den Zugriff auf das AFT-Verwaltungskonto erforderlichen Berechtigungen konfiguriert ist. Um das Profil zu verwenden, können Sie den folgenden Befehl ausführen:

export AWS_PROFILE=<aft account profile name>
  • Wenn Ihre Organisation SSO für den Zugriff auf AWS verwendet, geben Sie die Anmeldeinformationen für Ihr AFT-Verwaltungskonto auf der SSO-Seite Ihrer Organisation ein.

Hinweis: Ihre Organisation verfügt möglicherweise auch über ein benutzerdefiniertes Tool zur Bereitstellung von Authentifizierungsdaten für Ihre AWS-Umgebung.

AWS-Administrator

Überprüfen Sie den Zugriff auf das AFT-Verwaltungskonto in der richtigen AWS-Region.

Wichtig: Stellen Sie sicher, dass Sie dieselbe Terminalsitzung verwenden, mit der Sie sich bei Ihrem AFT-Verwaltungskonto authentifiziert haben.

  1. Navigieren Sie zur AWS-Region Ihrer AFT-Bereitstellung, indem Sie den folgenden Befehl ausführen:

    export AWS_REGION=<aft_region>
  2. Stellen Sie sicher, dass Sie das richtige Konto haben, indem Sie wie folgt vorgehen:

    • Führen Sie den folgenden Befehl aus:

    aws code-commit list-repositories
    • Stellen Sie anschließend sicher, dass die in der Ausgabe aufgeführten Repositorys mit den Namen der Repositorys in Ihrem AFT-Verwaltungskonto übereinstimmen.

AWS-Administrator

Erstellen Sie ein neues, lokales Verzeichnis zum Speichern des AFT-Repository-Codes.

Führen Sie in derselben Terminalsitzung die folgenden Befehle aus:

mkdir my_aft cd my_aft
AWS-Administrator

Klonen Sie den Remote-AFT-Repository-Code.

  1. Führen Sie in Ihrem lokalen Terminal den folgenden Befehl aus:

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

    Hinweis: Der Einfachheit halber verwenden dieses Verfahren und AFT nur einen Hauptcodezweig. Um die Codeverzweigung zu verwenden, können Sie hier auch Befehle zur Codeverzweigung eingeben. Alle vorgenommenen Änderungen aus dem Nicht-Hauptzweig werden jedoch rückgängig gemacht, wenn die AFT-Automatisierung Code aus dem Hauptzweig anwendet.

  2. Navigieren Sie dann in das geklonte Verzeichnis, indem Sie den folgenden Befehl ausführen:

    cd aft-global-customizations/terraform
AWS-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Öffnen Sie eine zuvor ausgeführte AFT-Pipeline und kopieren Sie die Terraform-Konfigurationsdateien in einen lokalen Ordner.

Hinweis: Die Konfigurationsdateien backend.tf und aft-providers.tf, die in diesem Epic erstellt wurden, werden benötigt, damit die AFT-Pipeline lokal ausgeführt werden kann. Diese Dateien werden automatisch innerhalb der cloudbasierten AFT-Pipeline erstellt, müssen aber manuell erstellt werden, damit die Pipeline lokal ausgeführt werden kann. Für die lokale Ausführung der AFT-Pipeline ist ein Satz von Dateien erforderlich, der den Betrieb der Pipeline innerhalb eines einzigen AWS-Kontos darstellt.

  1. Melden Sie sich mit den Anmeldeinformationen Ihres AWS Control Tower Tower-Managementkontos bei der AWS-Managementkonsole an. Öffnen Sie dann die CodePipeline AWS-Konsole. Stellen Sie sicher, dass Sie sich in derselben AWS-Region befinden, in der Sie AFT bereitgestellt haben.

  2. Wählen Sie im linken Navigationsbereich die Option Pipelines aus.

  3. Wählen Sie #########-customizations-pipeline. (Die ############ ist die AWS-Konto-ID, die Sie verwenden, um Terraform-Code lokal auszuführen).

  4. Vergewissern Sie sich, dass für „Letzte Ausführung markiert“ der Wert Erfolgreich angezeigt wird. Wenn der Wert anders ist, müssen Sie Ihre Anpassungen in der AFT-Pipeline erneut aufrufen. Weitere Informationen finden Sie unter Anpassungen erneut aufrufen in der AWS Control Tower Tower-Dokumentation.

  5. Wählen Sie die neueste Laufzeit aus, um deren Details aufzurufen.

  6. Suchen Sie im Abschnitt Apply-AFT-Global-Customizations nach der Apply-Terraform-Stufe.

  7. Wählen Sie den Abschnitt Details der Apply-Terraform-Phase aus.

  8. Suchen Sie das Laufzeitprotokoll für die Apply-Terraform-Stufe.

  9. Suchen Sie im Laufzeitprotokoll nach dem Abschnitt, der mit den folgenden Zeilen beginnt und endet: „\n\naft-providers.tf... „\n\nbackend.tf“ 

  10. Kopieren Sie die Ausgabe zwischen diesen beiden Labels und speichern Sie sie als lokale Datei mit dem Namen aft-providers.tf im lokalen Terraform-Ordner (dem aktuellen Arbeitsverzeichnis Ihrer Terminalsitzung).

    Beispiel für eine auto generierte providers.tf-Anweisung

    ## 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. Suchen Sie im Laufzeitprotokoll nach dem Abschnitt, der mit den folgenden Zeilen beginnt und endet: „\n\ntf... „\n\nbackup.tf“ 

  12. Kopieren Sie die Ausgabe zwischen diesen beiden Labels und speichern Sie sie als lokale Datei mit dem Namen tf im lokalen Terraform-Ordner (dem aktuellen Arbeitsverzeichnis Ihrer Terminalsitzung).

Beispiel für eine automatisch generierte backend.tf-Anweisung

## 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" } }

Hinweis: Die aft-providers.tf Dateien backend.tf und sind an ein bestimmtes AWS-Konto, eine AFT-Bereitstellung und einen bestimmten Ordner gebunden. Diese Dateien unterscheiden sich auch, je nachdem, ob sie sich im aft-global-customizationsRepository und im aft-account-customizationsRepository innerhalb derselben AFT-Bereitstellung befinden. Stellen Sie sicher, dass Sie beide Dateien aus derselben Runtime-Liste generieren.

AWS-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Implementieren Sie die Terraform-Konfigurationsänderungen, die Sie validieren möchten.

  1. Navigieren Sie zum geklonten aft-global-customizationsRepository, indem Sie den folgenden Befehl ausführen:

    cd aft-global-customizations/terraform

    Hinweis: Die Dateien backend.tf und aft-providers.tf befinden sich in diesem Verzeichnis. Das Verzeichnis enthält auch Terraform-Dateien aus dem aft-global-customizations Repository.

  2. Integrieren Sie die Terraform-Codeänderungen, die Sie lokal testen möchten, in die Konfigurationsdateien.

AWS-Administrator

Führen Sie das Skript ct_terraform.sh aus und überprüfen Sie die Ausgabe.

  1. Navigieren Sie zu dem lokalen Ordner, der das Sh-Skript enthält.

  2. Um Ihren geänderten Terraform-Code zu validieren, führen Sie das ct_terraform.sh Skript aus, indem Sie den folgenden Befehl ausführen:

    ~/scripts/ct_terraform.sh apply

    Hinweis: In diesem Schritt können Sie jeden Terraform-Befehl ausführen. Führen Sie den folgenden Befehl aus, um eine vollständige Liste der Terraform-Befehle anzuzeigen:

    terraform --help
  3. Überprüfen Sie die Befehlsausgabe. Debuggen Sie dann die Codeänderungen lokal, bevor Sie die Änderungen übernehmen und an das AFT-Repository zurücksenden.

Wichtig

  • Alle lokal vorgenommenen und nicht in das Remote-Repository zurückgeschickten Änderungen sind temporär und können jederzeit durch eine laufende AFT-Pipeline-Automatisierung rückgängig gemacht werden.

  • Die AFT-Automatisierung kann jederzeit ausgeführt werden, da sie von anderen Benutzern und AFT-Automatisierungsauslösern aufgerufen werden kann.

  • AFT wendet immer Code aus dem Hauptzweig des Repositorys an und macht alle noch nicht festgeschriebenen Änderungen rückgängig.

AWS-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Fügen Sie Verweise auf die Backend-Dateien .tf und aft-providers.tf zu einer .gitignore-Datei hinzu.

Fügen Sie die aft-providers.tf Dateien backend.tf und, die Sie erstellt haben, zu einer Datei hinzu, indem Sie die folgenden Befehle ausführen: .gitignore

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

Hinweis: Durch das Verschieben der Dateien in die .gitignore Datei wird sichergestellt, dass sie nicht festgeschrieben und in das Remote-AFT-Repository zurückgesendet werden.

AWS-Administrator

Übergeben Sie Ihre Codeänderungen und übertragen Sie sie an das Remote-AFT-Repository.

  1. Führen Sie den folgenden Befehl aus, um dem Repository neue Terraform-Konfigurationsdateien hinzuzufügen:

    git add <filename>
  2. Führen Sie die folgenden Befehle aus, um Ihre Änderungen zu übernehmen und sie in das Remote-AFT-Repository in AWS CodeCommit zu übertragen:

    git commit -a git push

Wichtig: Die Codeänderungen, die Sie bis zu diesem Zeitpunkt vornehmen, indem Sie dieses Verfahren befolgen, gelten nur für ein AWS-Konto.

AWS-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Nehmen Sie die Änderungen auf all Ihre von AFT verwalteten Konten vor.

Folgen Sie den Anweisungen unter Anpassungen erneut aufrufen in der AWS Control Tower-Dokumentation, um die Änderungen auf mehrere von AFT verwaltete AWS-Konten anzuwenden.

AWS-Administrator