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 Infrastructure as Code (IaC)-Dateien mit verwenden AWS Proton. Terraform ist eine weit verbreitete Open-Source-IaC-Engine, die von entwickelt wurdeHashiCorp. Terraform-Module werden in der HCL- HashiCorpSprache von entwickelt und unterstützen mehrere Backend-Infrastrukturanbieter, einschließlich Amazon Web Services.

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

Ein vollständiges Beispiel für ein Bereitstellungs-Repository, das auf Pull-Anfragen reagiert und die Infrastrukturbereitstellung implementiert, finden Sie unter Terraform- OpenSource GitHub Aktionen-Automatisierungsvorlage für AWS Proton auf GitHub.

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

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

  3. Wenn die Anforderung genehmigt wurde, AWS Proton wartet auf den Bereitstellungsstatus, den Sie angeben.

  4. Wenn die Anforderung abgelehnt wird, wird die Umgebungserstellung abgebrochen.

  5. Wenn bei der Pull-Anforderung eine Zeitüberschreitung auftritt, ist die Umgebungserstellung nicht abgeschlossen.

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

  • Sie müssen ein Bereitstellungs-Repository mit .makes-Pull-Anforderungen in diesem Repository registrieren. AWS Proton AWS Proton

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

  • Um aus AWS Proton kompilierten IaC-Dateien bereitzustellen, müssen Sie auf AWS Proton Pull-Anforderungen antworten. AWS Proton makes-Pull-Anforderungen nach Erstellungs- und Aktualisierungsaktionen für Umgebung und Service. Weitere Informationen finden Sie unter AWS Proton Umgebungen und AWS Proton-Services.

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

  • Ihre auf Pull-Anfragen basierende Bereitstellungsautomatisierung muss Schritte enthalten, um AWS Proton über Statusänderungen bereitgestellter AWS Proton Ressourcen zu benachrichtigen. Sie können die AWS Proton NotifyResourceDeploymentStatusChange API verwenden.

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

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

Wenn Sie Ihre Terraform-IaC-Dateien für vorbereiten AWS Proton, fügen Sie Ihren Eingabevariablen Namespaces hinzu, 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 Service erstellen, AWS Proton kompiliert Ihre Infrastruktur als Codedateien mit Konsole oder spec file Eingaben. Es erstellt - proton.resource-type.variables.tf und -proton.auto.tfvars.jsonDateien 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 Service-Instance entspricht.

Das Beispiel zeigt, wie Tags in die Variablendefinition und Variablenwerte AWS Proton einschließt 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 Umgebungs- oder Serviceerstellungsaktionen, um das Repository und den Pfad zu finden, in dem die kompilierten IaC-Dateien gespeichert werden sollen. Die Eingabewerte werden an die Namespace-Eingabeparameter übergeben.

AWS Proton unterstützt zwei Repository-Pfadlayouts. In den folgenden Beispielen werden die Pfade nach den Ressourcenparametern im Namespace aus zwei Umgebungen benannt. Jede Umgebung verfügt über Service-Instances von zwei Services, und die Service-Instances eines der Services verfügen über direkt definierte Komponenten.

Ressourcentyp Name-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 das angegebene Repository mit einem -environmentsOrdner AWS Proton findet, wird ein Ordner erstellt, der die kompilierten IaC-Dateien enthält und mit dem benannt istenvironment.name.

Wenn das angegebene Repository mit einem -environmentsOrdner AWS Proton findet, der einen Ordnernamen enthält, der mit einem mit der Service-Instance kompatiblen Umgebungsnamen übereinstimmt, erstellt es einen Ordner, der die kompilierten IaC-Dateien enthält und mit dem benannt istservice_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 angegebene Repository ohne -environmentsOrdner AWS Proton findet, wird ein -environment.nameOrdner erstellt, in dem es die kompilierten IaC-Dateien der Umgebung findet.

Wenn das angegebene Repository mit einem Ordnernamen AWS Proton findet, der mit einem mit der Service-Instance kompatiblen Umgebungsnamen übereinstimmt, erstellt es einen service_instance.name Ordner, in dem es die kompilierten IaC-Dateien sucht.

/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