我试图从另一个人那里调用一个lambda,遵循这个答案的例子:
Nodejs - Invoke an AWS.Lambda function from within another lambda function
答案说两个lambda函数都应该具有 AWSLambdaExecute 和 AWSLambdaBasicExecutionRole 权限。
使用无服务器,如何将这两个角色添加到serverless.yml
中的CloudFormation模板?
答案 0 :(得分:1)
根据无服务器IAM文档,
默认情况下,服务中的所有Lambda函数都共享一个IAM角色。还会创建IAM策略并将其附加到该角色。此外,默认情况下,您的Lambda函数具有创建和写入CloudWatch日志的权限,如果您已为要使用的函数指定了VPC安全组和子网,则将通过ENI附加到VPC所需的EC2权限添加到默认值中IAM政策。
要为此服务范围的角色添加特定权限,请在
provider.iamRoleStatements
中定义将合并到生成的策略中的语句。
要从另一个函数调用Lambda函数,只需将"lambda:InvokeFunction"
操作添加到Serverless已提供的现有IAM权限即可。因此,示例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"
权限。