

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à.

# Guida introduttiva Terraform al supporto per AWS SAMCLI
<a name="gs-terraform-support"></a>

Questo argomento spiega come iniziare a utilizzare l'interfaccia a riga di AWS Serverless Application Model comando (AWS SAMCLI) conTerraform.

Per fornire feedback e inviare richieste di funzionalità, crea un [GitHubproblema](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform).

**Topics**
+ [AWS SAMCLITerraformprerequisiti](#gs-terraform-support-prerequisites)
+ [Utilizzo dei AWS SAMCLI comandi con Terraform](#gs-terraform-support-using)
+ [Configurazione per Terraform progetti](#gs-terraform-support-projects)
+ [Configurazione di Terraform Cloud](#gs-terraform-support-cloud)

## AWS SAMCLITerraformprerequisiti
<a name="gs-terraform-support-prerequisites"></a>

Completa tutti i prerequisiti per iniziare a utilizzarlo AWS SAMCLI con i tuoi Terraform progetti.

1. 

**Installa o aggiorna il AWS SAMCLI**

   Per verificare se è AWS SAMCLI installato, esegui quanto segue:

   ```
   $ sam --version
   ```

   Se AWS SAMCLI è già installato, l'output mostrerà una versione. Per eseguire l'aggiornamento alla versione più recente, vedere[Aggiornamento del AWS SAMCLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

   Per istruzioni sull'installazione di AWS SAMCLI e tutti i relativi prerequisiti, vedere. [Installa il AWS SAMCLI](install-sam-cli.md)

1. 

**Installazione di Terraform**

   Per verificare se l'Terraforminstallazione è stata eseguita, esegui quanto segue:

   ```
   $ terraform -version
   ```

   Per l'installazioneTerraform, consulta [Installa Terraform](https://developer.hashicorp.com/terraform/downloads) nel *Terraformregistro*.

1. 

**Installa Docker per il test locale**

   I AWS SAMCLI requisiti Docker per i test locali. Per l'installazioneDocker, vedere[Installazione di Docker da utilizzare con AWS SAMCLI](install-docker.md).

## Utilizzo dei AWS SAMCLI comandi con Terraform
<a name="gs-terraform-support-using"></a>

Quando esegui un AWS SAMCLI comando supportato, usa l'`--hook-name`opzione e fornisci il `terraform` valore. Di seguito è riportato un esempio:

```
$ sam local invoke --hook-name terraform
```

Puoi configurare questa opzione nel tuo file AWS SAMCLI di configurazione con quanto segue:

```
hook_name = "terraform"
```

## Configurazione per Terraform progetti
<a name="gs-terraform-support-projects"></a>

Completa i passaggi descritti in questo argomento per utilizzarlo AWS SAMCLI con i Terraform progetti.

Non è richiesta alcuna configurazione aggiuntiva se costruite gli AWS Lambda artefatti all'esterno del Terraform progetto. Vedi [Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali](using-samcli-terraform.md) per iniziare a usare. AWS SAMCLI

Se costruisci i tuoi artefatti Lambda all'interno Terraform dei tuoi progetti, devi fare quanto segue:

1. Installa 3.8 Python o versione successiva

1. Installa lo strumento. Make

1. Definisci la logica di costruzione degli artefatti Lambda all'interno del tuo progetto. Terraform

1. Definisci una `sam metadata` risorsa per informarli sulla tua logica AWS SAMCLI di compilazione.

1. Usa il AWS SAMCLI `sam build` comando per creare i tuoi artefatti Lambda.

### Installa 3.8 Python o versione successiva
<a name="gs-terraform-support-projects-python"></a>

Python3.8 o versione successiva è richiesta per l'utilizzo con. AWS SAMCLI Quando esegui`sam build`, le AWS SAMCLI creazioni `makefiles` che contengono Python comandi per creare i tuoi artefatti Lambda.

*Per istruzioni di installazione, consulta [Downloading Python in Python's](https://wiki.python.org/moin/BeginnersGuide/Download) Beginners Guide.*

Verifica che Python 3.8 o versione successiva sia aggiunto al percorso del tuo computer eseguendo:

```
$ python --version
```

L'output dovrebbe mostrare una versione di Python 3.8 o successiva.

### Installa lo strumento Make
<a name="gs-terraform-support-projects-make"></a>

GNU[Make](https://www.gnu.org/software/make/)è uno strumento che controlla la generazione di eseguibili e altri file non sorgente per il progetto. Le AWS SAMCLI creazioni `makefiles` che si affidano a questo strumento per creare i tuoi artefatti Lambda.

Se non lo avete Make installato sul computer locale, installatelo prima di procedere.

Per Windows, puoi installarlo usando [Chocolatey](https://chocolatey.org/). Per istruzioni, vedi [Uso di Chocolatey](https://www.technewstoday.com/install-and-use-make-in-windows/#using-chocolatey) in *Come installare e usare «Make*» in Windows

### Definisci la logica di compilazione degli artefatti Lambda
<a name="gs-terraform-support-projects-logic"></a>

Usa il tipo di `null_resource` Terraform risorsa per definire la logica di compilazione Lambda. Di seguito è riportato un esempio che utilizza uno script di compilazione personalizzato per creare una funzione Lambda.

```
resource "null_resource" "build_lambda_function" {
    triggers = {
        build_number = "${timestamp()}" 
    }

    provisioner "local-exec" {
        command =  substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function"
    }
}
```

### Definire una risorsa sam metadata
<a name="gs-terraform-support-projects-metadata"></a>

La `sam metadata` risorsa è un tipo di `null_resource` Terraform risorsa che fornisce AWS SAMCLI le informazioni necessarie per localizzare gli artefatti Lambda. È necessaria una `sam metadata` risorsa unica per ogni funzione o layer Lambda del progetto. *Per ulteriori informazioni su questo tipo di risorsa, consulta [null\$1resource](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) nel registro. Terraform*

**Per definire una risorsa sam metadata**

1. Assegna un nome `sam_metadata_` alla risorsa iniziando con per identificare la risorsa come sam metadata risorsa.

1. Definisci le proprietà degli artefatti Lambda all'interno del `triggers` blocco della risorsa.

1. Specificate il `null_resource` che contiene la logica di compilazione Lambda con l'`depends_on`argomento.

   Di seguito è riportato un modello di esempio:

   ```
   resource "null_resource" "sam_metadata_..." {
     triggers = {
       resource_name = resource_name
       resource_type = resource_type
       original_source_code = original_source_code
       built_output_path = built_output_path
     }
     depends_on = [
       null_resource.build_lambda_function # ref to your build logic
     ]
   }
   ```

   Di seguito è riportato un esempio di `sam metadata` risorsa:

   ```
   resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" {
       triggers = {
           resource_name = "aws_lambda_function.publish_book_review"
           resource_type = "ZIP_LAMBDA_FUNCTION"
           original_source_code = "${local.lambda_src_path}"
           built_output_path = "${local.building_path}/${local.lambda_code_filename}"
       }
       depends_on = [
           null_resource.build_lambda_function
       ]
   }
   ```

Il contenuto della `sam metadata` risorsa varierà in base al tipo di risorsa Lambda (funzione o layer) e al tipo di pacchetto (ZIP o immagine). Per ulteriori informazioni, oltre ad esempi, vedere[risorsa di metadati sam](terraform-sam-metadata.md).

Quando configuri una `sam metadata` risorsa e utilizzi un AWS SAMCLI comando supportato, AWS SAMCLI genererà il file di metadati prima di eseguire il AWS SAMCLI comando. Dopo aver generato questo file, puoi utilizzare l'`--skip-prepare-infra`opzione con AWS SAMCLI i comandi futuri per saltare il processo di generazione dei metadati e risparmiare tempo. Questa opzione deve essere utilizzata solo se non hai apportato modifiche all'infrastruttura, come la creazione di nuove funzioni Lambda o nuovi endpoint API.

### Usa il AWS SAMCLI per costruire i tuoi artefatti Lambda
<a name="gs-terraform-support-projects-build"></a>

Usa il AWS SAMCLI `sam build` comando per creare i tuoi artefatti Lambda. Quando esegui`sam build`, AWS SAMCLI esegue le seguenti operazioni:

1. Cerca `sam metadata` risorse nel tuo Terraform progetto per conoscere e localizzare le tue risorse Lambda.

1. Avvia la logica di compilazione Lambda per creare gli artefatti Lambda.

1. Crea una `.aws-sam` directory che organizza il Terraform progetto da utilizzare con i comandi. AWS SAMCLI `sam local`

**Per creare con sam build**

1. Dalla directory contenente il modulo Terraform root, esegui quanto segue:

   ```
   $ sam build --hook-name terraform
   ```

1. Per creare una funzione o un layer Lambda specifico, esegui quanto segue

   ```
   $ sam build --hook-name terraform lambda-resource-id
   ```

   L'ID della risorsa Lambda può essere il nome della funzione Lambda o l'indirizzo completo della Terraform risorsa, ad esempio o. `aws_lambda_function.list_books` `module.list_book_function.aws_lambda_function.this[0]`

Se il codice sorgente della funzione o altri file di Terraform configurazione si trovano all'esterno della directory contenente il modulo Terraform root, è necessario specificare la posizione. Utilizzate l'`--terraform-project-root-path`opzione per specificare il percorso assoluto o relativo della directory di primo livello contenente questi file. Di seguito è riportato un esempio:

```
$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo
```

#### Crea usando un contenitore
<a name="gs-terraform-support-projects-build-container"></a>

Quando si esegue il AWS SAMCLI `sam build` comando, è possibile configurarlo AWS SAMCLI per creare l'applicazione utilizzando un Docker contenitore locale.

**Nota**  
È necessario averlo Docker installato e configurato. Per istruzioni, consulta [Installazione di Docker da utilizzare con AWS SAMCLI](install-docker.md).

**Per creare utilizzando un contenitore**

1. Crea un `Dockerfile` file che contenga gli Make strumenti TerraformPython, e. Dovresti includere anche il runtime della funzione Lambda.

   Di seguito è riportato un esempio`Dockerfile`:

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:2
   
   RUN yum -y update \
       && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
       less libcurl-devel openssl openssl-devel readline-devel xz-devel \
       zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
       && rm -rf /var/cache/yum
   
   RUN yum -y install make \
       && yum -y install zip
   
   RUN yum install -y yum-utils \
       && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
       && yum -y install terraform \
       && terraform --version
   
   # AWS Lambda Builders
   RUN amazon-linux-extras enable python3.8
   RUN yum clean metadata && yum -y install python3.8
   RUN curl -L get-pip.io | python3.8
   RUN pip3 install aws-lambda-builders
   RUN ln -s /usr/bin/python3.8 /usr/bin/python3
   RUN python3 --version
   
   VOLUME /project
   WORKDIR /project
   
   ENTRYPOINT ["sh"]
   ```

1. [https://docs.docker.com/engine/reference/commandline/build/](https://docs.docker.com/engine/reference/commandline/build/)Usalo per creare la tua Docker immagine.

   Di seguito è riportato un esempio:

   ```
   $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
   ```

1. Esegui il AWS SAMCLI `sam build` comando con le `--build-image` opzioni `--use-container` and.

   Di seguito è riportato un esempio:

   ```
   $ sam build --use-container --build-image terraform-build:v1
   ```

### Fasi successive
<a name="gs-terraform-support-projects-next"></a>

Per iniziare a utilizzarlo AWS SAMCLI con i tuoi Terraform progetti, consulta[Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali](using-samcli-terraform.md).

## Configurazione di Terraform Cloud
<a name="gs-terraform-support-cloud"></a>

Ti consigliamo di utilizzare Terraform v1.6.0 una versione più recente. Se si utilizza una versione precedente, è necessario generare un file del Terraform piano localmente. Il file del piano locale fornisce AWS SAM CLI le informazioni necessarie per eseguire test e debug locali.

**Per generare un file di piano locale**
**Nota**  
Questi passaggi non sono necessari Terraform v1.6.0 o più recenti. Per iniziare a usare AWS SAM CLI withTerraform Cloud, consulta[ AWS SAMCLIUsando con Terraform](using-samcli-terraform.md).

1. **Configura un token API**: il tipo di token dipenderà dal tuo livello di accesso. Per ulteriori informazioni, consulta [API Tokens](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens) nella *Terraform Clouddocumentazione*.

1. **Imposta la variabile di ambiente del token API**: di seguito è riportato un esempio tratto dalla riga di comando:

   ```
   $ export TOKEN="<api-token-value>"
   ```

1. **Ottieni il tuo Run ID**: dalla Terraform Cloud console, individua l'ID di esecuzione per la Terraform corsa che desideri utilizzare con AWS SAMCLI.

   L'ID di corsa si trova nel percorso breadcrumb della corsa.  
![\[Percorso Breadcrumb in cui viene visualizzato l'ID di corsa. Terraform Cloud\]](http://docs.aws.amazon.com/it_it/serverless-application-model/latest/developerguide/images/terraform-01.png)

1. **Recupera il file del piano**: utilizzando il token API, ottieni il file del piano locale. Di seguito è riportato un esempio tratto dalla riga di comando:

   ```
   curl \
      --header "Authorization: Bearer $TOKEN" \
      --header "Content-Type: application/vnd.api+json" \
      --location \
      https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \
      > custom_plan.json
   ```

Ora sei pronto per usare AWS SAMCLI conTerraform Cloud. Quando utilizzate un AWS SAMCLI comando supportato, utilizzate l'`--terraform-plan-file`opzione per specificare il nome e il percorso del file del piano locale. Di seguito è riportato un esempio:

```
$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json
```

Di seguito è riportato un esempio di utilizzo del `sam local start-api` comando:

```
$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json
```

*Per un'applicazione di esempio da utilizzare con questi esempi, consulta [api\$1gateway\$1v2\$1tf\$1cloud nel repository aws-samples](https://github.com/aws-samples/aws-sam-terraform-examples/tree/main/ga/api_gateway_v2_tf_cloud). GitHub*

### Fasi successive
<a name="gs-terraform-support-cloud-next"></a>

Per iniziare a usare AWS SAMCLI withTerraform Cloud, consulta[Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali](using-samcli-terraform.md).