【发布时间】:2018-12-28 03:22:18
【问题描述】:
我有一个网站可以动态创建附加了 cron 事件的规则。所有这些规则都关联并调用单个 lambda 函数。
我正在使用 python 和 boto3 生成规则并将它们应用于 Lambda 函数。 (如果查看生成规则和事件的 Python 代码会有所帮助,我很乐意将其包含在此处。)
这一切都有效,但是在使用我的网站并创建了大约 68 条规则后,我收到了这个错误:
PolicyLengthExceededException: An error occurred (PolicyLengthExceededException) when calling the AddPermission operation: The final policy size (20642) is bigger than the limit (20480).
每次创建规则及其事件时,都需要向 lambda 的 Function Policy 添加权限,大约 68 条规则后,Function Policy 变得过大。
我该如何解决这个问题?
这是一个示例权限:
{
"Sid": "<some_random_id_for_this_permission",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:<some_arn_id>:function:_MyFunction",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events<some_arn_id>:rule/my_rule_1"
}
}
AWS:SourceArn 是规则的唯一值,所以我想我可以使用* 来授予所有规则的权限。所以我尝试将 AWS:SourceArn 的值设为:
arn:aws:events<some_arn_data>:rule/*
但在功能仪表板上,在 CloudWatch 事件列表所在的位置,它只说:
The rule * could not be found.
有没有办法让权限适用于所有规则?
如果没有,有没有其他方法可以解决这个问题?
如果没有办法直接解决这个问题,我可以为网站上的每条记录创建一个单独的 lambda,而不是为每个都指向一个 lambda 的记录创建单独的规则。有什么理由为什么创建一个单独的 lambda 会是一个坏主意?比如你可以拥有的 Lambda 函数的数量是否有限制?
【问题讨论】:
-
第一个问题:控制台显示错误,但
rule/*真的有效吗?ArnLike暗示 like 与通配符匹配,所以这听起来有点像控制台有点过于“有用”并显示一个实际上不存在的虚构错误。 -
哈,它确实有效。我所有的 cron 事件每天触发一次,所以我从来没有真正去测试它们。我做了一个每分钟运行一次,结果他们确实运行了。由于该规则没有显示在该函数的云事件列表中,而是显示了一个错误,所以我认为它不起作用。我猜亚马逊需要在他们的 lambda 函数上修复他们的 GUI 仪表板逻辑。谢谢!如果你想把它作为答案,我很乐意接受。
标签: python amazon-web-services aws-lambda boto amazon-cloudwatch