Terraform-IaC-Dateien - AWS Proton

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.

Terraform-IaC-Dateien

Erfahren Sie, wie Sie Terraform-Infrastruktur-as-Code-Dateien (IaC) mit verwenden. AWS ProtonTerraform ist eine weit verbreitete Open-Source-IaC-Engine, die von entwickelt wurde. HashiCorp Terraform-Module wurden in HashiCorp der HCL-Sprache entwickelt und unterstützen mehrere Anbieter von Backend-Infrastrukturen, darunter Amazon Web Services.

AWS Proton unterstützt die selbstverwaltete Bereitstellung für Terraform IaC.

Ein vollständiges Beispiel für ein Provisioning-Repository, das auf Pull-Anfragen reagiert und die Infrastrukturbereitstellung implementiert, finden Sie in der Automatisierungsvorlage Terraform Actions für on. OpenSource GitHub AWS Proton GitHub

So funktioniert die selbstverwaltete Bereitstellung mit Terraform IaC-Vorlagenpaketdateien:
  1. Wenn Sie eine Umgebung aus Terraform-Vorlagenpaketen erstellen, AWS Proton kompiliert Ihre Dateien mit Konsolen- oder Eingabeparametern. .tf spec file

  2. Es stellt eine Pull-Anfrage, um die kompilierten IaC-Dateien mit dem Repository zusammenzuführen, bei dem Sie sich registriert haben. AWS Proton

  3. Wenn die Anfrage genehmigt AWS Proton wurde, wird auf den von Ihnen angegebenen Bereitstellungsstatus gewartet.

  4. Wenn die Anfrage abgelehnt wird, wird die Erstellung der Umgebung abgebrochen.

  5. Wenn bei der Pull-Anfrage ein Timeout auftritt, ist die Erstellung der Umgebung nicht abgeschlossen.

AWS Proton mit Überlegungen zu Terraform IaC:
  • AWS Proton verwaltet Ihre Terraform-Bereitstellung nicht.

  • Sie müssen ein Provisioning-Repository bei registrieren. AWS Proton AWS Proton stellt Pull-Requests für dieses Repository.

  • Sie müssen eine Verbindung herstellen AWS Proton , um eine CodeStar Verbindung zu Ihrem Provisioning-Repository herzustellen.

  • Um Daten aus AWS Proton kompilierten IaC-Dateien bereitzustellen, müssen Sie auf AWS Proton Pull-Requests antworten. AWS Proton sendet Pull-Requests, nachdem die Umgebung und der Dienst Aktionen erstellt und aktualisiert haben. Weitere Informationen erhalten Sie unter AWS Proton Umgebungen und AWS Proton Dienstleistungen.

  • Um eine Pipeline aus AWS Proton kompilierten IaC-Dateien bereitzustellen, müssen Sie ein CI/CD-Pipeline-Repository erstellen.

  • Ihre auf Pull-Requests basierende Bereitstellungsautomatisierung muss Schritte zur Benachrichtigung über alle Statusänderungen AWS Proton der bereitgestellten AWS Proton Ressourcen enthalten. Sie können die API verwenden. AWS Proton NotifyResourceDeploymentStatusChange

  • Sie können keine Dienste, Pipelines und Komponenten, die aus CloudFormation IaC-Dateien erstellt wurden, in Umgebungen bereitstellen, die aus Terraform-IaC-Dateien erstellt wurden.

  • Sie können keine Dienste, Pipelines und Komponenten, die aus Terraform-IaC-Dateien erstellt wurden, in Umgebungen bereitstellen, die aus IaC-Dateien erstellt wurden. CloudFormation

Bei der Vorbereitung Ihrer Terraform-IaC-Dateien für fügen Sie Ihren Eingabevariablen Namespaces hinzu AWS Proton, wie in den folgenden Beispielen gezeigt. Weitere Informationen finden Sie unter Parameter.

terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }

Kompilierte Infrastruktur als Code

Wenn Sie eine Umgebung oder einen Dienst erstellen, AWS Proton kompiliert Ihre Infrastruktur als Codedateien mit Konsole oder spec file Eingaben. Es erstellt proton.resource-type.variables.tf proton.auto.tfvars.json Dateien für Ihre Eingaben, die von Terraform verwendet werden können, wie in den folgenden Beispielen gezeigt. Diese Dateien befinden sich in einem angegebenen Repository in einem Ordner, der dem Namen der Umgebung oder der Dienstinstanz entspricht.

