Uso AWS SAM para crear flujos de trabajo de Step Functions - 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.

Uso AWS SAM para crear flujos de trabajo de Step Functions

Puede usarlo AWS Serverless Application Model con Step Functions para crear flujos de trabajo e implementar la infraestructura que necesita, incluidas las funciones APIs y eventos de Lambda, para crear aplicaciones sin servidor.

También puede utilizarlos junto con AWS Serverless Application Model CLI el AWS Toolkit for Visual Studio Code como parte de una experiencia integrada para crear e implementar máquinas de AWS Step Functions estado. Puede crear una aplicación sin servidor con AWS SAM VS IDE Code y luego crear su máquina de estados en él. Posteriormente, puede validar, empaquetar e implementar sus recursos.

sugerencia

Para implementar un ejemplo de aplicación sin servidor que inicie un flujo de trabajo de Step Functions utilizando AWS SAM su Cuenta de AWS, consulte el Módulo 11: Implementar con AWS SAM The AWS Step Functions Workshop.

¿Por qué usar Step Functions con AWS SAM?

Cuando utilizas Step Functions con AWS SAM , puedes:

  • Comience a usar una plantilla AWS SAM de ejemplo.

  • Crear su máquina de estado en su aplicación sin servidor.

  • Utilice la sustitución de variables para sustituirlas ARNs en su máquina de estados en el momento de la implementación.

    AWS CloudFormation admite DefinitionSubstitutions que permiten añadir referencias dinámicas en la definición de su flujo de trabajo a un valor que proporcione en la plantilla de CloudFormation. Puede añadir referencias dinámicas añadiendo sustituciones a la definición del flujo de trabajo mediante la notación ${dollar_sign_brace}. También debe definir estas referencias dinámicas en la DefinitionSubstitutions propiedad del StateMachine recurso de la CloudFormation plantilla. Estas sustituciones se sustituyen por valores reales durante el proceso de creación de la pila de CloudFormation. Para obtener más información, consulte DefinitionSubstitutions en plantillas AWS SAM.

  • Especifique la función de su máquina de estados mediante plantillas AWS SAM de políticas.

  • Inicie las ejecuciones de máquinas de estado con API Gateway, EventBridge eventos o según una programación incluida en su AWS SAM plantilla.

Integración de Step Functions con la especificación de AWS SAM

Puede utilizar las plantillas de políticas de AWS SAM para agregar permisos a su máquina de estado. Con estos permisos, puede organizar las funciones de Lambda y AWS otros recursos para crear flujos de trabajo complejos y sólidos.

Integración de Step Functions con SAM CLI

Step Functions está integrado con AWS SAM CLI. Utilice esto para desarrollar rápidamente una máquina de estado en su aplicación sin servidor.

Pruebe el Crear una máquina de estado de Step Functions con AWS SAM tutorial para aprender a usarlo AWS SAM para crear máquinas de estados.

AWS SAM CLILas funciones compatibles incluyen:

CLIComando Descripción
sam init

Inicializa una aplicación sin servidor con una AWS SAM plantilla. Se puede usar con una SAM plantilla para Step Functions.

sam validate Valida una AWS SAM plantilla.
sam package

Empaqueta una AWS SAM aplicación. Crea un ZIP archivo con el código y las dependencias y, a continuación, lo carga en Amazon S3. Después, el comando devuelve una copia de la plantilla de AWS SAM , sustituyendo las referencias a artefactos locales con la ubicación de Amazon S3 donde el comando cargó los artefactos.

sam deploy Implementa una aplicación. AWS SAM
sam publish

Publica una AWS SAM aplicación en. AWS Serverless Application Repository Este comando toma una AWS SAM plantilla empaquetada y publica la aplicación en la región especificada.

nota

Si usa AWS SAM local, puede emular Lambda API y Gateway localmente. Sin embargo, no puedes emular Step Functions localmente usando AWS SAM.

DefinitionSubstitutions en plantillas AWS SAM

Puede definir máquinas de estado utilizando una plantilla de CloudFormation con AWS SAM. Con AWS SAM, puede definir la máquina de estado insertándola en la plantilla o en un archivo independiente. La siguiente plantilla de AWS SAM incluye una máquina de estado que simula un flujo de trabajo de cotización de acciones. Esta máquina de estado invoca tres funciones de Lambda para comprobar el precio de una acción y determinar si se debe comprar o vender la acción. A continuación, esta transacción se registra en una tabla de Amazon DynamoDB. Las ARNs Lambda funciones y la DynamoDB tabla de la siguiente plantilla se especifican mediante DefinitionSubstitutions.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: | step-functions-stock-trader Sample SAM Template for step-functions-stock-trader Resources: StockTradingStateMachine: Type: AWS::Serverless::StateMachine Properties: DefinitionSubstitutions: StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem DDBTable: !Ref TransactionTable Policies: - DynamoDBWritePolicy: TableName: !Ref TransactionTable - LambdaInvokePolicy: FunctionName: !Ref StockCheckerFunction - LambdaInvokePolicy: FunctionName: !Ref StockBuyerFunction - LambdaInvokePolicy: FunctionName: !Ref StockSellerFunction DefinitionUri: statemachine/stock_trader.asl.json StockCheckerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-checker/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockSellerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-seller/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockBuyerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-buyer/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 TransactionTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S

El siguiente código es la definición de máquina de estado del archivo stock_trader.asl.json que se utiliza en el tutorial Crear una máquina de estado de Step Functions con AWS SAM. Esta definición de máquina de estado contiene varias DefinitionSubstitutions que se denotan mediante notación ${dollar_sign_brace}. Por ejemplo, en lugar de especificar una Lambda función estática ARN para la Check Stock Value tarea, ${StockCheckerFunctionArn} se utiliza la sustitución. Esta sustitución se define en la propiedad DefinitionSubstitutions de la plantilla. DefinitionSubstitutions es un mapa de pares de clave-valor para el recurso de la máquina de estado. EnDefinitionSubstitutions, $ {StockCheckerFunctionArn} se asigna al ARN StockCheckerFunction recurso mediante la función CloudFormation intrínseca !GetAtt. Al implementar la plantilla de AWS SAM, las DefinitionSubstitutions de la plantilla se sustituyen por los valores reales.

{ "Comment": "A state machine that does mock stock trading.", "StartAt": "Check Stock Value", "States": { "Check Stock Value": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockCheckerFunctionArn}" }, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.stock_price", "NumericLessThanEquals": 50, "Next": "Buy Stock" } ], "Default": "Sell Stock" }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockBuyerFunctionArn}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2 } ], "Next": "Record Transaction" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockSellerFunctionArn}" }, "Next": "Record Transaction" }, "Record Transaction": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "Parameters": { "TableName": "${DDBTable}", "Item": { "Id": { "S.$": "$.id" }, "Type": { "S.$": "$.type" }, "Price": { "N.$": "$.price" }, "Quantity": { "N.$": "$.qty" }, "Timestamp": { "S.$": "$.timestamp" } } }, "End": true } } }

Siguientes pasos

Puede obtener más información sobre el uso de Step Functions AWS SAM con los siguientes recursos:

También puede diseñar y crear sus flujos de trabajo en infraestructura como código (IaC) mediante generadores visuales, como Workflow Studio en Application Composer. Para obtener más información, consulte Uso de Workflow Studio Application Composer para crear flujos de trabajo de Step Functions.