Wird CodePipeline zur Bereitstellung von Terraform und Vorlagen verwendet CloudFormation - AWS Präskriptive Leitlinien

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.

Wird CodePipeline zur Bereitstellung von Terraform und Vorlagen verwendet CloudFormation

Notice (Hinweis)

AWS CodeCommit ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS CodeCommit können den Service weiterhin wie gewohnt nutzen. Weitere Informationen

In der DPA verwenden Sie Bausteine für die AWS CodePipeline Erstellung von Beschleunigern für 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 und. 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

  • Ein aktiver AWS-Konto

  • Berechtigungen zur Bereitstellung von Ressourcen mithilfe von IaC-Vorlagen

  • Berechtigungen zum Erstellen von AWS CodeCommit Repositorys und Komponenten CodePipeline

Tools

Anweisungen

CodeCommit Repositorys erstellen

  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 Repositorys.

  2. Erstellen Sie im common-repo Repo einen Ordner mit dem Namenshared. Kopieren Sie die Buildspec-Dateien aus dem Terraform - oder CloudFormationShared-Ordner im GitHub DPA-Repo in den neuen Ordner. Anweisungen finden Sie unter Erstellen oder Hinzufügen einer Datei zu einem Repository. AWS CodeCommit

  3. Erstellen Sie im app-repo Repository einen Ordner mit dem Namenentrypoint. Kopieren Sie die Datei aus dem Terraform - oder CloudFormationEntrypoint-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

  4. Sehen Sie sich das Verzeichnis Terraform oder die CloudFormationBeispiele 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.

  5. Fahren Sie mit einem der folgenden beiden Abschnitte fort:

Erstellen Sie die Pipeline und definieren Sie Phasen (Terraform)

  1. Klonen Sie das DevOps Pipeline Accelerator (DPA) -Repository von GitHub Ihrer lokalen Workstation.

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

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

  4. Erstellen Sie ein Docker-Image. Anweisungen finden Sie unter Docker-Image-Erstellung für die Verwendung von in CodeBuild ()GitHub.

  5. Aktualisieren Sie die builder_image Variable, die in der Datei terraform.tfvars definiert ist.

  6. 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
  7. Melden Sie AWS-Konto sich bei der an. Vergewissern Sie sich in der CodePipeline Konsole, dass die neue Pipeline erstellt wurde.

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

  8. 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)

  1. Klonen Sie das DevOps Pipeline Accelerator (DPA) -Repository von GitHub Ihrer lokalen Workstation.

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

  3. 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. CloudFormation

  4. Melden Sie sich beim AWS-Konto an. Vergewissern Sie sich in der CodePipeline Konsole, dass die neue Pipeline erstellt wurde.  

  5. 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

Terraform-Einstiegspunktdatei

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

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