file Terraform iAC - AWS Proton

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

file Terraform iAC

Scopri come utilizzare l'infrastruttura Terraform come file di codice (IaC) con. AWS ProtonTerraform è un motore IaC open source ampiamente utilizzato sviluppato da. HashiCorp I moduli Terraform sono sviluppati nel linguaggio HashiCorp HCL e supportano diversi fornitori di infrastrutture di backend, tra cui Amazon Web Services.

AWS Proton supporta il provisioning autogestito per Terraform IAc.

Per un esempio completo di un repository di provisioning che risponde alle pull request e implementa il provisioning dell'infrastruttura, consulta il modello di automazione Terraform Actions per on. OpenSource GitHub AWS Proton GitHub

Come funziona il provisioning autogestito con i file bundle di modelli Terraform IAc:
  1. Quando crei un ambiente dai pacchetti di modelli Terraform, AWS Proton compila i tuoi file con la console o i parametri di input. .tf spec file

  2. Effettua una richiesta pull per unire i file IAc compilati nel repository con cui ti sei registrato. AWS Proton

  3. Se la richiesta viene approvata, AWS Proton attende lo stato di approvvigionamento fornito.

  4. Se la richiesta viene rifiutata, la creazione dell'ambiente viene annullata.

  5. Se la pull request scade, la creazione dell'ambiente non è completa.

AWS Proton con considerazioni su Terraform IAc:
  • AWS Proton non gestisce il provisioning di Terraform.

  • È necessario registrare un repository di provisioning con. AWS Proton AWS Proton effettua richieste pull su questo repository.

  • È necessario creare una CodeStar connessione per connettersi al AWS Proton repository di provisioning.

  • Per effettuare il provisioning da file IaC AWS Proton compilati, è necessario rispondere alle AWS Proton pull request. AWS Proton effettua richieste pull dopo azioni di creazione e aggiornamento dell'ambiente e del servizio. Per ulteriori informazioni, consultare AWS Proton ambienti e Servizi AWS Proton.

  • Per effettuare il provisioning di una pipeline da file IAc AWS Proton compilati, è necessario creare un repository di pipeline CI/CD.

  • L'automazione del provisioning basata su pull request deve includere passaggi per notificare eventuali AWS Proton modifiche allo stato delle risorse assegnate. AWS Proton Puoi usare l'API. AWS Proton NotifyResourceDeploymentStatusChange

  • Non è possibile distribuire servizi, pipeline e componenti creati da file CloudFormation IAc in ambienti creati da file Terraform IAc.

  • Non è possibile distribuire servizi, pipeline e componenti creati da file Terraform IAc in ambienti creati da file IAc. CloudFormation

Quando prepari i file Terraform IAc per AWS Proton, alleghi dei namespace alle variabili di input, come mostrato negli esempi seguenti. Per ulteriori informazioni, consulta Parametri.

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 }

Infrastruttura compilata come codice

Quando crei un ambiente o un servizio, AWS Proton compila l'infrastruttura come file di codice con console o spec file input. Crea proton.auto.tfvars.json file per proton.resource-type.variables.tf i tuoi input che possono essere utilizzati da Terraform, come mostrato negli esempi seguenti. Questi file si trovano in un repository specificato in una cartella che corrisponde al nome dell'ambiente o dell'istanza del servizio.

L'esempio mostra come AWS Proton includere i tag nella definizione e nei valori delle variabili e come è possibile propagare questi AWS Proton tag alle risorse assegnate. Per ulteriori informazioni, consulta Propagazione dei tag alle risorse assegnate.

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.ttf:

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

Percorsi del repository

AWS Proton utilizza gli input della console o delle specifiche provenienti dall'ambiente o dal servizio, crea azioni per trovare il repository e il percorso in cui collocare i file IAc compilati. I valori di input vengono passati a parametri di input con namespace.

AWS Proton supporta due layout di percorso del repository. Negli esempi seguenti, i percorsi sono denominati in base ai parametri delle risorse con namespace di due ambienti. Ogni ambiente dispone di istanze di servizio di due servizi e le istanze di servizio di uno dei servizi hanno componenti definiti direttamente.

Tipo di risorsa Parametro del nome = Nome risorsa
Ambiente environment.name = "env-prod"
Ambiente environment.name "env-staged"
Servizio service.name "service-one"
  Istanza del servizio service_instance.name "instance-one-prod"
  Istanza del servizio service_instance.name "instance-one-staged"
Servizio service.name "service-two"
  Istanza del servizio service_instance.name "instance-two-prod"
    Componente service_instance.components.default.name "component-prod"
  Istanza del servizio service_instance.name "instance-two-staged"
    Componente service_instance.components.default.name "component-staged"
Layout 1

Se AWS Proton trova il repository specificato con una environments cartella, crea una cartella che include i file IAc compilati e viene denominata con. environment.name

Se AWS Proton trova il repository specificato con una environments cartella che contiene un nome di cartella che corrisponde a un nome di ambiente compatibile con le istanze di servizio, crea una cartella che include i file IAc dell'istanza compilata e viene denominata con. 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

Se AWS Proton trova il repository specificato senza una environments cartella, crea una environment.name cartella in cui collocare i file IAc dell'ambiente compilato.

Se AWS Proton trova il repository specificato con un nome di cartella che corrisponde a un nome di ambiente compatibile con l'istanza di servizio, crea una service_instance.name cartella in cui localizza i file IAc dell'istanza compilata.

/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