step-functions-local本地调试:状态机触发同项目本地状态机失败
问题描述
已配置step-functions-local和serverless-offline,用于测试状态机#1(Foo)触发同项目内状态机#2(Bar)的本地流程。
执行本地启动命令:
sls offline start --stage dev
日志显示两个状态机均创建成功:
[Serverless Step Functions Local] 2022-07-29 11:03:59.867: [200] CreateStateMachine <= {"sdkResponseMetadata":null,"sdkHttpMetadata":null,"stateMachineArn":"arn:aws:states:us-east-1:123:stateMachine:Foo", "creationDate":1659117839863} [Serverless Step Functions Local] 2022-07-29 11:03:59.883: [200] CreateStateMachine <= {"sdkResponseMetadata":null,"sdkHttpMetadata":null,"stateMachineArn": "arn:aws:states:us-east-1:123:stateMachine:Bar","creationDate":1659117839882}
使用以下命令测试状态机#1:
aws stepfunctions --endpoint http://localhost:8083 start-execution --state-machine \ arn:aws:states:us-east-1:123:stateMachine:Foo --name local-test-$RANDOM --input <JSON string payload>
#1能正常执行S3读写等步骤,但触发#2时失败,抛出异常:
"Error":"StepFunctions- StateMachineDoesNotExistException", "Cause":"State Machine Does Not Exist: 'arn:aws:states:us-east-1:123:stateMachine:Bar' (Service: AWSStepFunctions; Status Code: 400; Error Code: StateMachineDoesNotExist"
#1中触发#2的步骤配置如下:
BarStateMachine: Type: Task Resource: "arn:aws:states:::states:startExecution.sync:2" Parameters: StateMachineArn: "arn:aws:states:us-east-1:123:stateMachine:Bar"
将StateMachineArn指向远程部署版本时#1可正常运行,但无法实现本地测试需求。
解决方案
问题核心是:默认情况下,状态机#1调用startExecution.sync时会请求AWS远程API,而非本地的step-functions-local服务,因此找不到本地创建的#2状态机。需通过以下两步配置解决:
- 在serverless.yml中配置Step Functions Local的本地端点
在custom字段下添加stepFunctionsLocal配置,指定本地服务地址:
custom: stepFunctionsLocal: localEndpoint: http://localhost:8083
- 在状态机#1的触发步骤中显式指定本地端点
修改#1中调用#2的Task配置,添加Endpoint参数指向本地step-functions-local服务:
BarStateMachine: Type: Task Resource: "arn:aws:states:::states:startExecution.sync:2" Parameters: StateMachineArn: "arn:aws:states:us-east-1:123:stateMachine:Bar" Endpoint: "http://localhost:8083"
完成配置后重启serverless-offline服务,再次测试状态机#1即可成功触发本地的#2状态机。
内容的提问来源于stack exchange,提问作者jtotoole
相关产品推荐
相关产品推荐

