Implementar máquinas de estado con Terraform - AWS Step Functions

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.

Implementar máquinas de estado con Terraform

Terraform de HashiCorp es un marco para crear aplicaciones que utilizan la infraestructura como código (IaC). Con Terraform, puede crear máquinas de estado y utilizar características, como obtener una vista previa de las implementaciones de infraestructura y crear plantillas reutilizables. Las plantillas de Terraform le ayudan a mantener y reutilizar el código al dividirlo en partes más pequeñas.

Si está familiarizado con Terraform puede seguir el ciclo de vida de desarrollo descrito en este tema como modelo para crear e implementar máquinas de estado en Terraform. Si no está familiarizado con Terraform le recomendamos que antes de comenzar realice el taller Introducción a Terraform en AWS para familiarizarse con Terraform.

sugerencia

Para implementar un ejemplo de máquina de estado creada con Terraform en Cuenta de AWS, consulte el módulo Administrar máquinas de estado con infraestructura como código de The AWS Step Functions Workshop.

Requisitos previos

Antes de comenzar debe cumplir los siguientes requisitos previos:

  • Instale Terraform en su máquina. Para obtener información sobre la instalación de Terraform, consulte Instalar Terraform.

  • Instale Step Functions Local en su máquina. Se recomienda instalar la imagen de Docker de Step Functions Local para utilizar Step Functions Local. Para obtener más información, consulte Probar máquinas de estado de forma local.

  • Instalación de la AWS SAM CLI. Para obtener información sobre instalación, consulte Instalación del AWS SAM CLI en la Guía para desarrolladores de AWS Serverless Application Model.

  • Instale el AWS Toolkit for Visual Studio Code para ver el diagrama de flujo de trabajo de sus máquinas de estado. Para obtener información sobre la instalación, consulte Instalación del AWS Toolkit for Visual Studio Code en la Guía del usuario de AWS Toolkit for Visual Studio Code.

Ciclo de vida del desarrollo de máquinas de estado con Terraform

El siguiente procedimiento explica cómo puede utilizar un prototipo de máquina de estado que se crea con Workflow Studio en la consola de Step Functions como punto de partida para desarrollo local con Terraform y el AWS Toolkit for Visual Studio Code.

Para ver el ejemplo completo que analiza el desarrollo de máquinas de estado con Terraform y presenta las mejores prácticas en detalle, consulte Best practices for writing Step Functions Terraform projects.

Para iniciar el ciclo de vida de desarrollo de una máquina de estado con Terraform
  1. Inicie un nuevo proyecto de Terraform con el siguiente comando.

    terraform init
  2. Abra la consola de Step Functions para crear un prototipo para la máquina de estado.

  3. En Workflow Studio, haga lo siguiente:

    1. Cree el prototipo del flujo de trabajo.

    2. Exporte la definición de Amazon States Language (ASL) del flujo de trabajo. Para ello, seleccione la lista desplegable Importar/Exportar y, a continuación, seleccione Exportar definición de JSON.

  4. Guarde la definición de ASL exportada en el directorio del proyecto.

    La definición de ASL exportada se transfiere como parámetro de entrada al recurso de Terraform de aws_sfn_state_machine que utiliza la función templatefile. Esta función se utiliza en el campo de definición que transmite la definición de ASL exportada y cualquier sustitución de variables.

    sugerencia

    Como el archivo de definición de ASL puede contener bloques de texto largos, le recomendamos que evite el método EOF insertado. De este modo resulta más sencillo sustituir los parámetros en la definición de la máquina de estado.

  5. (Opcional) Actualice la definición de ASL en su IDE y visualice los cambios mediante AWS Toolkit for Visual Studio Code.

    Captura de pantalla de la definición de ASL de un flujo de trabajo en Visual Studio Code y su representación visual.

    Para evitar exportar continuamente la definición y refactorizarla en el proyecto, le recomendamos que realice las actualizaciones localmente en su IDE y que haga un seguimiento de estas actualizaciones con Git.

  6. Pruebe el flujo de trabajo utilizando Step Functions Local.

    sugerencia

    También puede probar localmente las integraciones de servicios con las funciones de Lambda y las API de API Gateway en la máquina de estado mediante AWS SAM CLI Local.

  7. Obtenga una vista previa de la máquina de estado y otros recursos de AWSantes de implementar la máquina de estado. Para ello, ejecute el siguiente comando.

    terraform plan
  8. Implemente la máquina de estado desde su entorno local o mediante canalizaciones de CI/CD utilizando el siguiente comando.

    terraform apply
  9. (Opcional) Limpie los recursos y elimine la máquina de estado con el siguiente comando.

    terraform destroy

Políticas y roles de IAM para la máquina de estado

Utilice las políticas de integración de servicios de Terraform para añadir los permisos de IAM necesarios a la máquina de estado, por ejemplo, permiso para invocar funciones de Lambda. También puede definir roles y políticas explícitos y asociarlos a la máquina de estado.

El siguiente ejemplo de política de IAM concede acceso a la máquina de estado para invocar una función de Lambda llamada myFunction.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction" } ] }

También recomendamos utilizar el origen de datos aws_iam_policy_document al definir las políticas de IAM para máquinas de estado en Terraform. Le ayudará a comprobar si su política está mal estructurada y a sustituir los recursos por variables.

El siguiente ejemplo de política de IAM utiliza el origen de datos aws_iam_policy_document y concede acceso a la máquina de estado para invocar una función de Lambda llamada myFunction.

data "aws_iam_policy_document" "state_machine_role_policy" { statement { effect = "Allow" actions = [ "lambda:InvokeFunction" ] resources = ["${aws_lambda_function.[[myFunction]].arn}:*"] } }
sugerencia

Para ver patrones arquitectónicos de AWS más avanzados implementados con Terraform, consulte los Ejemplos de Terraform en Serverless Land Workflows Collection.