

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.

# Erstellen Sie eine CI/CD Pipeline zur Validierung von Terraform-Konfigurationen mithilfe von AWS CodePipeline
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan und Vijesh Vijayakumaran Nair, Amazon Web Services*

## Zusammenfassung
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

Dieses Muster zeigt, wie HashiCorp Terraform-Konfigurationen mithilfe einer von AWS bereitgestellten CI/CD-Pipeline (Continuous Integration and Continuous Delivery) getestet werden. CodePipeline

Terraform ist eine Befehlszeilenschnittstellenanwendung, mit der Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können. [Die in diesem Muster bereitgestellte Lösung erstellt eine CI/CD Pipeline, mit der Sie die Integrität Ihrer Terraform-Konfigurationen überprüfen können, indem Sie fünf Phasen ausführen: CodePipeline ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`ruft die Terraform-Konfiguration, die Sie testen, aus einem AWS-Repository ab. CodeCommit 

1. `"validate"`[führt Tools zur Validierung von Infrastruktur als Code (IaC) aus, einschließlich [tfsec](https://github.com/aquasecurity/tfsec), und checkov. [TFLint](https://github.com/terraform-linters/tflint)](https://www.checkov.io/) Auf der Stufe werden auch die folgenden Terraform-IaC-Validierungsbefehle ausgeführt: und. `terraform validate` `terraform fmt`

1. `"plan"`zeigt, welche Änderungen auf die Infrastruktur angewendet werden, wenn die Terraform-Konfiguration angewendet wird.

1. `"apply"`verwendet den generierten Plan, um die erforderliche Infrastruktur in einer Testumgebung bereitzustellen.

1. `"destroy"`entfernt die Testinfrastruktur, die während der `"apply"` Phase erstellt wurde.

## Voraussetzungen und Einschränkungen
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ AWS-Befehlszeilenschnittstelle (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)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), auf Ihrem lokalen Computer installiert und konfiguriert
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), auf Ihrem lokalen Computer installiert und konfiguriert

**Einschränkungen**
+ Der Ansatz dieses Musters stellt AWS CodePipeline nur für ein AWS-Konto und eine AWS-Region bereit. Für Bereitstellungen mit mehreren Konten und mehreren Regionen sind Konfigurationsänderungen erforderlich.
+ Die AWS Identity and Access Management (IAM) -Rolle, die dieses Muster bereitstellt (**codepipeline\$1iam\$1role**), folgt dem Prinzip der geringsten Rechte. Die Berechtigungen dieser IAM-Rolle müssen auf der Grundlage der spezifischen Ressourcen, die Ihre Pipeline erstellen muss, aktualisiert werden. ****

**Versionen der Produkte**
+ AWS CLI Version 2.9.15 oder höher
+ Terraform Version 1.3.7 oder höher

## Architektur
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**Zieltechnologie-Stack**
+ AWS CodePipeline
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS IAM
+ Amazon Simple Storage Service (Amazon-S3)
+ AWS Key Management Service (AWS KMS)
+ Terraform

**Zielarchitektur**

Das folgende Diagramm zeigt ein Beispiel für einen CI/CD Pipeline-Workflow zum Testen von Terraform-Konfigurationen in. CodePipeline

![\[Architektur zum Testen von Terraform-Konfigurationen mithilfe einer CI/CD AWS-Pipeline.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


Das Diagramm zeigt den folgenden Workflow:

1. In CodePipeline initiiert ein AWS-Benutzer die in einem Terraform-Plan vorgeschlagenen Aktionen, indem er den `terraform apply` Befehl in der AWS-CLI ausführt.

1. AWS CodePipeline übernimmt eine IAM-Servicerolle, die die für den Zugriff auf CodeCommit CodeBuild, AWS KMS und Amazon S3 erforderlichen Richtlinien umfasst.

1. CodePipeline führt die `"checkout"` Pipeline-Phase aus, um die Terraform-Konfiguration zum Testen aus einem CodeCommit AWS-Repository abzurufen.

1. CodePipeline führt die `"validate"` Phase zum Testen der Terraform-Konfiguration aus, indem IaC-Validierungstools und Terraform-IaC-Validierungsbefehle in einem Projekt ausgeführt werden. CodeBuild 

1. CodePipeline führt die `"plan"` Phase aus, um einen Plan im CodeBuild Projekt auf der Grundlage der Terraform-Konfiguration zu erstellen. Der AWS-Benutzer kann diesen Plan überprüfen, bevor die Änderungen auf die Testumgebung angewendet werden.

1. Code Pipeline führt die `"apply"` Phase zur Implementierung des Plans durch, indem das CodeBuild Projekt zur Bereitstellung der erforderlichen Infrastruktur in der Testumgebung verwendet wird.

1. CodePipeline führt die `"destroy"` Phase aus, in der die Testinfrastruktur entfernt wird, die während der `"apply"` Phase erstellt wurde. CodeBuild 

1. Ein Amazon S3 S3-Bucket speichert Pipeline-Artefakte, die mithilfe eines vom [Kunden verwalteten AWS KMS KMS-Schlüssels](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) ver- und entschlüsselt werden.

## Tools
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Tools**

*AWS-Services*
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) hilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) ist ein vollständig verwalteter Build-Service, der Sie beim Kompilieren von Quellcode, beim Ausführen von Komponententests und beim Erstellen von Artefakten unterstützt, die sofort einsatzbereit sind.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS-Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) unterstützt Sie bei der Erstellung und Kontrolle kryptografischer Schlüssel, um Ihre Daten zu schützen.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

*Andere Dienste*
+ [HashiCorp Terraform](https://www.terraform.io/docs) ist eine Befehlszeilenschnittstellenanwendung, mit der Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

**Code**

Der Code für dieses Muster ist im Repository verfügbar. GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples) Das Repository enthält die Terraform-Konfigurationen, die zur Erstellung der in diesem Muster beschriebenen Zielarchitektur erforderlich sind.

## Epen
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Stellen Sie die Lösungskomponenten bereit
<a name="provision-the-solution-components"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das GitHub Repository. | Klonen Sie das GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)Repository, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Weitere Informationen finden Sie in der GitHub Dokumentation unter [Ein Repository klonen](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). | DevOps Ingenieur | 
| Erstellen Sie eine Terraform-Variablendefinitionsdatei.  | Erstellen Sie eine `terraform.tfvars` Datei, die auf Ihren Anwendungsfallanforderungen basiert. Sie können die Variablen in der `examples/terraform.tfvars` Datei aktualisieren, die sich im geklonten Repository befindet.Weitere Informationen finden Sie unter [Zuweisen von Werten zu Stammmodulvariablen](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) in der Terraform-Dokumentation.Die `Readme.md` Datei des Repositorys enthält weitere Informationen zu den erforderlichen Variablen. | DevOps Ingenieur | 
| Konfigurieren Sie AWS als Terraform-Anbieter. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Weitere Informationen finden Sie unter [AWS-Anbieter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) in der Terraform-Dokumentation. | DevOps Ingenieur | 
| Aktualisieren Sie die Terraform-Anbieterkonfiguration für die Erstellung des Amazon S3 S3-Replikationsbuckets. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Die Replikation aktiviert das automatische, asynchrone Kopieren von Objekten zwischen Amazon S3 S3-Buckets. | DevOps Ingenieur | 
| Initialisieren Sie die Terraform-Konfiguration. | Um Ihr Arbeitsverzeichnis zu initialisieren, das die Terraform-Konfigurationsdateien enthält, führen Sie den folgenden Befehl im Stammordner des geklonten Repositorys aus:<pre>terraform init</pre> | DevOps Ingenieur | 
| Erstellen Sie den Terraform-Plan. | Um einen Terraform-Plan zu erstellen, führen Sie den folgenden Befehl im Stammordner des geklonten Repositorys aus:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform wertet die Konfigurationsdateien aus, um den Zielstatus für die deklarierten Ressourcen zu ermitteln. Anschließend wird der Zielstatus mit dem aktuellen Status verglichen und ein Plan erstellt. | DevOps Ingenieur | 
| Überprüfen Sie den Terraform-Plan. | Überprüfen Sie den Terraform-Plan und stellen Sie sicher, dass er die erforderliche Architektur in Ihrem AWS-Zielkonto konfiguriert. | DevOps Ingenieur | 
| Stellen Sie die Lösung bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform erstellt, aktualisiert oder zerstört die Infrastruktur, um den in den Konfigurationsdateien angegebenen Zielstatus zu erreichen. | DevOps Ingenieur | 

### Validieren Sie Terraform-Konfigurationen, indem Sie die Pipeline ausführen
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie das Quellcode-Repository ein. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps Ingenieur | 
| Validieren Sie die Pipeline-Phasen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Weitere Informationen finden Sie unter [Pipeline-Details und Verlauf anzeigen (Konsole)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) im * CodePipeline AWS-Benutzerhandbuch*.Wenn eine Änderung in den Hauptzweig des Quell-Repositorys übernommen wird, wird die Testpipeline automatisch aktiviert. | DevOps Ingenieur | 
| Überprüfen Sie die Berichtsausgabe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Das `<project_name>-validate` CodeBuild Projekt generiert während der Phase Berichte über Sicherheitslücken für Ihren Code. `"validate"` | DevOps Ingenieur | 

### Bereinigen Ihrer Ressourcen
<a name="clean-up-your-resources"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Säubern Sie die Pipeline und die zugehörigen Ressourcen. | Um die Testressourcen aus Ihrem AWS-Konto zu löschen, führen Sie den folgenden Befehl im Stammordner des geklonten Repositorys aus:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps Ingenieur | 

## Fehlerbehebung
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Sie erhalten während der `"apply"` Phase eine **AccessDenied **Fehlermeldung. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Zugehörige Ressourcen
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Modulblöcke](https://developer.hashicorp.com/terraform/language/modules/syntax) (Terraform-Dokumentation)
+ [So verwenden Sie CI/CD die Bereitstellung und Konfiguration von AWS-Sicherheitsservices mit Terraform](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/) (AWS-Blogbeitrag)
+ [Verwenden von serviceverknüpften Rollen (IAM-Dokumentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html))
+ [Pipeline erstellen](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) (AWS-CLI-Dokumentation)
+ [Serverseitige Verschlüsselung für in Amazon S3 gespeicherte Artefakte konfigurieren für CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) ( CodePipeline AWS-Dokumentation)
+ [Kontingente für AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild AWS-Dokumentation)
+ [Datenschutz in AWS CodePipeline ( CodePipeline AWS-Dokumentation](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html))

## Zusätzliche Informationen
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**Benutzerdefinierte Terraform-Module**

Im Folgenden finden Sie eine Liste der benutzerdefinierten Terraform-Module, die in diesem Muster verwendet werden:
+ `codebuild_terraform`erstellt die CodeBuild Projekte, die jede Phase der Pipeline bilden.
+ `codecommit_infrastructure_source_repo`erfasst und erstellt das CodeCommit Quell-Repository.
+ `codepipeline_iam_role`erstellt die erforderlichen IAM-Rollen für die Pipeline.
+ `codepipeline_kms`erstellt den erforderlichen AWS-KMS-Schlüssel für die Amazon S3 S3-Objektverschlüsselung und -entschlüsselung.
+ `codepipeline_terraform`erstellt die Testpipeline für das CodeCommit Quell-Repository.
+ `s3_artifacts_bucket`erstellt einen Amazon S3 S3-Bucket zur Verwaltung von Pipeline-Artefakten.

**Spezifikationsdateien erstellen**

Im Folgenden finden Sie eine Liste von Build-Spezifikationsdateien (Buildspec), die dieses Muster verwendet, um jede Pipeline-Phase auszuführen:
+ `buildspec_validate.yml`führt die Phase aus. `"validate"`
+ `buildspec_plan.yml`leitet die `"plan"` Bühne.
+ `buildspec_apply.yml`leitet die `"apply"` Bühne.
+ `buildspec_destroy.yml`leitet die `"destroy"` Bühne.

*Variablen in der Spezifikationsdatei erstellen*

Jede Buildspec-Datei verwendet die folgenden Variablen, um unterschiedliche buildspezifische Einstellungen zu aktivieren:


| 
| 
| Variable | Standardwert | Description | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." |  CodeCommit Definiert das Quellverzeichnis | 
| `TF_VERSION` | „1.3.7" | Definiert die Terraform-Version für die Build-Umgebung | 

Die `buildspec_validate.yml` Datei unterstützt auch die folgenden Variablen, um verschiedene Build-spezifische Einstellungen zu aktivieren:


| 
| 
| Variable | Standardwert | Description | 
| --- |--- |--- |
| `SCRIPT_DIR` | “. /Vorlagen/Skripte“ | Definiert das Skriptverzeichnis | 
| `ENVIRONMENT` | „dev“ | Definiert den Namen der Umgebung | 
| `SKIPVALIDATIONFAILURE` | „Y“ | Überspringt die Validierung bei Fehlern | 
| `ENABLE_TFVALIDATE` | „Y“ | Aktiviert Terraform Validate  | 
| `ENABLE_TFFORMAT` | „Y“ | Aktiviert das Terraform-Format | 
| `ENABLE_TFCHECKOV` | „Y“ | Aktiviert den Checkov-Scan | 
| `ENABLE_TFSEC` | „Y“ | Aktiviert den TFSec-Scan | 
| `TFSEC_VERSION` | „v1.28.1" | Definiert die TFSec-Version | 