Как разрешить лямбда-функции вызывать себя рекурсивно
У меня есть приложение, которое работает на Lambda и доступно через APIGateway.
В моем шаблоне SAM я настроил его так, чтобы APIGateway мог вызывать мою функцию.
ConfigLambdaPermission:
Type: "AWS::Lambda::Permission"
DependsOn:
- MyFunction
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref MyFunction
Principal: apigateway.amazonaws.com
Но теперь мне нужно, чтобы приложение вызывало свою функцию рекурсивно. Я думал, что я мог бы просто добавить новую ConfigLambdaPermission к моей существующей, как это.
ConfigLambdaPermission:
Type: "AWS::Lambda::Permission"
DependsOn:
- MyFunction
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref MyFunction
Principal: apigateway.amazonaws.com
ConfigLambdaPermission:
Type: "AWS::Lambda::Permission"
DependsOn:
- MyFunction
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref MyFunction
Principal: lambda.amazonaws.com
Однако, когда функция пытается вызвать себя, она выдает следующую ошибку:
2019-01-27 14:27:56 - Aws::Lambda::Errors::AccessDeniedException -
User: arn:aws:sts::666666666666:assumed-role/my-app-MyFunction-166U166U166U1/my-app-MyFunction-1DJIJCDO1DJIJ
is not authorized to perform: lambda:InvokeFunction on resource:
arn:aws:lambda:us-west-2:666666666666:function:my-app-MyFunction-1DJIJCDO1DJIJ:
Я не уверен, правильно ли я добавил привилегии или есть какой-то другой шаг, который мне нужно сделать, чтобы сообщить AWS, что привилегии изменились.
Любая идея, как правильно позволить этой лямбда-функции вызывать себя?
1 ответ
Principal
в этом случае будет роль IAM, под которой работает сама Lambda, которая выглядит следующим образом (при необходимости замените aws-account-id и role-name):
Principal: arn:aws:iam::aws-account-id:role/role-name