1

Я пытаюсь вызвать лямбда от другого, следуя примеру из этого ответа:Добавить роль в качестве шаблона CloudFormation в бессерверной YML

Nodejs - Invoke an AWS.Lambda function from within another lambda function

Ответ говорит, что оба лямбда-функции должны иметь AWSLambdaExecute и AWSLambdaBasicExecutionRole Разрешения.

Использование Serverless, как я могу добавить эти 2 роли в шаблон CloudFormation в serverless.yml?

ответ

1

Согласно IAM документации бессерверной,

По умолчанию один IAM Роли разделяют все функции лямбды в вашей службе. Политика IAM также создается и привязана к этой роли. Также по умолчанию ваши функции Lambda имеют разрешение создавать и записывать в журналы CloudWatch, и если вы указали группы безопасности и подсети VPC для своих функций, то права EC2, необходимые для присоединения к VPC через ENI, будут добавлены в значение по умолчанию Политика IAM.

Чтобы добавить определенные права на эту служебную роль, определите инструкции в provider.iamRoleStatements, которые будут объединены в сгенерированную политику.

Для вызова функции Lambda из другой функции, вам просто нужно добавить "lambda:InvokeFunction" действие к существующим IAM разрешений Serverless уже предоставляет. Так пример serverless.yml служба должна иметь iamRoleStatements раздел, который выглядит следующим образом:

service: new-service 

provider: 
    name: aws 
    iamRoleStatements: 
    - Effect: "Allow" 
     Action: 
     - "lambda:InvokeFunction" 
     Resource: 
     - "*" 

Ссылаясь на другой ответ привел:

  • AWSLambdaBasicExecutionRole политика управляемого уже охватываются политикой бессерверной по умолчанию;
  • AWSLambdaExecute - неправильное имя для требуемой управляемой политики (для этого предоставляется только доступ к S3 get/put, а не InvokeFunction); ответ, вероятно, означал AWSLambdaRole, который предоставляет разрешение "lambda:InvokeFunction".