无法删除 AWS Lambda@Edge 副本

Posted

技术标签:

【中文标题】无法删除 AWS Lambda@Edge 副本【英文标题】:Cannot delete AWS Lambda@Edge replicas 【发布时间】:2017-12-31 00:05:15 【问题描述】:

这个问题已经存在here 但我认为它会对 SO 产生更大的影响。

我创建了一个 AWS Lambda@Edge 函数,以便在 Cloudfront URL 到达源之前重写它们。 AWS Lambda@Edge 函数在发布时会自动复制到所有区域,所以在每个区域看到这一点我并不感到惊讶:

问题从这里开始: 我删除了 Lambda@Edge,因为它是一个测试,我想开始一个新的,但是副本没有同时被删除。 当时没什么大不了的,我想我可以简单地创建一个新的 Lambda@Edge 函数。 但是您不能,因为Cloudfront 触发器一次只能使用一个功能(因为副本使用它,您不能创建一个新功能)。 此外,触发器也不能删除

所以现在我到处都使用 Lambda@Edge 副本,无法删除,也无法创建类似的副本。


TL;DR

我使用 CloudFront 触发器创建了 Lambda@Edge 我删除了它以创建一个新的(类似的) 现在还有一个副本存在 我无法删除副本 我无法创建新的 Lambda@Edge,因为触发器已被副本“使用”(我无法删除)

如果能得到这方面的帮助,我将不胜感激 弗朗索瓦


编辑:

我绝对认为这是一个错误,因为在我的副本页面中,指向 Master ARN 的链接以 404 响应。

【问题讨论】:

您是否尝试在源 lambda 函数中删除触发器?我可以在版本限定符指定的源 lambda 函数中看到触发器,并且删除有效。但是,即使触发器被删除,副本 lambda 函数仍然存在。 source lambda function,我猜你的意思是我最初创建的 Lambda@Edge。那是我删除的那个,所以我无法删除触发器,因为 Lambda 本身不再存在...... 【参考方案1】:

我找到了部分答案:

事实证明,我需要删除 Cloudfront 行为中的触发器。 简单地说:

转到 Cloudfront 分发的行为 检查触发 LambdaEdge 的那个 点击Edit 在页面最底部点击X删除触发器

尽管如此,我无法删除副本,但至少我可以为此触发器创建新的 lambda...

【讨论】:

是的,这是目前唯一的解决方案。 所以我在 AWS 峰会上与架构师讨论了这个问题。您的解决方案是正确的(即删除与其关联的每个行为中的触发器)。您将无法立即删除该函数(因为它已被复制,因此删除此关联需要时间),但是如果您给它 24 小时以使其传播,您就可以删除该函数。 我有一些 Lambda,其中 CloudFront 分配已被删除一周,但我仍然无法删除它们。我最终制作了一个新的 CloudFront 分配,将其添加为触发器,然后删除触发器。然后在更新发行版后,我可以删除 Lambdas 如果 Cloudformation 已经删除了 Cloudfront 发行版,您会怎么做?【参考方案2】:

我向 AWS 支持人员询问了这个问题,它的回答是:“你现在不能删除复制的 lambda 函数,但我们知道很多人需要这个”。

AWS Lambda@Edge http://docs.aws.amazon.com/es_es/lambda/latest/dg/lambda-edge.html

当您创建触发器时,Lambda 将该函数复制到 AWS 全球区域和 CloudFront 边缘站点。注意 无法编辑或删除副本。

【讨论】:

你说得对,我在文档中读到了这一点。不过,也许他们应该解释如何删除行为中的触发器,以便能够在该触发器上重新创建 lambda。【参考方案3】:

即使我尝试*删除触发器然后创建 lambda(在我的情况下 lambda 达到近 30)*,但我无法创建新的 lambda@edge。最后我做到了

移除了与 lambda 函数相关的云端分布, 现在它很容易进一步移动。请确保该发行版仅由该相关 lambda 使用。

【讨论】:

【参考方案4】:

现在有一个文档 here 声明副本在“几个小时”后被删除 - 这意味着我也可以删除 Lambda 函数。

2020-01-05 更新:如果您删除 Lambda,大约需要 1 小时,然后一切都消失了!所以它只是速度较慢,但​​行为类似于普通 Lambda?

【讨论】:

如果这一直都是真的。我有这两个工作和不工作。例如,我有一个 L@E 函数,超过 24 小时没有与 CF 分发关联,我仍然无法删除它! 听到这个消息很难过,对我来说,到目前为止,它总是在 1-2 小时后起作用。不得不承认我只有欧洲的用户。 在我的特定场景中,我完全删除了 Cloudfront 发行版,因此我无法像其他一些答案所建议的那样修改其配置。幸运的是,我只需要等待大约一个小时,就可以删除关联的 Edge@Lambda。【参考方案5】:

我找到的最佳答案可以删除该功能,请按照以下步骤操作:

    对于已部署函数的每个版本,删除该特定函数的触发器。 等待几个小时,直到 AWS 自动删除该特定功能的所有已部署副本。 自动删除所有副本后,再次尝试删除 Lambda 函数。你应该成功了。

来源:https://adrian.simionov.io/aws/2019/08/28/deleting-lambda-at-edge-functions.html

【讨论】:

【参考方案6】:

您好francois, yves, reki 我已经找到删除 Lambda@edge 副本的解决方案。

    首先,登录 CloudFront 控制台并转到您的Distribution。 在行为选项卡下 - 勾选列出的行为编辑 向下滚动到 Lambda 函数关联并通过单击 X 删除任何关联。 按是,编辑保存更改。 --- 现在您已经删除了关联,是时候删除 Lambda@edge 副本了 转到 Lambda 控制台并打开您的 lambda(您要删除)。 在顶部菜单 - Qualifiers -> Versions-> 选择列出的下拉版本 它将打开@edgeLambda 版本 在顶部菜单 - 操作 -> 删除版本 这样,删除所有版本 - 您只剩下 $LATEST 同时删除 - 您终于可以删除 Lambda@edge 函数

注意!>请记住删除与 Lambda@edge 函数关联的任何 IAM 角色和权限。

我希望这对你有用,享受:)

【讨论】:

我一直无法删除最新版本和 $LATEST 版本,因为它一直说我无法删除复制版本:( 切换到特定版本仍然返回相同的错误。我已经没有 CF 分发了,已经 5 小时了

以上是关于无法删除 AWS Lambda@Edge 副本的主要内容,如果未能解决你的问题,请参考以下文章

AWS lambda 和 AWS Lambda@EDGE 有啥区别?

使用 Lambda@Edge 在边缘站点自定义内容

您是否可以使用除Javascript以外的语言使用Lambda @ Edge修改AWS CloudFront事件的URI?

使用 AWS Cognito 保护 REST API

如何在使用 lambda@edge 调整图像大小时修复访问被拒绝错误

使用 Lambda Edge(带有 Cloudfront 触发器)动态调整图像大小