【问题标题】:How to use AWS SAM CLI to execute a Step Function locally?如何使用 AWS SAM CLI 在本地执行 Step Function?
【发布时间】:2021-06-03 05:00:50
【问题描述】:

我正在尝试弄清楚如何为 AWS Step Functions 设置本地开发并在不消耗 aws 资源的情况下运行整个工作流程。

我使用“Step Functions Sample App (Stock Trader)”模板初始化了一个项目,该模板具有以下状态机图:

此时我已经设法通过使用sam local invoke StockCheckerFunction 一次只运行一个 lambda 函数来测试执行。

有没有办法在本地一次运行整个工作流程?

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 aws-sam aws-sam-cli


    【解决方案1】:

    您需要在本地机器上同时运行 AWS Step Functions Local 和 AWS Lambda,然后您可以在不将代码部署到 AWS 的情况下测试您的状态机和 Lambda 函数。

    按照以下步骤操作: https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html

    【讨论】:

    • 谢谢,我不知何故错过了文档的那一部分。有没有办法使用本地定义的状态机,或者至少引用文件中的代码,而无需在运行create-state-machine 时提供定义?我已经在描述中添加了我的状态机上的定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多