Arquivos Terraform IaC - AWS Proton

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Arquivos Terraform IaC

Aprenda a usar a infraestrutura do Terraform como arquivos de código (IaC) com. AWS ProtonO Terraform é um mecanismo IaC de código aberto amplamente usado que foi desenvolvido por. HashiCorp Os módulos do Terraform são desenvolvidos na linguagem HashiCorp HCL e oferecem suporte a vários provedores de infraestruturas de back-end, incluindo a Amazon Web Services.

AWS Proton oferece suporte ao provisionamento autogerenciado para o Terraform IaC.

Para obter um exemplo completo de um repositório de provisionamento que responde a pull requests e implementa o provisionamento de infraestrutura, consulte o modelo de automação do Terraform Actions para ver mais. OpenSource GitHub AWS Proton GitHub

Como o provisionamento autogerenciado funciona com os arquivos de pacote de modelos do Terraform IaC:
  1. Ao criar um ambiente a partir de pacotes de modelos do Terraform, AWS Proton compila seus .tf arquivos com parâmetros de console ou spec file de entrada.

  2. Ele faz uma solicitação pull para mesclar os arquivos IaC compilados no repositório que você registrou no AWS Proton.

  3. Se a solicitação for aprovada, AWS Proton aguarda o status de provisionamento fornecido por você.

  4. Se a solicitação for rejeitada, a criação do ambiente será cancelada.

  5. Se o tempo limite do pull request expirar, a criação do ambiente não será concluída.

AWS Proton com as considerações do Terraform IaC:
  • AWS Proton não gerencia seu provisionamento do Terraform.

  • Você deve registrar um repositório de provisionamento com. AWS Proton AWS Proton faz pull requests nesse repositório.

  • Você deve criar uma CodeStar conexão para se conectar AWS Proton ao seu repositório de provisionamento.

  • Para provisionar a partir de arquivos IaC AWS Proton compilados, você deve responder às AWS Proton pull requests. AWS Proton faz pull requests após as ações de criação e atualização do ambiente e do serviço. Para ter mais informações, consulte AWS Proton ambientes e Serviços da AWS Proton.

  • Para provisionar um pipeline a partir de arquivos IaC AWS Proton compilados, você deve criar um repositório de pipeline de CI/CD.

  • Sua automação de provisionamento baseada em pull request deve incluir etapas para notificar qualquer alteração no AWS Proton status do recurso provisionado. AWS Proton Você pode usar a AWS Proton NotifyResourceDeploymentStatusChange API.

  • Você não pode implantar serviços, pipelines e componentes criados a partir de arquivos CloudFormation IaC em ambientes criados a partir de arquivos do Terraform IaC.

  • Você não pode implantar serviços, pipelines e componentes criados a partir de arquivos do Terraform IaC em ambientes criados a partir de CloudFormation arquivos IaC.

Ao preparar seus arquivos do Terraform IaC para AWS Proton, você anexa namespaces às suas variáveis de entrada, conforme mostrado nos exemplos a seguir. Para obter mais informações, consulte Parâmetros.

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 }

Infraestrutura compilada como código

Quando você cria um ambiente ou serviço, AWS Proton compila sua infraestrutura como arquivos de código com console ou spec file entradas. Ele cria arquivos proton.resource-type.variables.tf e proton.auto.tfvars.json para suas entradas, os quais podem ser usados pelo Terraform, conforme mostrado nos exemplos a seguir. Esses arquivos estão localizados em um repositório especificado em uma pasta que corresponde ao nome do ambiente ou da instância do serviço.

O exemplo mostra como AWS Proton inclui tags na definição e nos valores das variáveis e como você pode propagar essas AWS Proton tags para recursos provisionados. Para ter mais informações, consulte Propagação de tags para recursos provisionados.

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

Caminhos do repositório

AWS Proton usa entradas de console ou especificação de ações de criação de ambiente ou serviço para encontrar o repositório e o caminho onde estão os arquivos IaC compilados. Os valores de entrada são passados para parâmetros de entrada com namespace.

AWS Proton suporta dois layouts de caminho de repositório. Nos exemplos a seguir, os caminhos são nomeados pelos parâmetros de recursos com namespace de dois ambientes. Cada ambiente tem instâncias de serviço de dois serviços, e as instâncias de serviço de um dos serviços têm componentes diretamente definidos.

Tipo de recurso Parâmetro de nome = Nome do recurso
Ambiente environment.name = "env-prod"
Ambiente environment.name "env-staged"
Serviço service.name "service-one"
  Instância de serviço service_instance.name "instance-one-prod"
  Instância de serviço service_instance.name "instance-one-staged"
Serviço service.name "service-two"
  Instância de serviço service_instance.name "instance-two-prod"
    Componente service_instance.components.default.name "component-prod"
  Instância de serviço service_instance.name "instance-two-staged"
    Componente service_instance.components.default.name "component-staged"
Layout 1

Se AWS Proton encontrar o repositório especificado com uma environments pasta, ele cria uma pasta que inclui os arquivos IaC compilados e é nomeada com o. environment.name

Se AWS Proton encontrar o repositório especificado com uma environments pasta que contém um nome de pasta que corresponde ao nome de ambiente compatível com a instância de serviço, ele cria uma pasta que inclui os arquivos IaC da instância compilada e é nomeada com o. 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 encontrar o repositório especificado sem uma environments pasta, ele cria uma environment.name pasta onde localiza os arquivos IaC do ambiente compilado.

Se AWS Proton encontrar o repositório especificado com um nome de pasta que corresponda ao nome do ambiente compatível com a instância de serviço, ele cria uma service_instance.name pasta na qual localiza os arquivos IaC da instância compilada.

/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