无法删除 AWS Lambda@Edge 副本

Cannot delete AWS Lambda@Edge replicas

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

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

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

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


TL;DR

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


编辑:

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

我找到了部分答案:

原来我需要删除Cloudfront行为中的触发器
简单地说:

  • 转到您的 Cloudfront 分配的行为
  • 检查触发 LambdaEdge 的那个
  • 点击Edit
  • 转到页面最底部,然后单击 X 删除触发器

仍然,我无法删除副本,但至少我可以为此触发器创建新的 lambdas...

我向 AWS 支持部门询问了这个问题,得到的回答是:"you cannot delete replicated lambda functions for now, but we understand many people requires this".

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

When you create a trigger, Lambda replicates the function to AWS Regions and CloudFront edge locations around the globe. Note that replicas can't be edited or deleted.

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

Removed the cloud-front distribution which is associated with lambda function, now its simple to move further. Please assure that distribution only used by that related lambda.

现在有一份文档 here 说明副本在 "few hours" 之后被删除 - 这意味着我随后也可以删除 Lambda 函数。

2020 年 1 月 5 日更新:如果删除 Lambda 表达式,大约需要 1 小时,一切都会消失!所以它只是速度较慢但行为类似于普通的 Lambdas?

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

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

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

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

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

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

希望这对您有用,祝您愉快:)

使用旧的 AWS 控制台

直到这个日期,the documentation mentions the old solution mentioned also by

使用新的 AWS 控制台

在控制台的新界面中,转到:

CloudFront > Distributions > **DistribName** > Edit behavior

那你可以把Function type改成No association然后Save changes就可以了。

我有一个类似的问题,我的 Lambda@Edge 根本没有任何 Cloudfront 触发器;但是,我仍然无法删除它。我尝试了以下方法并有所帮助,

  • 创建一个新的 Cloudfront 分配,并将您的 Lambda@Edge 与这个新分配相关联。
  • 等待分发完全部署。
  • 从您刚刚创建的 Cloudfront 分配中删除 Lambda@Edge 的关联。
  • 等待分发完全部署。
  • 另外,再等几分钟。
  • 然后,尝试删除您的 Lambda@Edge。