AWS StepFunction 使用云形成调用子工作流状态

Bud*_*dha 4 amazon-web-services aws-cloudformation aws-step-functions

我正在尝试创建一个可以调用另一个状态机的状态机。我尝试使用以下方法来获取 ARN。但是,这会返回错误 Arn is not a valid property,正在创建哪个堆栈。

  ParentStateMachine:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      StateMachineName: !Sub "ParentStateMachine"
      DefinitionString:
        Fn::Sub:
         - |-
            {
              "Comment": "...",
              "StartAt": "State1",
              "States": {
                "State1": {
                  "Type": "Task",
                  "Resource": "arn:aws:states:::states:startExecution.sync",
                  "Parameters": {
                    "StateMachineArn": "${ChildStateMachineArn}",
                    "Input": {
                      "StatePayload": {
                        "datasetDate.$": "$.datasetDate"
                      },
                      "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"
                    }
                  },
                  "End": true
                }
              }
            }
         -  {
               ChildStateMachineArn:
                 Fn::GetAtt:
                   - ChildStateMachine
                   - Arn
            }
      RoleArn:
        Fn::GetAtt:
          - StatesExecutionRole
          - Arn
Run Code Online (Sandbox Code Playgroud)

我还尝试使用此字符串生成 ARN。

arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:ChildStateMachine
Run Code Online (Sandbox Code Playgroud)

但是,这给出了错误

Failed to call Step Functions for request: 'com.amazonaws.services.stepfunctions.model.CreateStateMachineRequest'. (Service: null; Status Code: 500; Error Code: null; Request ID: null)
Run Code Online (Sandbox Code Playgroud)

我能够使用云形成创建其他类型的状态机。只有当我尝试创建一个执行子工作流的工作流时才不起作用。当我进入云跟踪时,CreateStateMachineEvent 的错误代码为 Access Denied。我已授予该角色的管理员访问权限。有没有人遇到过这个问题并找到了解决方案?

小智 5

对于美国使用“等待回调”模式(那些.SYNC或.waitForTaskToken结尾)你需要特殊的政策,提到这里

特别是在您的情况下,除了标准状态:StartEecution策略之外,您还需要添加与事件相关的策略:

  • 事件:PutTargets
  • 事件:PutRule
  • 事件:描述规则

以及专用于描述和停止执行的政策:

  • 状态:描述执行
  • 状态:停止执行

详细信息可以在这里找到

为简单起见,大部分时间我使用以下策略:

  - PolicyName: StatesStartExecutionPolicy
     - PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "states:*"
            Resource: "*"
    - PolicyName: StatesAccessEventsPolicy
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "events:*"
            Resource: "*"
Run Code Online (Sandbox Code Playgroud)