使用 cloudformation 调用子工作流状态的 AWS Step Function
AWS StepFunction with Invoke Child Workflow state using cloud formation giving in
我正在尝试创建一个可以调用另一个状态机的状态机。我尝试使用以下方法获取 ARN。但是,此 returns 错误 Arn 不是有效的 属性,正在创建哪个堆栈。
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
我也尝试过使用此字符串生成 ARN。
arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:ChildStateMachine
然而,这给出了错误
Failed to call Step Functions for request: 'com.amazonaws.services.stepfunctions.model.CreateStateMachineRequest'. (Service: null; Status Code: 500; Error Code: null; Request ID: null)
我能够使用云形成来创建其他类型的状态机。仅当我尝试创建一个执行子工作流的工作流时才不起作用。当我转到云跟踪时,CreateStateMachineEvent 的错误代码为“拒绝访问”。我已授予该角色的管理员访问权限。有没有人遇到这个问题并找到解决方案?
我运行遇到了同样的问题。在向 ParentStateMachine 授予 "states:StartExecution" 权限后,我能够进行修复。
为您的父级 StatMachine 的 StatesExecutionRole 创建一个内联策略,并使用 ChildStateMachineName 添加如下内容。它应该可以解决问题。
- PolicyDocument:
Version: '2012-10-17'
Statement:
-
Effect: Allow
Action:
- states:StartExecution
Resource: !GetAtt ChildStateMachine.Arn
对于使用 "Wait For callback" 模式(以 .sync 或 .waitForTaskToken 结尾的模式)的州,您需要特殊政策,如前所述 here。
特别是在您的情况下,除了标准 states:StartEecution 政策外,您还需要添加与事件相关的政策:
- 事件:PutTargets
- 事件:PutRule
- 事件:描述规则
以及专门用于描述和停止执行的策略:
- 状态:描述执行
- 状态:停止执行
详情可见here
为简单起见,大多数时候我使用下一个策略:
- 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: "*"
如果有人在使用 AWS SAM,您可以使用这样的内联策略语句:
Policies:
- StepFunctionsExecutionPolicy:
StateMachineName: !GetAtt ChildStepFunction.Name
- Statement:
- Sid: StatesStartExecutionPolicy
Effect: Allow
Action:
- "states:*"
Resource: '*'
- Sid: StatesAccessEventsPolicy
Effect: Allow
Action:
- "events:*"
Resource: '*'
我正在尝试创建一个可以调用另一个状态机的状态机。我尝试使用以下方法获取 ARN。但是,此 returns 错误 Arn 不是有效的 属性,正在创建哪个堆栈。
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
我也尝试过使用此字符串生成 ARN。
arn:aws:states:${AWS::Region}:${AWS::AccountId}:stateMachine:ChildStateMachine
然而,这给出了错误
Failed to call Step Functions for request: 'com.amazonaws.services.stepfunctions.model.CreateStateMachineRequest'. (Service: null; Status Code: 500; Error Code: null; Request ID: null)
我能够使用云形成来创建其他类型的状态机。仅当我尝试创建一个执行子工作流的工作流时才不起作用。当我转到云跟踪时,CreateStateMachineEvent 的错误代码为“拒绝访问”。我已授予该角色的管理员访问权限。有没有人遇到这个问题并找到解决方案?
我运行遇到了同样的问题。在向 ParentStateMachine 授予 "states:StartExecution" 权限后,我能够进行修复。
为您的父级 StatMachine 的 StatesExecutionRole 创建一个内联策略,并使用 ChildStateMachineName 添加如下内容。它应该可以解决问题。
- PolicyDocument:
Version: '2012-10-17'
Statement:
-
Effect: Allow
Action:
- states:StartExecution
Resource: !GetAtt ChildStateMachine.Arn
对于使用 "Wait For callback" 模式(以 .sync 或 .waitForTaskToken 结尾的模式)的州,您需要特殊政策,如前所述 here。
特别是在您的情况下,除了标准 states:StartEecution 政策外,您还需要添加与事件相关的政策:
- 事件:PutTargets
- 事件:PutRule
- 事件:描述规则
以及专门用于描述和停止执行的策略:
- 状态:描述执行
- 状态:停止执行
详情可见here
为简单起见,大多数时候我使用下一个策略:
- 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: "*"
如果有人在使用 AWS SAM,您可以使用这样的内联策略语句:
Policies:
- StepFunctionsExecutionPolicy:
StateMachineName: !GetAtt ChildStepFunction.Name
- Statement:
- Sid: StatesStartExecutionPolicy
Effect: Allow
Action:
- "states:*"
Resource: '*'
- Sid: StatesAccessEventsPolicy
Effect: Allow
Action:
- "events:*"
Resource: '*'