

Aviso de fim do suporte: em 7 de outubro de 2026, AWS encerrará o suporte para AWS Proton. Depois de 7 de outubro de 2026, você não poderá mais acessar o AWS Proton console ou os AWS Proton recursos. Sua infraestrutura implantada permanecerá intacta. Para obter mais informações, consulte o Guia [AWS Proton de descontinuação e migração de serviços](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html).

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
<a name="ag-infrastructure-tmp-files-terraform"></a>

Aprenda a usar a infraestrutura do Terraform como arquivos de código (IaC) com. AWS Proton[O Terraform](https://www.terraform.io/) é um mecanismo IaC de código aberto amplamente usado que foi desenvolvido por. [HashiCorp](https://www.hashicorp.com/) 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](ag-works-prov-methods.md#ag-works-prov-methods-self) 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](https://github.com/aws-samples/aws-proton-terraform-github-actions-sample) GitHub

**Como o provisionamento autogerenciado funciona com os arquivos de pacote de modelos do Terraform IaC:**

1. Ao [criar um ambiente](ag-create-env.md) a partir de pacotes de modelos do Terraform, AWS Proton compila seus `.tf` arquivos com parâmetros de console ou `spec file` de entrada.

1. Ele faz uma solicitação pull para mesclar os arquivos IaC compilados no [repositório que você registrou no AWS Proton](ag-create-repo.md). 

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

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

1. 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](ag-create-repo.md). AWS Proton AWS Proton faz pull requests nesse repositório.
+ Você deve [criar uma CodeStar conexão](setting-up-for-service.md#setting-up-vcontrol) 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 obter mais informações, consulte [AWS Proton ambientes](ag-environments.md) e [AWS Proton serviços](ag-services.md).
+ Para provisionar um pipeline a partir de arquivos IaC AWS Proton compilados, você deve [criar um repositório de CI/CD pipeline](setting-up-for-service.md#setting-up-pr-repo).
+ Sua automação de provisionamento baseada em pull request deve incluir etapas para notificar sobre qualquer alteração no AWS Proton status do recurso provisionado. AWS Proton Você pode usar a AWS Proton [NotifyResourceDeploymentStatusChange API](https://docs.aws.amazon.com/proton/latest/APIReference/API_NotifyResourceDeploymentStatusChange.html).
+ 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](parameters.md).

## Exemplo 1: arquivo Terraform IaC do AWS Proton ambiente
<a name="ag-env-tform-example"></a>

```
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
<a name="compiled-tform"></a>

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 obter mais informações, consulte [Propagação de tags para recursos provisionados](resources.md#auto-tags-prop).

### Exemplo 2: arquivos IaC compilados para um ambiente chamado “dev”.
<a name="ag-compiled-example"></a>

**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
<a name="repo-dir"></a>

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.](parameters.md)

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.

<a name="limits-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/proton/latest/userguide/ag-infrastructure-tmp-files-terraform.html)

------
#### [ 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
```

------