amazon-web-services - 如何让 Lambda 函数递归调用自身
问题描述
我有一个在 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 权限已更改。
知道如何正确地允许这个 lambda 函数调用自己吗?
解决方案
在Principal
这种情况下,将是 Lambda 本身运行的 IAM 角色,如下所示(根据需要替换aws-account-id和role-name):
Principal: arn:aws:iam::aws-account-id:role/role-name
推荐阅读
- node.js - 连接到 MongoDb Atlas 服务器时出错
- java - 在java中创建一个saop消息
- c++ - sscanf 到 uint8 在 vxWorks 平台上不起作用
- random - FFMpeg random 是否会为连续执行生成相同的伪随机数序列?
- excel - 如何将工作表作为值复制到另一个工作表
- android - Android FlexBox 布局仅显示固定数量的行
- windows - 脚本运行时 PowerShell 更新变量
- c# - 实现一个接口,该接口继承自两个具有相同方法的接口
- python-3.x - 如何使用 BeautifulSoup 更新具有不同值的 XML 的所有子子标签
- excel - 我希望能够“锁定”或“保护”我使用密码“x”正确选择的单元格的内容