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
AWS Proton oferece suporte ao provisionamento autogerenciado para o Terraform IaC.
Como o provisionamento autogerenciado funciona com os arquivos de pacote de modelos do Terraform IaC:
-
Ao criar um ambiente a partir de pacotes de modelos do Terraform, AWS Proton compila seus
.tf
arquivos com parâmetros de console ouspec file
de entrada. -
Ele faz uma solicitação pull para mesclar os arquivos IaC compilados no repositório que você registrou no AWS Proton.
-
Se a solicitação for aprovada, AWS Proton aguarda o status de provisionamento fornecido por você.
-
Se a solicitação for rejeitada, a criação do ambiente será cancelada.
-
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.
e resource-type
.variables.tfproton.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" |