You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Moto mock AWS Step Functions时触发StateMachineDoesNotExist错误

解决Moto Mock AWS Step Functions时的StateMachineDoesNotExist错误

Moto的mock环境是完全独立的空沙箱,即使你指定了状态机ARN,这个资源在mock环境里默认不存在,必须先手动创建对应ARN的状态机,才能调用start_execution。

修改后的测试代码示例

from moto import mock_stepfunctions
import boto3

@mock_stepfunctions
def test_lambda_handler():
    # 在mock环境中创建与配置匹配的状态机
    sf_client = boto3.client("stepfunctions", region_name="ca-central-1")
    sf_client.create_state_machine(
        name="test-StateMachine",  # 必须与ARN中的状态机名称一致
        definition='{"Comment": "Test State Machine", "StartAt": "DummyState", "States": {"DummyState": {"Type": "Pass", "End": true}}}',
        roleArn="arn:aws:iam::111122223333:role/dummy-role"  # 格式合法即可,Moto不验证角色有效性
    )
    
    # 执行待测试函数
    function()

关键注意事项

  • 创建状态机的name必须与你配置的ARN中stateMachine:后的名称完全一致(这里是test-StateMachine)
  • 客户端的区域要与ARN中的区域(ca-central-1)匹配
  • ARN中的账号ID(111122223333)要和创建状态机时角色ARN里的账号ID一致
  • 如果你的配置中ARN是动态生成的,可以先创建状态机,再将返回的stateMachineArn赋值给配置项:
    response = sf_client.create_state_machine(...)
    config.step_function_arn = response["stateMachineArn"]
    

完成上述步骤后,mock环境中就存在对应的状态机资源,调用start_execution就不会再抛出StateMachineDoesNotExist错误,之后你可以添加断言验证执行逻辑是否符合预期。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:05:22