AWS Step Functions父子传参报错:无效ARN,execution类型不合法
问题:父Step Functions启动子流程时,子流程触发Invalid Arn错误
我正尝试从父AWS Step Functions启动子Step Functions,目前遇到子流程无法识别执行ARN的问题。已遵循AWS官方指南及相关帖子配置,父流程可正常执行并传递Execution ARN,但子流程启动时触发错误。
父状态机配置
{ "Comment": "A description of my state machine", "StartAt": "List Accounts", "States": { "List Accounts": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:eu-west-1:{MY-ACCOUNT}:function:ListAccounts-TEST:$LATEST" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ], "Next": "Process Accounts" }, "Process Accounts": { "Type": "Map", "ItemsPath": "$.Accounts", "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "Start nested execution", "States": { "Start nested execution": { "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:sfn:startExecution", "InputPath": "$", "Parameters": { "StateMachineArn": "arn:aws:states:eu-west-1:{MY-ACCOUNT}:stateMachine:AgedCreds-Test-Child-Function", "Input": { "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "End": true, "ResultPath": "$.taskresult" } } }, "Next": "SendSlackMessage", "InputPath": "$", "OutputPath": "$" }, "SendSlackMessage": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:eu-west-1:{MY-ACCOUNT}:function:SendSlackMessage:$LATEST" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 2, "MaxAttempts": 6, "BackoffRate": 2 } ], "End": true } } }
父流程执行结果
{ "Id": "006629000000", "Arn": "arn:aws:organizations::{MY-ACCOUNT}:account/o-v5zfxxxxxx/006629000000", "Email": "account-email", "Name": "account-name", "Status": "ACTIVE", "JoinedMethod": "CREATED", "JoinedTimestamp": "11-May-2021 (14:54:08.265000)", "TribeTag": "TRIBE", "taskresult": { "ExecutionArn": "arn:aws:states:eu-west-1:{MY-ACCOUNT}:execution:AgedCreds-Test-Child-Function:{EXECUTION-ID-STRING}", "StartDate": "2023-06-22T10:01:08.504Z" } }
子状态机配置
{ "Comment": "A description of my state machine", "StartAt": "Step Functions StartExecution", "States": { "Step Functions StartExecution": { "Type": "Task", "Resource": "arn:aws:states:::states:startExecution.sync:2", "Parameters": { "StateMachineArn": "arn:aws:states:eu-west-1:{MY-ACCOUNT}:execution:ParentStateMachine-Aged-Credentials", "Input": { "StatePayload": "$$.Execution.Id", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } }, "Next": "GenerateReport" }, ... } }
错误信息
Invalid Arn: 'Resource type not valid in this context: execution' (Service: AWSStepFunctions; Status Code: 400; Error Code: InvalidArn; Request ID: EXECUTION-ID-STRING; Proxy: null)
我已尝试调整Task Token,但问题仍未解决,且确认权限配置符合要求(包含Events及State策略)。请问是否有明显遗漏的配置项?
解决方案
错误原因非常明确:子状态机中StartExecution任务的StateMachineArn参数使用了执行(execution)类型的ARN,但startExecution API要求传入的是状态机(stateMachine)类型的ARN。
你需要将子状态机配置中的:
"StateMachineArn": "arn:aws:states:eu-west-1:{MY-ACCOUNT}:execution:ParentStateMachine-Aged-Credentials"
修改为父状态机的ARN(以stateMachine结尾):
"StateMachineArn": "arn:aws:states:eu-west-1:{MY-ACCOUNT}:stateMachine:ParentStateMachine-Aged-Credentials"
另外,子状态机中Input里的StatePayload写法有问题,如果你想传递当前子流程的执行ID,应该使用引用语法:
"StatePayload.$": "$$.Execution.Id"
否则它会把字符串"$$.Execution.Id"直接作为值传入,而不是解析后的执行ID。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

