

Avviso di fine del supporto: il 7 ottobre 2026, AWS terminerà il supporto per AWS Proton. Dopo il 7 ottobre 2026, non potrai più accedere alla AWS Proton console o AWS Proton alle risorse. L'infrastruttura implementata rimarrà intatta. Per ulteriori informazioni, consulta [AWS Proton Service Deprecation](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html) and Migration Guide.

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

Scopri come utilizzare l'infrastruttura Terraform come file di codice (IaC) con. AWS Proton[Terraform](https://www.terraform.io/) è un motore IaC open source ampiamente utilizzato sviluppato da. [HashiCorp](https://www.hashicorp.com/) 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](ag-works-prov-methods.md#ag-works-prov-methods-self) 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](https://github.com/aws-samples/aws-proton-terraform-github-actions-sample) GitHub

**Come funziona il provisioning autogestito con i file bundle di modelli Terraform IAc:**

1. Quando [crei un ambiente](ag-create-env.md) dai pacchetti di modelli Terraform, AWS Proton compila i tuoi file con la console o i parametri di input. `.tf` `spec file`

1. Effettua una richiesta pull per unire i file IAc compilati nel [repository con cui ti sei registrato](ag-create-repo.md). AWS Proton

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

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

1. 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](ag-create-repo.md) con. AWS Proton AWS Proton effettua richieste pull su questo repository.
+ È necessario [creare una CodeStar connessione](setting-up-for-service.md#setting-up-vcontrol) 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](ag-environments.md) e [AWS Proton servizi](ag-services.md).
+ Per effettuare il provisioning di una pipeline da file IAc AWS Proton compilati, è necessario [creare un repository di CI/CD pipeline](setting-up-for-service.md#setting-up-pr-repo).
+ L'automazione del provisioning basata su pull request deve includere passaggi per notificare eventuali modifiche allo stato AWS Proton delle risorse assegnate. AWS Proton [È possibile utilizzare l'API. AWS Proton NotifyResourceDeploymentStatusChange ](https://docs.aws.amazon.com/proton/latest/APIReference/API_NotifyResourceDeploymentStatusChange.html)
+ 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](parameters.md).

## Esempio 1: file Terraform IAc di ambiente AWS Proton
<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
}
```

## Infrastruttura compilata come codice
<a name="compiled-tform"></a>

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 propagarli AWS Proton alle risorse assegnate. Per ulteriori informazioni, consulta [Propagazione dei tag alle risorse assegnate](resources.md#auto-tags-prop).

### Esempio 2: file IAc compilati per un ambiente denominato «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.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
<a name="repo-dir"></a>

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

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 ha istanze di servizio di due servizi e le istanze di servizio di uno dei servizi hanno componenti definiti direttamente.

<a name="limits-table"></a>
<table>
<thead>
  <tr><th>Tipo di risorsa</th><th>Parametro del nome</th><th>=</th><th>Nome risorsa</th></tr>
</thead>
<tbody>
  <tr><td>Ambiente</td><td>environment.name</td><td rowspan="10">=</td><td>"env-prod"</td></tr>
  <tr><td>Ambiente</td><td>environment.name</td><td>"env-staged"</td></tr>
  <tr><td>Servizio</td><td>service.name</td><td>"service-one"</td></tr>
  <tr><td>  Istanza del servizio</td><td>service\_instance.name</td><td>"instance-one-prod"</td></tr>
  <tr><td>  Istanza del servizio</td><td>service\_instance.name</td><td>"instance-one-staged"</td></tr>
  <tr><td>Servizio</td><td>service.name</td><td>"service-two"</td></tr>
  <tr><td>  Istanza del servizio</td><td>service\_instance.name</td><td>"instance-two-prod"</td></tr>
  <tr><td>    Componente</td><td>service\_instance.components.default.name</td><td>"component-prod"</td></tr>
  <tr><td>  Istanza del servizio</td><td>service\_instance.name</td><td>"instance-two-staged"</td></tr>
  <tr><td>    Componente</td><td>service\_instance.components.default.name</td><td>"component-staged"</td></tr>
</tbody>
</table>


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

------