Introducción a compatibilidad de Terraform con CLI de AWS SAM - AWS Serverless Application Model

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

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.

Requisitos previos de Terraform para la CLI de AWS SAM

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

  1. Instale o actualice la CLI de AWS SAM

    Para comprobar si tiene la CLI de AWS SAM instalada, ejecute 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, consulte Actualización de la CLI de AWS SAM.

    Para obtener instrucciones sobre la instalación de la CLI de AWS SAM junto con todos sus requisitos previos, consulteInstale la CLIAWS SAM.

  2. Instalar Terraform

    Para comprobar si instaló Terraform, ejecute lo siguiente:

    $ terraform -version

    Para instalar Terraform, consulte Instalar Terraform en el registro de Terraform.

  3. Instale Docker para realizar pruebas locales

    La CLI de AWS SAM requiere Docker para las pruebas locales. Para instalarDocker, consulte Instalación de Docker para usarlo con la CLI de AWS SAM.

Uso de comandos de la CLI de AWS SAM con Terraform

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

$ sam local invoke --hook-name terraform

Puede 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

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

No se requiere ninguna configuración adicional si construyes tus AWS Lambda artefactos fuera del Terraform proyecto. Consulte Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales para empezar a utilizar el AWS SAMCLI.

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

  1. Instale Python 3.8 o una versión más reciente

  2. Instale la herramienta Make.

  3. Defina la lógica de creación de artefactos de Lambda en su proyecto de Terraform.

  4. Defina un recurso sam metadata para informar su lógica de compilación a la CLI de AWS SAM.

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

Instale Python 3.8 o una versión más reciente

PythonSe requiere la versión 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, consulte la página Downloading Python (Descarga de Python) en la Guía para principiantes de Python.

Compruebe que Python 3.8 o una versión posterior se haya agregado a la ruta de su máquina ejecutando:

$ python --version

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

Instale la herramienta Make.

GNUMake 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 ha instalado Make en su máquina local, instálelo antes de continuar.

Para Windows, puede realizar la instalación mediante Chocolatey. Para obtener instrucciones, consulte Uso de Chocolatey en Cómo instalar y usar “Make” en Windows

Defina la lógica de construcción de los artefactos de Lambda

Utilice 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" } }

Defina un recurso sam metadata

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, consulte null_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.

  2. Defina las propiedades de sus artefactos Lambda dentro del bloque de triggers de su recurso.

  3. Especifique 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 sam metadata recurso variará según el tipo de recurso de Lambda (función o capa) y el tipo de empaquetado (ZIPo imagen). Para obtener más información y ejemplos, consulte recurso de metadatos de sam.

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 que haya generado este archivo, puede 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 API puntos de conexión.

Utilice la CLI de AWS SAM para crear sus artefactos de Lambda.

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 su proyecto de Terraform para conocer y localizar sus recursos de Lambda.

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

  3. 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, ejecute lo siguiente:

    $ sam build --hook-name terraform
  2. Para crear una función o capa de Lambda específica, ejecute 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, debe especificar la ubicación. Utilice 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

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, consulte Instalación de Docker para usarlo con la CLI de AWS SAM.

Para compilar usando un contenedor
  1. Cree un Dockerfile que contenga las herramientas Terraform, Python y Make. También debe 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"]
  2. Use docker 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>
  3. 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

Siguientes pasos

Para empezar a utilizar la CLI de AWS SAM en sus proyectos de Terraform, consulte Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales.

Configuración para Terraform Cloud

Se recomienda usar Terraform v1.6.0 o posterior. Si usa una versión anterior, debe generar un archivo de plan de Terraform de forma local. El archivo del plan local AWS SAM CLI proporciona la información necesaria 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, consulteUso de la CLI de AWS SAM con Terraform.

  1. Configurar un API token: el tipo de token dependerá de su nivel de acceso. Para obtener más información, consulta APIlos tokens en la Terraform Clouddocumentación.

  2. Configura la variable de entorno del API token: el siguiente es un ejemplo de la línea de comandos:

    $ export TOKEN="<api-token-value>"
  3. Obtén tu ID de ejecución: en la Terraform Cloud consola, busca el ID de Terraform ejecución de la ejecución que quieres usar con 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.
  4. Obtén el archivo del plan: con tu API token, obtén 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 puede utilizar la CLI de AWS SAM con Terraform Cloud. Si utiliza un comando compatible con la CLI de AWS SAM, utilice 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, consulte api_gateway_v2_tf_cloud en el repositorio de GitHub aws-samples.

Siguientes pasos

Para comenzar a usar la CLI de AWS SAM con Terraform Cloud,consulte Uso de la CLI de AWS SAM con Terraform para la depuración y las pruebas locales.