如何使用 AWS SAM CLI 在本地执行 Step Function?
How to use AWS SAM CLI to execute a Step Function locally?
我正在尝试弄清楚如何在不消耗 aws 资源的情况下为 AWS Step Functions 和 运行 整个工作流设置本地开发。
我已经使用“Step Functions Sample App (Stock Trader)”模板初始化了一个项目,该模板具有以下状态机图:
在这一点上,我已经设法通过 运行 一次只使用一个 lambda 函数来测试执行 sam local invoke StockCheckerFunction
。
有什么方法可以在本地 运行 一次完成整个工作流程吗?
stock_trader.asl.json
{
"Comment": "A state machine that does mock stock trading.",
"StartAt": "Check Stock Value",
"States": {
"Check Stock Value": {
"Type": "Task",
"Resource": "${StockCheckerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 15,
"MaxAttempts": 5,
"BackoffRate": 1.5
}
],
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.stock_price",
"NumericLessThanEquals": 50,
"Next": "Buy Stock"
}
],
"Default": "Sell Stock"
},
"Sell Stock": {
"Type": "Task",
"Resource": "${StockSellerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 1
}
],
"Next": "Record Transaction"
},
"Buy Stock": {
"Type": "Task",
"Resource": "${StockBuyerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 1
}
],
"Next": "Record Transaction"
},
"Record Transaction": {
"Type": "Task",
"Resource": "${DDBPutItem}",
"Parameters": {
"TableName": "${DDBTable}",
"Item": {
"Id": {
"S.$": "$.id"
},
"Type": {
"S.$": "$.type"
},
"Price": {
"N.$": "$.price"
},
"Quantity": {
"N.$": "$.qty"
},
"Timestamp": {
"S.$": "$.timestamp"
}
}
},
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 20,
"MaxAttempts": 5,
"BackoffRate": 10
}
],
"End": true
}
}
}
您需要在本地机器上安装 AWS Step Functions Local 和 AWS Lambda 运行,然后您可以测试状态机和 Lambda 函数,而无需将代码部署到 AWS。
按照以下步骤操作:
https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html
我正在尝试弄清楚如何在不消耗 aws 资源的情况下为 AWS Step Functions 和 运行 整个工作流设置本地开发。
我已经使用“Step Functions Sample App (Stock Trader)”模板初始化了一个项目,该模板具有以下状态机图:
在这一点上,我已经设法通过 运行 一次只使用一个 lambda 函数来测试执行 sam local invoke StockCheckerFunction
。
有什么方法可以在本地 运行 一次完成整个工作流程吗?
stock_trader.asl.json
{
"Comment": "A state machine that does mock stock trading.",
"StartAt": "Check Stock Value",
"States": {
"Check Stock Value": {
"Type": "Task",
"Resource": "${StockCheckerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 15,
"MaxAttempts": 5,
"BackoffRate": 1.5
}
],
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.stock_price",
"NumericLessThanEquals": 50,
"Next": "Buy Stock"
}
],
"Default": "Sell Stock"
},
"Sell Stock": {
"Type": "Task",
"Resource": "${StockSellerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 1
}
],
"Next": "Record Transaction"
},
"Buy Stock": {
"Type": "Task",
"Resource": "${StockBuyerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 1
}
],
"Next": "Record Transaction"
},
"Record Transaction": {
"Type": "Task",
"Resource": "${DDBPutItem}",
"Parameters": {
"TableName": "${DDBTable}",
"Item": {
"Id": {
"S.$": "$.id"
},
"Type": {
"S.$": "$.type"
},
"Price": {
"N.$": "$.price"
},
"Quantity": {
"N.$": "$.qty"
},
"Timestamp": {
"S.$": "$.timestamp"
}
}
},
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 20,
"MaxAttempts": 5,
"BackoffRate": 10
}
],
"End": true
}
}
}
您需要在本地机器上安装 AWS Step Functions Local 和 AWS Lambda 运行,然后您可以测试状态机和 Lambda 函数,而无需将代码部署到 AWS。
按照以下步骤操作: https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html