

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Introducción a compatibilidad de Terraform con CLI de AWS SAM
<a name="gs-terraform-support"></a>

En este tema se explica cómo empezar a utilizar la interfaz de línea de AWS Serverless Application Model comandos (AWS SAMCLI) conTerraform.

Para enviar comentarios y solicitudes de características, cree un [Problema de GitHub](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform).

**Topics**
+ [Requisitos previos de Terraform para la CLI de AWS SAM](#gs-terraform-support-prerequisites)
+ [Uso de comandos de la CLI de AWS SAM con Terraform](#gs-terraform-support-using)
+ [Configuración para proyectos de Terraform](#gs-terraform-support-projects)
+ [Configuración para Terraform Cloud](#gs-terraform-support-cloud)

## Requisitos previos de Terraform para la CLI de AWS SAM
<a name="gs-terraform-support-prerequisites"></a>

Completa todos los requisitos previos para empezar a utilizar la CLI de AWS SAM en sus proyectos de Terraform.

1. 

**Instala o actualiza la CLI de AWS SAM**

   Para comprobar si tienes la CLI de AWS SAM instalada, ejecuta lo siguiente:

   ```
   $ sam --version
   ```

   Si la CLI de AWS SAM ya está instalada, el resultado mostrará una versión. Para actualizar a la versión más reciente, consulta [Actualización de AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade).

   Para obtener instrucciones sobre la instalación de la CLI de AWS SAM junto con todos sus requisitos previos, consulta[Instala la AWS SAM CLI](install-sam-cli.md).

1. 

**Instalar Terraform**

   Para comprobar si instalaste Terraform, ejecuta lo siguiente:

   ```
   $ terraform -version
   ```

   Para instalar Terraform, consulta [Instalar Terraform](https://developer.hashicorp.com/terraform/downloads) en el *registro de Terraform*.

1. 

**Instala Docker para realizar el testeo local**

   La CLI de AWS SAM requiere Docker para las pruebas locales. Para instalarDocker, consulta [Instalación de Docker para usarlo con la CLI de AWS SAM](install-docker.md).

## Uso de comandos de la CLI de AWS SAM con Terraform
<a name="gs-terraform-support-using"></a>

Cuando ejecuta un comando compatible con la CLI de AWS SAM, utiliza la opción `--hook-name` y proporcione el valor `terraform`. A continuación, se muestra un ejemplo:

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

Puedes configurar esta opción en su archivo de configuración de la CLI de AWS SAM con lo siguiente:

```
hook_name = "terraform"
```

## Configuración para proyectos de Terraform
<a name="gs-terraform-support-projects"></a>

Completa los pasos de este tema para utilizar la CLI de AWS SAM con proyectos de Terraform.

No se requiere ninguna configuración adicional si crea sus AWS Lambda artefactos fuera de su Terraform proyecto. Consulte [Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales](using-samcli-terraform.md) para empezar a utilizar el AWS SAMCLI.

Si crea los artefactos de Lambda en sus proyectos de Terraform, debes hacer lo siguiente:

1. Instalación de Python 3.8 o posterior

1. Instala la herramienta Make.

1. Define la lógica de creación de artefactos de Lambda en su proyecto de Terraform.

1. Define un recurso `sam metadata` para informar su lógica de compilación a la CLI de AWS SAM.

1. Utilice el AWS SAMCLI `sam build` comando para crear sus artefactos Lambda.

### Instalación de Python 3.8 o posterior
<a name="gs-terraform-support-projects-python"></a>

PythonSe requiere 3.8 o una versión más reciente para su uso con AWS SAMCLI. Cuando se ejecuta `sam build`, la AWS SAM de Python crea `makefiles` que contiene comandos de CLI para crear sus artefactos de Lambda.

Para obtener instrucciones de instalación, consulta la página [Downloading Python](https://wiki.python.org/moin/BeginnersGuide/Download) (Descarga de Python) en la *Guía para principiantes* de Python.

Compruebe que Python 3.8 o una versión posterior esté agregada a la ruta de su máquina ejecutando:

```
$ python --version
```

El resultado debe mostrar una versión de Python 3.8 o posterior.

### Instala la herramienta Make.
<a name="gs-terraform-support-projects-make"></a>

GNU[Make](https://www.gnu.org/software/make/) es una herramienta que controla la generación de ejecutables y otros archivos que no son el origen del proyecto. La CLI de AWS SAM crea `makefiles` que se basa en esta herramienta para crear sus artefactos de Lambda.

Si no has instalado Make en su máquina local, instálalo antes de continuar.

Para Windows, puedes realizar la instalación mediante [Chocolatey](https://chocolatey.org/). Para obtener instrucciones, consulta [Uso de Chocolatey](https://www.technewstoday.com/install-and-use-make-in-windows/#using-chocolatey) en *Cómo instalar y usar “Make” en Windows*

### Define la lógica de construcción de los artefactos de Lambda
<a name="gs-terraform-support-projects-logic"></a>

Utiliza el tipo de recurso `null_resource` Terraform para definir la lógica de compilación de Lambda. El siguiente es un ejemplo que utiliza un script de compilación personalizado para crear una función de 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"
    }
}
```

### Define un recurso sam metadata
<a name="gs-terraform-support-projects-metadata"></a>

El recurso `sam metadata` es un tipo de recurso `null_resource` Terraform que proporciona a la CLI de AWS SAM la información que necesita para localizar los artefactos de Lambda. Se requiere un recurso de `sam metadata` único para cada función o capa de Lambda del proyecto. Para obtener más información sobre este tipo de recurso, consulta [null\$1resource](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) en el *registro de Terraform*.

**Para definir un recurso sam metadata**

1. Asigne un nombre al recurso empezando por `sam_metadata_` para identificar el recurso como un recurso sam metadata.

1. Define las propiedades de sus artefactos Lambda dentro del bloque de `triggers` de tu recurso.

1. Especifica el `null_resource` que contiene la lógica de compilación de Lambda con el argumento `depends_on`.

   La siguiente es una plantilla de ejemplo:

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

   El siguiente es un recurso `sam metadata` de ejemplo:

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

El contenido del recurso `sam metadata` variará según el tipo de recurso de Lambda (función o capa) y el tipo de empaquetado (ZIP o imagen). Para obtener más información y ejemplos, consulta [recurso de metadatos de sam](terraform-sam-metadata.md).

Al configurar un recurso `sam metadata` y utilizar un comando compatible con la CLI de AWS SAM, la CLI de AWS SAM generará el archivo de metadatos antes de ejecutar el comando de la CLI de AWS SAM. Una vez hayas generado este archivo, puedes usar la opción `--skip-prepare-infra` con comandos futuros de la CLI de AWS SAM para omitir el proceso de generación de metadatos y ahorrar tiempo. Esta opción solo debe usarse si no ha realizado ningún cambio en la infraestructura, como la creación de nuevas funciones de Lambda o nuevos puntos de conexión de API.

### Utiliza la CLI de AWS SAM para crear sus artefactos de Lambda.
<a name="gs-terraform-support-projects-build"></a>

Utilice el AWS SAMCLI `sam build` comando para crear sus artefactos Lambda. Cuando se ejecuta `sam build`, la CLI de AWS SAM hace lo siguiente:

1. Busca recursos `sam metadata` en tu proyecto de Terraform para conocer y localizar tus recursos de Lambda.

1. Inicia la lógica de compilación de Lambda para crear sus artefactos de Lambda.

1. Crea un `.aws-sam` directorio que organiza el Terraform proyecto para usarlo con los AWS SAMCLI `sam local` comandos.

**Para crear con sam build**

1. Desde el directorio que contiene el módulo raíz de Terraform, ejecuta lo siguiente:

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

1. Para crear una función o capa de Lambda específica, ejecuta lo siguiente

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

   El ID de recurso de Lambda puede ser el nombre de la función de Lambda o la dirección completa del recurso de Terraform, como `aws_lambda_function.list_books` o `module.list_book_function.aws_lambda_function.this[0]`.

Si el código de origen de la función u otros archivos de configuración de Terraform se encuentran fuera del directorio que contiene el módulo raíz de Terraform, debes especificar la ubicación. Utiliza la opción `--terraform-project-root-path` para especificar la ruta absoluta o relativa al directorio de nivel superior que contiene estos archivos. A continuación, se muestra un ejemplo:

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

#### Creación mediante un contenedor
<a name="gs-terraform-support-projects-build-container"></a>

Al ejecutar el AWS SAMCLI `sam build` comando, puede configurarlo AWS SAMCLI para que compile su aplicación mediante un Docker contenedor local.

**nota**  
Debe tener Docker instalado y configurado. Para obtener instrucciones, consulta [Instalación de Docker para usarlo con la CLI de AWS SAM](install-docker.md).

**Para compilar usando un contenedor**

1. Crea un `Dockerfile` que contenga las herramientas Terraform, Python y Make. También debes incluir el tiempo de ejecución de la función de Lambda.

   A continuación, se muestra un `Dockerfile` de ejemplo:

   ```
   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. Use [https://docs.docker.com/engine/reference/commandline/build/](https://docs.docker.com/engine/reference/commandline/build/) para crear su imagen de Docker.

   A continuación, se muestra un ejemplo:

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

1. Ejecute el AWS SAMCLI `sam build` comando con las `--build-image` opciones `--use-container` y.

   A continuación, se muestra un ejemplo:

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

### Pasos a seguir a continuación
<a name="gs-terraform-support-projects-next"></a>

Para empezar a utilizar la CLI de AWS SAM en sus proyectos de Terraform, consulta [Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales](using-samcli-terraform.md).

## Configuración para Terraform Cloud
<a name="gs-terraform-support-cloud"></a>

Se recomienda usar Terraform v1.6.0 o posterior. Si usa una versión anterior, debes generar un archivo de plan de Terraform de forma local. El archivo del plan local AWS SAM CLI proporciona la información que necesita para realizar las pruebas y la depuración locales.

**Para generar un archivo de plan local**
**nota**  
Estos pasos no son necesarios con Terraform v1.6.0 o posterior. Para empezar a utilizar el AWS SAM CLI withTerraform Cloud, consulte[Uso de la CLI de AWS SAM con Terraform](using-samcli-terraform.md).

1. **Configurar un token de API**: el tipo de token dependerá de su nivel de acceso. Para obtener más información, consulta [Tokens de API](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens) en la *documentación de Terraform Cloud*.

1. **Configurar la variable de entorno del token de la API**: el siguiente es un ejemplo de la línea de comandos:

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

1. **Obtenga su ID de ejecución**: en la Terraform Cloud consola, busque el ID de Terraform ejecución de la ejecución que desee usar con el AWS SAMCLI.

   El ID de ejecución se encuentra en la ruta de navegación del proceso de ejecución.  
![\[Ruta de navegación en Terraform Cloud que muestra el ID de ejecución.\]](http://docs.aws.amazon.com/es_es/serverless-application-model/latest/developerguide/images/terraform-01.png)

1. **Obtener el archivo del plan**: con su token de API, obtengas el archivo del plan local. A continuación, se muestra un ejemplo de la línea de 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
   ```

Ahora ya puedes utilizar la CLI de AWS SAM con Terraform Cloud. Si utilizas un comando compatible con la CLI de AWS SAM, utiliza la opción `--terraform-plan-file` para especificar el nombre y la ruta del archivo del plan local. A continuación, se muestra un ejemplo:

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

A continuación, se muestra un ejemplo con el comando `sam local start-api`:

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

Para ver una aplicación de muestra que pueda usar con estos ejemplos, consulta [api\$1gateway\$1v2\$1tf\$1cloud](https://github.com/aws-samples/aws-sam-terraform-examples/tree/main/ga/api_gateway_v2_tf_cloud) en el *repositorio de GitHub aws-samples*.

### Pasos a seguir a continuación
<a name="gs-terraform-support-cloud-next"></a>

Para comenzar a usar la CLI de AWS SAM con Terraform Cloud,consulta [Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales](using-samcli-terraform.md).