У меня есть шаговая функция (родительская), созданная в шаблоне SAM / CloudFormation, которая, помимо прочего, вызывает другую шаговую функцию (дочернюю). Я следую инструкциям по вызову Child из Parent, используя шаблон интеграции службы . Но я получаю ошибку, связанную с IAM (думаю), которую не могу устранить при развертывании через CLI. (Ошибка проявляется в выходных данных CLI, поэтому она никогда не превращается в AWS. Ранее было много развертываний, поэтому changeset
просто пытается изменить функцию шага с этим развертыванием.)
'arn:aws:iam::{Account-Number}:role/{Parent-Step-Function-Role-Name}' is not authorized to create managed-rule. (Service: AWSStepFunctions; Status Code: 400; Error Code: AccessDeniedException; Request ID: {Long-Id-Number})
Чтобы получить синхронное поведение, которое я хочу (Parent вызывает Child, ждет завершения выполнения Child, затем переходит в следующее состояние) Я использую предложение (из ссылки на шаблон интеграции служб выше), чтобы создать задачу (в моем шаблоне SAM), которая выглядит следующим образом:
...More States...
"Call Child State": {
"Type": "Task",
"Next": "The Next State",
"Resource": "arn:aws:states:::states:startExecution.sync",
"Parameters": {
"Input": {
"comment": "Hello World!"
},
"StateMachineArn": "${ChildStepFunction}",
"Name": "ChildExecutionFromParent"
}
},
...More States...
Я определил роль IAM для Parent следующим образом убедившись, что он имеет только привилегии выполнения Lambda для функций Lambda в Parent, и, что более важно, имеет разрешение на StartExecution
Child. Я следовал инструкциям, приведенным в ссылке ниже, в которой указано, что StartExecution является единственным разрешением, необходимым при использовании шаблона интеграции служб.
https://docs.aws.amazon.com/step-functions/latest/dg/stepfunctions-iam.html
ParentStepFunctionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- !Sub states.${AWS::Region}.amazonaws.com
Action: sts:AssumeRole
Policies:
-
PolicyName: ChildStepFunctionExecution
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: states:StartExecution
Resource: !Ref ChildStepFunction
-
Effect: Allow
Action: lambda:InvokeFunction
Resource:
- !GetAtt Function1.Arn
...
- !GetAtt FunctionX.Arn
I Мы пытались заменить вышеуказанное состояние простым Pass
состоянием, чтобы убедиться, что в Шаговой функции не было других ошибок, блокирующих развертывание, и она развернута нормально. Так что я знаю, что это связано с этим государством. (Также следует отметить, что при развертывании с состоянием Pass
для тестирования я оставил роль, как определено выше, поэтому, опять же, я знаю, что это не синтаксическая ошибка с политиками, которые могут вызывать это. Очевидно, что это не то же самое как, возможно, наличие неправильных или пропущенных политик.)