

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
<a name="validate-account-factory-for-terraform-aft-code-locally"></a>

*Alexandru Pop und Michal Gorniak, Amazon Web Services*

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

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 IaC-Tool (Infrastructure as Code), 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 Eingänge bereitstellen und anpassen können. AWS-Konten AWS Control Tower

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 AWS CodeCommit Repositorys Ihres AFT-Verwaltungskontos 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 wie`terraform validate`, `terraform plan``terraform destroy`, und auszuführen. `terraform import`

## Voraussetzungen und Einschränkungen
<a name="validate-account-factory-for-terraform-aft-code-locally-prereqs"></a>

**Voraussetzungen**
+ Eine aktive Umgebung AWS mit mehreren Konten, die Folgendes verwendet [AWS Control Tower](https://aws.amazon.com/controltower)
+ Eine vollständig bereitgestellte [AFT-Umgebung](https://docs.aws.amazon.com/controltower/latest/userguide/taf-account-provisioning.html)
+ AWS Command Line Interface (AWS CLI), [installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) und [konfiguriert](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [AWS CLI Credential Helper für AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html), installiert und konfiguriert
+ Python 3.x
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), auf Ihrem lokalen Computer installiert und konfiguriert
+ `git-remote-commit`Hilfsprogramm, [installiert und konfiguriert](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), installiert und konfiguriert (die lokale Terraform-Paketversion muss mit der Version übereinstimmen, die in der AFT-Bereitstellung verwendet wird)

**Einschränkungen**
+ Dieses Muster deckt nicht die Bereitstellungsschritte ab AWS Control Tower, die für 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
<a name="validate-account-factory-for-terraform-aft-code-locally-architecture"></a>

**Zieltechnologie-Stack**
+ AFT-Infrastruktur, die innerhalb einer AWS Control 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 System lokal aufgerufen wird. AWS-Konto 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 in der Dokumentation unter [Anpassungen erneut aufrufen](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations). AWS Control Tower 

Sie können auch einen ähnlichen Prozess verwenden, um AFT-Kontoanpassungen in einem lokalen Terminal auszufü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-customizations**AFT-Verwaltungskonto.

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

**AWS-Services**
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)hilft Ihnen bei der Einrichtung und Verwaltung einer Umgebung mit AWS mehreren Konten und folgt dabei den vorgeschriebenen Best Practices.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie AWS-Services über Befehle in Ihrer Befehlszeilen-Shell interagieren können.

**Andere Dienste**
+ [HashiCorp Terraform](https://www.terraform.io/docs) ist ein Infrastructure-as-Code-Tool (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.
+ [Git](https://git-scm.com/docs) 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](#validate-account-factory-for-terraform-aft-code-locally-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
<a name="validate-account-factory-for-terraform-aft-code-locally-epics"></a>

### Speichern Sie den Beispielcode als lokale Datei
<a name="save-the-example-code-as-a-local-file"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Speichern Sie den Beispielcode als lokale Datei. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | AWS-Administrator | 
| Machen Sie den Beispielcode lauffähig. | Öffnen Sie ein Terminalfenster und authentifizieren Sie sich AWS bei Ihrem AFT-Verwaltungskonto, indem Sie einen der folgenden Schritte ausführen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Ihre Organisation verfügt möglicherweise auch über ein benutzerdefiniertes Tool, mit dem Sie Anmeldeinformationen für Ihre AWS Umgebung bereitstellen können. | AWS-Administrator | 
| Überprüfen Sie den korrekten Zugriff auf das AFT-Verwaltungskonto AWS-Region. | Stellen Sie sicher, dass Sie dieselbe Terminalsitzung verwenden, mit der Sie sich bei Ihrem AFT-Verwaltungskonto authentifiziert haben.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | AWS-Administrator | 
| Erstellen Sie ein neues, lokales Verzeichnis zum Speichern des AFT-Repository-Codes. | Führen Sie in derselben Terminalsitzung die folgenden Befehle aus:<pre>mkdir my_aft <br />cd my_aft</pre> | AWS-Administrator | 
| Klonen Sie den Remote-AFT-Repository-Code. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | AWS-Administrator | 

### Erstellen Sie die Terraform-Konfigurationsdateien, die für die lokale Ausführung der AFT-Pipeline erforderlich sind
<a name="create-the-terraform-configuration-files-required-for-the-aft-pipeline-to-run-locally"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Öffnen Sie eine zuvor ausgeführte AFT-Pipeline und kopieren Sie die Terraform-Konfigurationsdateien in einen lokalen Ordner. | Die `backend.tf` in diesem Epos erstellten `aft-providers.tf` Konfigurationsdateien 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, die den Betrieb der Pipeline innerhalb einer einzigen Datei repräsentieren AWS-Konto.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)**Beispiel für eine automatisch generierte backend.tf-Anweisung**<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>****Die `aft-providers.tf` Dateien `backend.tf` und sind an eine bestimmte AFT-Bereitstellung und einen bestimmten AWS-Konto Ordner gebunden. Diese Dateien unterscheiden sich auch, je nachdem, ob sie sich im **aft-global-customizations**aft-account-customizations****and-Repository innerhalb derselben AFT-Bereitstellung befinden. Stellen Sie sicher, dass Sie beide Dateien aus derselben Runtime-Liste generieren. | AWS-Administrator | 

### Führen Sie die AFT-Pipeline lokal aus, indem Sie das Bash-Beispielskript verwenden
<a name="run-the-aft-pipeline-locally-by-using-the-example-bash-script"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Implementieren Sie die Terraform-Konfigurationsänderungen, die Sie validieren möchten. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | AWS-Administrator | 
| Führen Sie das `ct_terraform.sh` Skript aus und überprüfen Sie die Ausgabe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/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/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html) | AWS-Administrator | 

### Übertragen Sie Ihre lokalen Codeänderungen zurück in das AFT-Repository
<a name="push-your-local-code-changes-back-to-the-aft-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Fügen Sie Verweise auf die `aft-providers.tf` Dateien `backend.tf` und zu einer `.gitignore` Datei hinzu. | Fügen Sie die `aft-providers.tf` Dateien `backend.tf`**** und, die Sie erstellt haben, zu einer `.gitignore` Datei hinzu, indem Sie die folgenden Befehle ausführen:<pre>echo backend.tf >> .gitignore<br />echo aft-providers.tf >>.gitignore</pre>Durch das Verschieben der Dateien in die `.gitignore`**** Datei wird sichergestellt, dass sie nicht festgeschrieben und in das Remote-AFT-Repository zurückgeschickt werden. | AWS-Administrator | 
| Übergeben Sie Ihre Codeänderungen und übertragen Sie sie an das Remote-AFT-Repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/validate-account-factory-for-terraform-aft-code-locally.html)Die Codeänderungen, die Sie vornehmen, wenn Sie dieses Verfahren bis zu diesem Zeitpunkt befolgen, gelten AWS-Konto nur für eine. | AWS-Administrator | 

### Führen Sie die Änderungen auf mehrere Konten aus
<a name="roll-out-the-changes-to-multiple-accounts"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Nehmen Sie die Änderungen auf all Ihre Konten vor, die von AFT verwaltet werden. | Folgen Sie den Anweisungen in der Dokumentation unter [Anpassungen erneut aufrufen AWS-Konten](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html#aft-re-invoke-customizations), um die Änderungen auf mehrere, die von AFT verwaltet werden, anzuwenden. AWS Control Tower  | AWS-Administrator | 