本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS SAM 用于构建 Step Functions 工作流程
您可以 AWS Serverless Application Model 与 Step Functions 一起使用来构建工作流程和部署所需的基础架构,包括 Lambda 函数 APIs 和事件,以创建无服务器应用程序。
AWS Toolkit for Visual Studio Code 作为集成体验的一部分,您还可以将 AWS Serverless Application Model CLI 与结合使用,来构建和部署 AWS Step Functions 状态机。您可以使用 AWS SAM构建无服务器应用程序,然后在 VS Code IDE 中构建状态机。然后,您可以验证、打包和部署您的资源。
提示
要部署使用启动 Step Functions 工作流程的示例无服务器应用程序 AWS SAM,请参阅在 AWS Step Functions 研讨会 AWS SAM中使用部署
为什么要将 Step Functions 配合使用 AWS SAM?
当你将 Step Functions 与配合使用时, AWS SAM 你可以:
-
开始使用 AWS SAM 示例模板。
-
将状态机构建到无服务器应用程序中。
-
在部署时,使用变量替换来替换 ARNs 到状态机中。
AWS CloudFormation 支持
DefinitionSubstitutions
,它们可让您将工作流定义中的动态引用添加到您在 CloudFormation 模板中提供的值。您可以使用${dollar_sign_brace}
表示法将替换项添加到工作流定义中,从而添加动态引用。您还需要在CloudFormation模板中 StateMachine 资源的DefinitionSubstitutions
属性中定义这些动态引用。在 CloudFormation 堆栈创建流程中,替换项将替换为实际值。有关更多信息,请参阅 DefinitionSubstitutions 在AWS SAM模板中。 -
使用 AWS SAM 策略模板指定状态机的角色。
-
使用 API Gateway、 EventBridge 事件或按 AWS SAM 模板中的计划启动状态机执行。
Step Functions 与 AWS SAM 规范集成
您可以使用 AWS SAM 策略模板向状态机添加权限。借助这些权限,您可以编排 Lambda 函数 AWS 和其他资源,以形成复杂而强大的工作流程。
Step Functions 与 SAM CLI 集成
Step Functions 已与 AWS SAM CLI 集成。这样,就可以快速将状态机开发到无服务器应用程序中。
试试本使用 AWS SAM创建 Step Functions 状态机教程,学习 AWS SAM 如何使用创建状态机。
支持的 AWS SAM CLI 功能包括:
CLI 命令 | 描述 |
---|---|
sam init |
使用模板初始化无服务器应用程序。 AWS SAM 可以与 SAM 模板一起使用以实现 Step Functions。 |
sam validate | 验证 AWS SAM 模板。 |
sam package |
打包 AWS SAM 应用程序。它创建一个包含您的代码和依赖项的 ZIP 文件,然后将其上传到 Amazon S3。然后,它返回 AWS SAM 模板的副本,并将对本地构件的引用替换为此命令已将构件上传到的 Amazon S3 位置。 |
sam deploy | 部署 AWS SAM 应用程序。 |
sam publish |
将 AWS SAM 应用程序发布到 AWS Serverless Application Repository。此命令采用打包的 AWS SAM 模板并将应用程序发布到指定区域。 |
注意
使用 AWS SAM 本地模式时,您可以在本地模拟 Lambda 和 API Gateway。但是,你不能使用 AWS SAM在本地模拟 Step Functions。
DefinitionSubstitutions 在AWS SAM模板中
您可以结合使用 CloudFormation 模板和 AWS SAM 来定义状态机。使用 AWS SAM,您可以在模板或单独的文件中定义内联状态机。以下 AWS SAM 模板包含模拟股票交易工作流的状态机。该状态机调用三个 Lambda 函数来查看股票的价格并确定是买入还是卖出股票。然后,相应交易会记录在 Amazon DynamoDB 表中。以下模板中的Lambda函数和DynamoDB表使用指定DefinitionSubstitutions
。 ARNs
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
以下代码是使用 AWS SAM创建 Step Functions 状态机教程中使用的文件 stock_trader.asl.json
内的状态机定义。此状态机定义包含几个用 ${dollar_sign_brace}
表示法表示的 DefinitionSubstitutions
。例如,使用替换项 ${StockCheckerFunctionArn}
,而不是为 Check Stock Value
任务指定静态 Lambda 函数 ARN。此替换项在模板的 DefinitionSubstitutions 属性中定义。DefinitionSubstitutions
是状态机资源的键值对的映射。在中DefinitionSubstitutions
,$ {StockCheckerFunctionArn} 使用CloudFormation内部函数映射到StockCheckerFunction
资源的 ARN。!GetAtt
部署 AWS SAM 模板时,模板中的 DefinitionSubstitutions
将替换为实际值。
{ "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 } } }
后续步骤
您可以通过以下资源了解有关使用 Step Funct AWS SAM ions 的更多信息:
-
完成教使用 AWS SAM创建 Step Functions 状态机程以使用创建状态机 AWS SAM。
-
查找要使用的 AWS SAM 策略模板。
-
将 AWS Toolkit for Visual Studio Code 与 Step Functions 搭配使用。
-
查看 AWS SAM CLI 参考,详细了解中 AWS SAM提供的特征。
您还可以使用 Infrastructure Composer 中的 Workflow Studio 等可视化构建器在基础设施即代码 (IaC) 中设计和构建工作流。有关更多信息,请参阅 使用Infrastructure Composer中的工作流程工作室构建 Step Functions 工作流程。