Как разрешить лямбда-функции вызывать себя рекурсивно - PullRequest
0 голосов
/ 27 января 2019

У меня есть приложение, которое работает на 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 Ответ

0 голосов
/ 28 января 2019

В этом случае Principal будет ролью IAM, под которой работает сама лямбда, а именно (замените aws-account-id и role-name при необходимости):

Principal: arn:aws:iam::aws-account-id:role/role-name
...