使用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
相关产品推荐
相关产品推荐

