

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.

# Verwendung CodePipeline zur Bereitstellung von Terraform und Vorlagen CloudFormation
<a name="using-codepipeline"></a>

In der DPA verwenden Sie Bausteine für die Erstellung von Beschleunigern für AWS CodePipeline Terraform und IaC. CloudFormation In diesem Abschnitt wird Folgendes für diesen Anwendungsfall beschrieben:
+ Standardisierte Pipeline-Struktur
+ Wiederverwendbare Stufen und Jobs
+ Integrierte Tools für Sicherheitsscans

Das DPA-Repository enthält Ordner für [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/terraform) und. [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/cloudformation) Jeder dieser Ordner enthält die folgenden zwei Unterordner:
+ **Pipeline-Module** — Dieser Ordner enthält den Code für die Bereitstellung der standardisierten Pipeline-Struktur.
+ **shared** — Dieser Ordner enthält ready-to-use Buildspec-Dateien für die DPA-Phasen und -Jobs.

## Voraussetzungen
<a name="prerequisites-codepipeline"></a>
+ Ein aktiver AWS-Konto
+ Berechtigungen zur Bereitstellung von Ressourcen mithilfe von IaC-Vorlagen
+ Berechtigungen zum Erstellen von AWS CodeCommit Repositorys und Komponenten CodePipeline 

