无法删除AWS Lambda@Edge的副本

42

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

我创建了一个AWS Lambda@Edge函数,以便在访问源之前重写Cloudfront URL。
当发布时,AWS Lambda@Edge函数会自动在所有地区复制,所以看到每个地区都有这个函数并不令我惊讶。

enter image description here

问题开始了
因为这只是一个测试,我删掉了Lambda@Edge,并想重新开始一个新的,但副本没有同时被删除。
当时觉得没什么大不了的,我以为我可以简单地创建一个新的Lambda@Edge函数。
但不行,因为Cloudfront触发器一次只能使用一个函数(由于副本正在使用它,你不能创建新的函数)。
此外,触发器也无法删除

所以现在我被无法删除的Lambda@Edge副本束缚住,也无法创建类似的副本。


TL;DR

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

对于此问题,我将非常感谢您提供帮助
François


编辑:

我肯定认为这是一个错误,因为在我的复制页面上,指向主ARN的链接返回了404错误。


你尝试删除源Lambda函数中的触发器了吗?我可以看到在指定版本限定符的源Lambda函数中有触发器,并且删除是可以执行的。但是,即使触发器被删除了,副本Lambda函数仍然存在。 - Yu Liang
通过“源Lambda函数”,我猜你指的是我最初创建的Lambda@Edge。那个我已经删除了,所以我无法删除触发器,因为Lambda本身不再存在... - Francois
8个回答

34

我找到了部分答案:

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

  • 进入您的Cloudfront分发的behaviors(行为)
  • 查看触发LambdaEdge的behaviors(行为)
  • 点击Edit(编辑)
  • 在页面底部点击X以删除该触发器

虽然我仍无法删除副本,但至少我可以为此触发器创建新的lambda函数…


是的,这是目前唯一的解决方案。 - rfmoz
4
我与AWS峰会上的一位架构师讨论了这个问题。你的解决方案是正确的(即删除与每个行为相关联的触发器)。你不能立即删除该函数(因为它是复制的,删除此关联需要时间),但是如果你给它24小时来传播,然后就可以删除该函数了。 - James Lelyveld
3
我有一些Lambda函数,其中CloudFront分发已被删除了一个星期,但我仍然无法删除它们。最终,我创建了一个新的CloudFront分发,并将其添加为触发器,然后删除了该触发器。在分发更新后,我才能够删除这些Lambda函数。 - MGH
12
如果 CloudFormation 已经删除了 CloudFront 分发,你该怎么办? - badsyntax
除了等待之外,如果像 Terraform 这样的工具已经删除了 CloudFront 分发,你还能做什么? - UrbanConor

11
现在有一份文档 在此 指出,副本会在“几个小时”后被删除 - 这意味着我可以删除Lambda函数。
更新2020-01-05: 如果您删除Lambdas,则需要约1个小时才能全部清除!因此它只是慢一些,但表现类似于普通的Lambdas?

2
如果这总是真实的就好了。我曾经遇到过这种情况,有时候可以,有时候不行。例如,我有一个L@E函数,已经超过24小时没有与CF分发相关联,但我仍然无法删除它! - KJH
很遗憾听到这个消息,对我来说,到目前为止,它总是在1-2小时后才能正常工作。不得不承认,我的用户只在欧洲。 - lony
在我的特定情况下,我完全删除了Cloudfront分发,因此无法像其他答案建议的那样修改其配置。幸运的是,我只需要等待约一个小时,就能够删除相关的Edge@Lambda。 - Fearnbuster
1
请注意,有时删除可能非常快,远远不到1小时。因此,在您可以的时候尽早尝试删除是值得的。 - UrbanConor

5

嗨,francoisyvesreki,我已经找到了删除Lambda@edge副本的解决方案。

  1. 首先,登录CloudFront控制台并转至您的Distribution(分发)
  2. Behaviors(行为)选项卡下-勾选列出的Behavior(行为)编辑
  3. 向下滚动到Lambda函数关联,并通过单击X来删除任何关联。
  4. 点击是的,编辑以保存更改。 --- 现在,您已经删除了关联,是时候删除Lambda@edge副本了。
  5. 进入Lambda控制台并打开您要删除的lambda。
  6. 在顶部菜单中 - Qualifiers(限定符) -> Versions(版本)->选择列出的下拉版本enter image description here
  7. 它将打开@edgeLambda版本
  8. 在顶部菜单中 - Actions(操作)-> Delete version(删除版本)enter image description here
  9. 这样,删除所有版本,您将只剩下$LATEST
  10. 也要删除它 - 您最终能够删除Lambda@edge函数。

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

希望这对您有用,尽情享受 :)


1
我卡在无法删除最新版本和$LATEST版本上,因为它一直告诉我无法删除复制的版本:( - Pherrymason
切换到特定版本仍然返回相同的错误。我没有剩余的CF分发,已经过去5个小时了。 - Titan

5
我向AWS支持团队提问这个问题,他们的回答是:“目前您无法删除复制的Lambda函数,但我们了解到很多人都需要这样做”。
AWS Lambda@Edge会在全球各地的AWS区域和CloudFront边缘位置复制函数。请注意,副本不能被编辑或删除。详细信息请参见http://docs.aws.amazon.com/es_es/lambda/latest/dg/lambda-edge.html

你说得对,我在文档中也看到了。不过,也许他们应该解释一下如何在行为中删除触发器,以便能够重新创建该触发器上的 Lambda。 - Francois

1

1

我遇到了类似的问题,我的Lambda@Edge根本没有任何Cloudfront触发器; 但是,我仍然无法删除它。 我尝试了以下步骤,这些步骤对我有所帮助:

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

1
即使我尝试过删除触发器然后创建 Lambda(在我的情况下,Lambda 已经接近 30 个),但我无法创建新的 Lambda@edge。最终我这样做了:
移除与 Lambda 函数关联的 CloudFront 分发,现在可以简单地继续前进。请确保分发仅由相关 Lambda 使用。

0

我遇到了类似的问题,但是通过等待几分钟来删除副本,解决了这个问题,因为AWS需要一些时间来完全删除所有副本。在过程完成后,我成功地删除了边缘lambda。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接