Das Beispiel zeigt, wie AWS Proton Tags in die Variablendefinition und Variablenwerte aufgenommen werden und wie Sie diese AWS Proton Tags an bereitgestellte Ressourcen weitergeben können. Weitere Informationen finden Sie unter Weitergabe von Tags an bereitgestellte Ressourcen.

dev/environment.tf:

terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } // This tells terraform to store the state file in s3 at the location // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate backend "s3" { bucket = "terraform-state-bucket" key = "tf-os-sample/terraform.tfstate" region = "us-east-1" } } // Configure the AWS Provider provider "aws" { region = "us-east-1" default_tags { tags = var.proton_tags } } resource "aws_ssm_parameter" "my_ssm_parameter" { name = "my_ssm_parameter" type = "String" // Use the Proton environment.inputs. namespace value = var.environment.inputs.ssm_parameter_value }

dev/proton.environment.variables.tf:

variable "environment" { type = object({ inputs = map(string) name = string }) } variable "proton_tags" { type = map(string) default = null }

dev/proton.auto.tfvars.json:

{ "environment": { "name": "dev", "inputs": { "ssm_parameter_value": "MyNewParamValue" } } "proton_tags" : { "proton:account" : "123456789012", "proton:template" : "arn:aws:proton:us-east-1:123456789012:environment-template/fargate-env", "proton:environment" : "arn:aws:proton:us-east-1:123456789012:environment/dev" } }

Repository-Pfade

AWS Proton verwendet Konsolen- oder Spezifikationseingaben aus Aktionen zur Erstellung von Umgebungen oder Diensten, um das Repository und den Pfad zu finden, in dem die kompilierten IaC-Dateien gespeichert werden sollen. Die Eingabewerte werden an Eingabeparameter mit Namespaces übergeben.

AWS Proton unterstützt zwei Layouts für Repository-Pfade. In den folgenden Beispielen werden die Pfade anhand der Namespace-Ressourcenparameter aus zwei Umgebungen benannt. Jede Umgebung hat Dienstinstanzen von zwei Diensten, und die Dienstinstanzen eines der Dienste haben direkt definierte Komponenten.

Ressourcentyp Benennen Sie den Parameter = Ressourcenname
Umgebung environment.name = "env-prod"
Umgebung environment.name "env-staged"
Service service.name "service-one"
  Service-Instance service_instance.name "instance-one-prod"
  Service-Instance service_instance.name "instance-one-staged"
Service service.name "service-two"
  Service-Instance service_instance.name "instance-two-prod"
    Komponente service_instance.components.default.name "component-prod"
  Service-Instance service_instance.name "instance-two-staged"
    Komponente service_instance.components.default.name "component-staged"
Layout 1

Wenn AWS Proton das angegebene Repository mit einem environments Ordner gefunden wird, erstellt es einen Ordner, der die kompilierten IaC-Dateien enthält und mit dem environment.name benannt ist.

Wenn das AWS Proton angegebene Repository mit einem environments Ordner gefunden wird, der einen Ordnernamen enthält, der einem mit einer Dienstinstanz kompatiblen Umgebungsnamen entspricht, erstellt es einen Ordner, der die kompilierten Instanz-IaC-Dateien enthält und mit dem benannt ist. service_instance.name

/repo /environments /env-prod # environment folder main.tf proton.environment.variables.tf proton.auto.tfvars.json /service-one-instance-one-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-prod # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json /env-staged # environment folder main.tf proton.variables.tf proton.auto.tfvars.json /service-one-instance-one-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-staged # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json
Layout 2

Wenn das AWS Proton angegebene Repository ohne Ordner gefunden wird, erstellt es einen environments Ordner, in dem sich die kompilierten IaC-Umgebungsdateien environment.name befinden.

Wenn das AWS Proton angegebene Repository mit einem Ordnernamen gefunden wird, der einem mit einer Dienstinstanz kompatiblen Umgebungsnamen entspricht, erstellt es einen service_instance.name Ordner, in dem die kompilierten Instanz-IaC-Dateien gespeichert werden.

/repo /env-prod # environment folder main.tf proton.environment.variables.tf proton.auto.tfvars.json /service-one-instance-one-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-prod # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-prod # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json /env-staged # environment folder main.tf proton.variables.tf proton.auto.tfvars.json /service-one-instance-one-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /service-two-instance-two-staged # instance folder main.tf proton.service_instance.variables.tf proton.auto.tfvars.json /component-staged # component folder main.tf proton.component.variables.tf proton.auto.tfvars.json