

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Démarrer avec la prise en charge de Terraform par la CLI  AWS SAM
<a name="gs-terraform-support"></a>

Cette rubrique explique comment commencer à utiliser l'interface de ligne de AWS Serverless Application Model commande (AWS SAMCLI) avecTerraform.

Pour soumettre des commentaires et des demandes de fonctionnalités, créez un [Ticket GitHub](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform).

**Topics**
+ [AWS SAMCLITerraformprérequis](#gs-terraform-support-prerequisites)
+ [Utilisation des commandes de la CLI  AWS SAM avec Terraform](#gs-terraform-support-using)
+ [Configuration pour les projets Terraform](#gs-terraform-support-projects)
+ [Configuration pour Terraform Cloud](#gs-terraform-support-cloud)

## AWS SAMCLITerraformprérequis
<a name="gs-terraform-support-prerequisites"></a>

Remplissez toutes les conditions préalables pour commencer à utiliser la CLI  AWS SAM avec vos projets Terraform.

1. 

**Installer ou mettre à niveau la CLI  AWS SAM**

   Pour vérifier si la CLI  AWS SAM est installée, procédez comme suit :

   ```
   $ sam --version
   ```

   Si la CLI  AWS SAM est déjà installée, la version sera affichée. Pour procéder à une mise à niveau vers la version la plus récente, consultez [Mise à niveau de la CLI  AWS SAM en cours](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

   Pour obtenir des instructions sur l'installation de la CLI  AWS SAM ainsi que sur tous ses conditions préalables, consultez [Installer la CLI  AWS SAM](install-sam-cli.md).

1. 

**Installer Terraform**

   Pour vérifier si Terraform est installé, procédez comme suit :

   ```
   $ terraform -version
   ```

   Pour l'installer Terraform, veuillez consulter la section [Installer Terraform](https://developer.hashicorp.com/terraform/downloads) dans le *registre Terraform* (langue française non garantie).

1. 

**Installer Docker pour les tests locaux**

   La CLI  AWS SAM nécessite Docker pour les tests locaux. Pour installer Docker, consultez [Installation de Docker pour une utilisation avec la CLI  AWS SAM](install-docker.md).

## Utilisation des commandes de la CLI  AWS SAM avec Terraform
<a name="gs-terraform-support-using"></a>

Lorsque vous exécutez une commande CLI  AWS SAM prise en charge, utilisez l'option `--hook-name` et indiquez la valeur `terraform`. Voici un exemple :

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

Vous pouvez configurer cette option dans votre fichier de configuration de la CLI  AWS SAM avec ce qui suit :

```
hook_name = "terraform"
```

## Configuration pour les projets Terraform
<a name="gs-terraform-support-projects"></a>

Suivez les étapes décrites dans cette rubrique pour utiliser la CLI  AWS SAM avec des projets Terraform.

Aucune configuration supplémentaire n'est requise si vous créez vos AWS Lambda artefacts en dehors de votre Terraform projet. [Utilisation de la CLI  AWS SAM avec Terraform pour le débogage et les tests locaux](using-samcli-terraform.md)Reportez-vous à la section pour commencer à utiliser le AWS SAMCLI.

Si vous créez vos artefacts Lambda dans le cadre de vos projets Terraform, vous devez faire ce qui suit :

1. Installation de la version Python 3.8 ou ultérieure

1. Installez l'outil Make.

1. Définissez la logique de création de vos artefacts Lambda dans votre projet Terraform.

1. Définissez une ressource `sam metadata` pour informer la CLI  AWS SAM de votre logique de création.

1. Utilisez la AWS SAMCLI `sam build` commande pour créer vos artefacts Lambda.

### Installation de la version Python 3.8 ou ultérieure
<a name="gs-terraform-support-projects-python"></a>

PythonUne version 3.8 ou plus récente est requise pour être utilisée avec le AWS SAMCLI. Lorsque vous exécutez `sam build`, la CLI  AWS SAM génère des fichiers `makefiles` qui contiennent des commandes Python pour créer vos artefacts Lambda.

Pour obtenir des instructions d'installation, veuillez consulter la rubrique [Téléchargement de Python](https://wiki.python.org/moin/BeginnersGuide/Download) (langue française non garantie) dans le *Guide du débutant* de Python.

Vérifiez que Python 3.8 ou version ultérieure est ajouté au chemin de votre machine en exécutant :

```
$ python --version
```

La sortie doit afficher une version de Python 3.8 ou plus récente.

### Installer l'outil Make
<a name="gs-terraform-support-projects-make"></a>

GNU [Make](https://www.gnu.org/software/make/) est un outil qui contrôle la génération d'exécutables et d'autres fichiers non sources pour votre projet. La CLI  AWS SAM crée des fichiers `makefiles` qui dépendent de cet outil pour créer vos artefacts Lambda.

Si la Make n'est pas installée sur votre ordinateur local, installez-la avant de continuer.

Pour Windows, vous pouvez l'installer à l'aide de [Chocolatey](https://chocolatey.org/). PPour les instructions, consultez la rubrique [Utilisation de Chocolatey](https://www.technewstoday.com/install-and-use-make-in-windows/#using-chocolatey) dans le guide *Comment installer et utiliser « Make » sous Windows*

### Définir la logique de création des artefacts Lambda
<a name="gs-terraform-support-projects-logic"></a>

Utilisez le type de ressource Terraform `null_resource` pour définir votre logique de création Lambda. Voici un exemple qui utilise un script de création personnalisé pour créer une fonction 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"
    }
}
```

### Définir une ressource sam metadata
<a name="gs-terraform-support-projects-metadata"></a>

La ressource `sam metadata` est un type de ressource Terraform `null_resource` qui fournit à la CLI  AWS SAM les informations dont elle a besoin pour localiser vos artefacts Lambda. Chaque fonction ou couche Lambda de votre projet nécessite une ressource  `sam metadata` unique. Pour en savoir plus sur ce type de ressource, veuillez consulter la section [null\$1resource](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) dans le *registre Terraform* (langue française non garantie).

**Pour définir une ressource sam metadata**

1. Donnez à votre ressource un nom commençant par `sam_metadata_` pour l'identifier comme étant une ressource sam metadata.

1. Définissez les propriétés de votre artefact Lambda dans le bloc `triggers` de votre ressource.

1. Spécifiez votre `null_resource` qui contient votre logique de création Lambda avec l'argument `depends_on`.

   Voici un exemple de modèle :

   ```
   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
     ]
   }
   ```

   Voici un exemple de ressource `sam metadata` :

   ```
   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
       ]
   }
   ```

Le contenu de votre ressource `sam metadata` variera en fonction du type de ressource Lambda (fonction ou couche) et du type d'empaquetage (ZIP ou image). Pour plus d'informations et d'exemples, consultez [ressource de métadonnées sam](terraform-sam-metadata.md).

Lorsque vous configurez une ressource `sam metadata` et utilisez une commande CLI  AWS SAM prise en charge, la CLI  AWS SAM génère le fichier de métadonnées avant d'exécuter la commande CLI  AWS SAM. Une fois que vous avez généré ce fichier, vous pouvez utiliser l'option `--skip-prepare-infra` associée aux futures commandes CLI  AWS SAM pour ignorer le processus de génération de métadonnées et gagner du temps. Cette option ne doit être utilisée que si vous n'avez apporté aucune modification à l'infrastructure, telle que la création de nouvelles fonctions Lambda ou de nouveaux points de terminaison d'API.

### Utiliser la CLI  AWS SAM pour créer vos artefacts Lambda
<a name="gs-terraform-support-projects-build"></a>

Utilisez la AWS SAMCLI `sam build` commande pour créer vos artefacts Lambda. Lorsque vous exécutez `sam build`, la CLI  AWS SAM effectue les opérations suivantes :

1. Recherche des ressources `sam metadata` dans votre projet Terraform pour connaître et localiser vos ressources Lambda.

1. Lance votre logique de création Lambda pour créer vos artefacts Lambda.

1. Crée un `.aws-sam` répertoire qui organise votre Terraform projet à utiliser avec les AWS SAMCLI `sam local` commandes.

**Pour créer à l'aide de la fonction de création SAM**

1. À partir du répertoire contenant votre module racine Terraform, procédez comme suit :

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

1. Pour créer une fonction ou une couche Lambda spécifique, exécutez les actions suivantes

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

   L'identifiant de la ressource Lambda peut être le nom de la fonction Lambda ou l'adresse complète de la ressource Terraform, par exemple `aws_lambda_function.list_books` ou `module.list_book_function.aws_lambda_function.this[0]`.

Si le code source de votre fonction ou d'autres fichiers de configuration Terraform se trouvent en dehors du répertoire contenant votre module racine Terraform, vous devez spécifier l'emplacement. Utilisez l'option `--terraform-project-root-path` pour spécifier le chemin absolu ou relatif vers le répertoire de premier niveau contenant ces fichiers. Voici un exemple :

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

#### Créer à l'aide d'un conteneur
<a name="gs-terraform-support-projects-build-container"></a>

Lorsque vous exécutez la AWS SAMCLI `sam build` commande, vous pouvez configurer le AWS SAMCLI pour créer votre application à l'aide d'un Docker conteneur local.

**Note**  
Vous devez avoir installé et configuré Docker. Pour obtenir des instructions, veuillez consulter [Installation de Docker pour une utilisation avec la CLI  AWS SAM](install-docker.md).

**Pour créer à l'aide d'un conteneur**

1. Créez un `Dockerfile` contenant les outils Terraform, Python et Make. Vous devez également inclure le moteur d'exécution de votre fonction Lambda.

   Voici un exemple de `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. Utilisez [https://docs.docker.com/engine/reference/commandline/build/](https://docs.docker.com/engine/reference/commandline/build/) pour créer votre image Docker.

   Voici un exemple :

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

1. Exécutez la AWS SAMCLI `sam build` commande avec les `--build-image` options `--use-container` et.

   Voici un exemple :

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

### Étapes suivantes
<a name="gs-terraform-support-projects-next"></a>

Pour commencer à utiliser la CLI  AWS SAM avec vos projets Terraform, consultez [Utilisation de la CLI  AWS SAM avec Terraform pour le débogage et les tests locaux](using-samcli-terraform.md).

## Configuration pour Terraform Cloud
<a name="gs-terraform-support-cloud"></a>

Nous vous recommandons d'utiliser une Terraform v1.6.0 version plus récente. Si vous utilisez une ancienne version, vous devez générer un fichier de Terraform plan localement. Le fichier de plan local fournit les AWS SAM CLI informations dont il a besoin pour effectuer des tests et un débogage locaux.

**Pour générer un fichier de plan local**
**Note**  
Ces étapes ne sont pas obligatoires pour les versions ultérieures Terraform v1.6.0 ou ultérieures. Pour commencer à utiliser le AWS SAM CLI withTerraform Cloud, voir[Utilisation de la CLI  AWS SAM avec Terraform](using-samcli-terraform.md).

1. **Configurer un jeton d'API** : le type de jeton dépend de votre niveau d'accès. Pour en savoir plus, consultez la rubrique [Jetons d'API](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens) dans la *documentation Terraform Cloud*.

1. **Définisser la variable d'environnement de votre jeton d'API** : voici un exemple tiré de la ligne de commande :

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

1. **Obtenez votre identifiant d'exécution** : depuis la Terraform Cloud console, recherchez l'identifiant d'Terraformexécution de l'exécution que vous souhaitez utiliser avec le AWS SAMCLI.

   L'identifiant d'exécution se trouve dans la piste de navigation de votre exécution.  
![\[Piste de navigation dans Terraform Cloud qui affiche l'identifiant d'exécution.\]](http://docs.aws.amazon.com/fr_fr/serverless-application-model/latest/developerguide/images/terraform-01.png)

1. **Récupérer le fichier de plan** : à l'aide de votre jeton d'API, obtenez votre fichier de plan local. Voici un exemple tiré de la ligne de commande :

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

Vous êtes maintenant prêt à utiliser la CLI  AWS SAM avec Terraform Cloud. Lorsque vous utilisez une commande CLI  AWS SAM prise en charge, utilisez l'option `--terraform-plan-file` pour spécifier le nom et le chemin de votre fichier de plan local. Voici un exemple :

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

Voici un exemple utilisant la commande `sam local start-api` :

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

*Pour un exemple d'application que vous pouvez utiliser avec ces exemples, consultez [api\$1gateway\$1v2\$1tf\$1cloud](https://github.com/aws-samples/aws-sam-terraform-examples/tree/main/ga/api_gateway_v2_tf_cloud) dans le référentiel GitHub aws-samples*.

### Étapes suivantes
<a name="gs-terraform-support-cloud-next"></a>

Pour commencer à utiliser la CLI  AWS SAM avec Terraform Cloud, consultez [Utilisation de la CLI  AWS SAM avec Terraform pour le débogage et les tests locaux](using-samcli-terraform.md).