Uso de AWS SAM para crear flujos de trabajo de Step Functions
Puede utilizar AWS Serverless Application Model con Step Functions para crear flujos de trabajo e implementar la infraestructura que necesita, incluidas funciones de Lambda, API y eventos para crear aplicaciones sin servidor.
También puede usar la CLI de AWS Serverless Application Model junto con AWS Toolkit for Visual Studio Code como parte de una experiencia integrada para construir y implementar máquinas de estado de AWS Step Functions. Puede desarrollar una aplicación sin servidor con AWS SAM y luego construir su máquina de estado en el IDE de VS Code. 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 mediante AWS SAM, consulte Implementación con AWS SAM
¿Por qué usar Step Functions con AWS SAM?
Cuando utilice Step Functions con AWS SAM, podrá:
-
Comenzar usando una plantilla de ejemplo de AWS SAM.
-
Crear su máquina de estado en su aplicación sin servidor.
-
Utilizar la sustitución de variables para sustituir ARN en su máquina de estado en el momento de la implementación.
AWS CloudFormation admite
DefinitionSubstitutionsque 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 propiedadDefinitionSubstitutionsdel recurso StateMachine de la plantilla de CloudFormation. 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 de AWS SAM. -
Especificar el rol de su máquina de estado mediante plantillas de políticas de AWS SAM.
-
Iniciar ejecuciones de máquinas de estado con API Gateway, eventos EventBridge o según una programación dentro de la plantilla de AWS SAM.
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 orquestar funciones de Lambda y otros recursos de AWS para formar flujos de trabajo complejos y sólidos.
Integración de Step Functions con la CLI de SAM
Step Functions se integra con la CLI de AWS SAM. Utilice esto para desarrollar rápidamente una máquina de estado en su aplicación sin servidor.
Pruebe el tutorial Crear una máquina de estado de Step Functions con AWS SAM para aprender a usar AWS SAM para crear máquinas de estado.
Las funciones admitidas de la CLI de AWS SAM incluyen:
| Comando de la CLI | Descripción |
|---|---|
| sam init |
Inicia una aplicación sin servidor con una plantilla de AWS SAM. Se puede utilizar con una plantilla de SAM para Step Functions. |
| sam validate | Valida una plantilla de AWS SAM. |
| sam package |
Empaqueta una aplicación de AWS SAM. Crea un archivo ZIP de su código y dependencias y luego 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 aplicación AWS SAM en AWS Serverless Application Repository. Este comando toma una plantilla de AWS SAM empaquetada y publica la aplicación en la región especificada. |
nota
Si usa AWS SAM local, puede emular Lambda y API Gateway localmente. Sin embargo, no se puede emular Step Functions localmente usando una AWS SAM.
DefinitionSubstitutions en plantillas de 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. Los ARN de las funciones de Lambda y la tabla DynamoDB 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 un ARN de función de Lambda estática para la tarea Check Stock Value, se utiliza la sustitución ${StockCheckerFunctionArn}. 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. En DefinitionSubstitutions, ${StockCheckerFunctionArn} se asigna al ARN del recurso StockCheckerFunction mediante la función intrínseca de CloudFormation !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 } } }
Pasos a seguir a continuación
Puede obtener más información sobre el uso de Step Functions con AWS SAM con los siguientes recursos:
-
Complete el tutorial Crear una máquina de estado de Step Functions con AWS SAM para crear una máquina de estado con AWS SAM.
-
Especifique un recurso de AWS::Serverless::StateMachine.
-
Busque las plantillas de políticas de AWS SAM que desea utilizar.
-
Use AWS Toolkit for Visual Studio Code con Step Functions.
-
Consulte la referencia de la CLI de AWS SAM para obtener más información sobre las características disponibles en AWS SAM.
También puede diseñar y crear sus flujos de trabajo en infraestructura como código (IaC) mediante generadores visuales, como Workflow Studio en Infrastructure Composer. Para obtener más información, consulte Uso de Workflow Studio en Infrastructure Composer para crear flujos de trabajo de Step Functions.