## Tools
<a name="tools-codepipeline"></a>
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) [ist ein Linter, der CloudFormation YAML- oder JSON-Vorlagen anhand der Ressourcenspezifikation überprüft.AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Es führt auch andere Prüfungen durch, z. B. die Überprüfung auf gültige Werte für Ressourceneigenschaften und die Einhaltung von Best Practices.
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) ist ein Open-Source-Tool, das potenzielle Sicherheitsprobleme in CloudFormation Vorlagen identifiziert, indem es nach Mustern sucht.
+ [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) ist ein statisches Codeanalyse-Tool, das IaC auf Sicherheits- und Compliance-Fehlkonfigurationen überprüft.
+ [TFLint](https://github.com/terraform-linters/tflint)ist ein Linter, der den Terraform-Code auf mögliche Fehler und die Einhaltung von Best Practices überprüft.
+ [tfsec](https://github.com/aquasecurity/tfsec) ist ein statisches Codeanalyse-Tool, das Terraform-Code auf mögliche Fehlkonfigurationen überprüft.

## Anleitungen
<a name="instructions-codepipeline"></a>

### CodeCommit Erstellen Sie Repositorys
<a name="instructions-repo"></a>

1. Erstellen Sie zwei separate CodeCommit Repositorys wie folgt:
   + `common-repo`— Dieses Repository enthält die gemeinsam genutzten Bibliotheken, Buildspec-Dateien und Abhängigkeiten.
   + `app-repo`— Dieses Repository enthält die Terraform oder die CloudFormation Vorlagen für die Bereitstellung Ihrer Infrastruktur.

   Anweisungen finden Sie unter [Erstellen eines AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) Repositorys.

1. Erstellen Sie im `common-repo` Repo einen Ordner mit dem Namen`shared`. Kopieren Sie die Buildspec-Dateien aus dem [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/terraform/shared) - oder [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/aws-codepipeline/cloudformation/shared)**Shared-Ordner** im GitHub DPA-Repo in den neuen Ordner. Anweisungen finden Sie unter [Erstellen oder Hinzufügen](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-file.html) einer Datei zu einem Repository. AWS CodeCommit 

1. Erstellen Sie im `app-repo` Repository einen Ordner mit dem Namen`entrypoint`. Kopieren Sie die Datei aus dem [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/examples/aws_codepipeline/terraform/entrypoint/terraform-infrastructure.json) - oder [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/examples/aws_codepipeline/cloudformation/entrypoint/config.json)**Entrypoint-Ordner** im GitHub DPA-Repo in den neuen Ordner. Weitere Informationen zu diesen Dateien finden Sie unter. [Grundlegendes zur JSON-Datei für den Einstiegspunkt](#understanding-json-file)

1. Sehen Sie sich das Verzeichnis [Terraform](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/examples/aws_codepipeline/terraform) oder die [CloudFormation](https://github.com/aws-samples/aws-devops-pipeline-accelerator/tree/main/examples/aws_codepipeline/cloudformation)**Beispiele** an und strukturieren Sie Ihren `app-repo` Ordner dann entsprechend diesen Beispielen. Diese Verzeichnisse enthalten Beispiele für die Bereitstellung einer Amazon Elastic Compute Cloud (Amazon EC2) -Instance oder eines Amazon Simple Storage Service (Amazon S3) -Buckets.

1. Fahren Sie mit einem der folgenden beiden Abschnitte fort:
   + [Erstellen Sie die Pipeline und definieren Sie Phasen (Terraform)](#instructions-terraform-pipeline)
   + [Erstellen Sie die Pipeline und definieren Sie die Phasen (CloudFormation)](#instructions-cfn-pipeline)

### Erstellen Sie die Pipeline und definieren Sie Phasen (Terraform)
<a name="instructions-terraform-pipeline"></a>

1. Klonen Sie das [ DevOps Pipeline Accelerator (DPA) -Repository](https://github.com/aws-samples/aws-devops-pipeline-accelerator) von GitHub Ihrer lokalen Workstation.

1. Navigieren Sie im geklonten Repository zu dem `aws-codepipeline/terraform/pipeline-modules` Ordner.

1. Aktualisieren und validieren Sie in der Datei **terraform.tfvars** den Terraform-Status und die rollenspezifischen Variablen (IAM). AWS Identity and Access Management 

1. Erstellen Sie ein Docker-Image. Anweisungen finden Sie unter [Docker-Image-Erstellung für die Verwendung von in CodeBuild](https://github.com/aws-samples/aws-devops-pipeline-accelerator/blob/main/shared-docker/docker-images/README.md) ()GitHub.

1. Aktualisieren Sie die `builder_image` Variable, die in der Datei **terraform.tfvars** definiert ist.

1. Geben Sie die folgenden Befehle ein. Dadurch wird die Infrastruktur über Terraform initialisiert, in der Vorschau angezeigt und bereitgestellt.

   ```
   terraform init
   terraform plan
   terraform apply
   ```

1. Melden Sie AWS-Konto sich bei der an. Vergewissern Sie sich in der [CodePipeline Konsole](https://console.aws.amazon.com/codesuite/codepipeline/home), dass die neue Pipeline erstellt wurde.

   **Hinweis**: Wenn sich der erste Lauf in einem `failed` Status befindet, wiederholen Sie den vorherigen Schritt.

1. Wenn die neue CodePipeline Pipeline erstellt wird, AWS CodeBuild wird automatisch eine neue IAM-Rolle für erstellt. Der Name dieser automatisch erstellten Rolle endet auf`-codebuild-role`. Aktualisieren Sie diese Rolle mit den Berechtigungen, die für die Bereitstellung Ihrer Infrastruktur erforderlich sind.

### Erstellen Sie die Pipeline und definieren Sie die Phasen (CloudFormation)
<a name="instructions-cfn-pipeline"></a>

1. Klonen Sie das [ DevOps Pipeline Accelerator (DPA) -Repository](https://github.com/aws-samples/aws-devops-pipeline-accelerator) von GitHub Ihrer lokalen Workstation.

1. Navigieren Sie im geklonten Repository zu dem `aws-codepipeline/cloudformation/pipeline-modules` Ordner.

1. Stellen Sie die Vorlage ** CloudFormation pipeline-cft.yaml** bereit. Im Folgenden sind die erforderlichen Parameter aufgeführt, die Sie an den Stack übergeben müssen.
   + `ArtifactsBucket`— Name des Repos, das die zu aktualisierenden Pipeline-Artefakte enthält
   + `EcrDockerRepository`— Uniform Resource Identifier (URI) des Amazon ECR-Repositorys mit dem Tag `image`
   + `CodeCommitAppRepo`— Name des CodeCommit Repositorys, das die Vorlagen enthält
   + `CodeCommitBaseRepo`— Name des CodeCommit Repositorys, das die gemeinsam genutzten Dateien enthält
   + `CodeCommitRepoBranch`— Name des CodeCommit Repository-Zweigs
   + `SNSMailAddress`— E-Mail-Adresse, an die Amazon Simple Notification Service (Amazon SNS) Benachrichtigungen über den Pipeline-Status gesendet werden

   Anweisungen finden Sie in der [Dokumentation unter Arbeiten mit Stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html). CloudFormation 

1. Melden Sie sich beim AWS-Konto an. Vergewissern Sie sich in der [CodePipeline Konsole](https://console.aws.amazon.com/codesuite/codepipeline/home), dass die neue Pipeline erstellt wurde.  

1. Wenn die neue CodePipeline Pipeline erstellt wird, AWS CodeBuild wird automatisch eine neue IAM-Rolle für erstellt. Der Name dieser automatisch erstellten Rolle endet auf`-codebuild-role`. Aktualisieren Sie diese Rolle mit den Berechtigungen, die für die Bereitstellung Ihrer Infrastruktur erforderlich sind.

## Grundlegendes zur JSON-Datei für den Einstiegspunkt
<a name="understanding-json-file"></a>

### Terraform-Einstiegspunktdatei
<a name="entry-point-terraform"></a>

Dies ist die Hauptkonfigurationsdatei. In dieser Datei können Sie eine Phase anpassen und aktivieren oder deaktivieren. Wenn Sie eine Phase deaktivieren, wird die Phase dadurch nicht gelöscht oder aus der Pipeline entfernt. Stattdessen wird die Phase während der Laufzeit übersprungen.

```
{
    "build_stage_required" : "true",
    "test_stage_required" : "true",
    "predeploy_stage_required": "true",
    "deploy_stage_required": "true",
    "postdeploy_stage_required": "true",
    "destroy_stage_required": "true",
    "bucket":"tf-state-dpa",                # S3 bucket used for Terraform backend
    "key":"terraform_test.tfstate",         # S3 key to be used
    "region":"us-east-1",       
    "dynamodb_table":"tf-state-dpa"         # DynamoDB Table for Terraform backend
}
```

### CloudFormation Einstiegspunkt-Datei
<a name="entry-point-cfn"></a>

Dies ist die Hauptkonfigurationsdatei. In dieser Datei passen Sie Stufen an und aktivieren oder deaktivieren sie. Wenn Sie eine Phase deaktivieren, wird die Phase dadurch nicht gelöscht oder aus der Pipeline entfernt. Stattdessen überspringt die Pipeline die Phase während der Laufzeit.

```
{
    "init_stage_required" : "true",
    "test_stage_required" : "true",
    "createinfra_stage_required": "true",
    "envType" : "cloudformation",
    "stage_required" : "true",
    "cft_s3_bucket" : "pipeline-bucket",               #S3 bucket from the destination account to keep CFT templates
    "stack_name" : "aws-cft-poc",                      #CloudFormation stack name
    "account" : "************",                        #Destination AWS account to deploy stack
    "roleName" : "codestack-poc-cross-account-role",   #Cross-account IAM role name
    "region" : "us-east-1",
    "destroy_stack" : "false"                          #To destroy the provisioned stack, set this value to "true"
}
```