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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:07:07