在阅读本文讨论使用 AWS Lambda 函数的主要缺点时,我试图避免作者必须处理的内容,并对我自己的代码执行一些清理:
">Lambda 对每个函数进行版本控制。我们使用无服务器框架来开发 Lambda 应用程序。这意味着无服务器创建 Lambda 函数。我们的平均 Lambda 函数约为 60MB。[...]
当您将 CI/CD 与快速开发和 Lambda 函数相结合时,您将获得许多版本。甚至数百。Lambda 代码存储限制为 75GB。我们达到了这个极限,我们重创了它。经过两年的 CI/CD 驱动开发,我们缺乏版本清理导致我们的开发过程完全陷入僵局。
(强调我的(
关于我的架构。我有lambda函数,可以从自制的python包中调用方法,这些方法存储在层中。目标是避免在 lambda 中使用过多的代码,并轻松重用其中的功能。
现在,我找到了如何删除旧版本的lambda函数(我也在使用无服务器框架,它提供了一个很好的插件,可以在部署堆栈时自动修剪它们(。但是,我不知道 AWS 是否会自动删除旧层:我还没有找到一个汇总我所有层版本的总代码大小的控制面板,而且我找不到自动删除它们的插件。
旧的 AWS Lambda 层会自动删除吗?如果没有,我该如何批量删除它们?
旧图层不会自动删除。 您可以运行如下所示的 CLI 命令来删除图层版本:
$ aws lambda delete-layer-version --layer-name my-layer --version-number 1
此处的关键点是您要删除图层的一个版本。 您可以在循环中运行上述命令以批量删除一堆图层版本,也许可以与对列表图层版本的调用结合使用。 您也可以通过控制台删除图层版本。 移除图层的所有版本后,图层本身也会被删除。 该链接中的其他一些有趣点是
删除图层版本后,无法再配置函数 来使用它。但是,任何已使用该版本的函数 继续可以访问它。版本号永远不会重复用于 图层名称。
该文档没有指定在 lambda 中保留的"已删除"层,而函数仍引用它是否计入您的总大小配额。
另请参阅
- https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-layer-version.html 哪些状态
为避免破坏函数,版本的副本保留在 Lambda 中 直到没有函数引用它。
这个答案是不正确的,尽管解释很奇怪。
是的,如果没有对该版本的引用,则会删除旧版本的 lambda 层。(垃圾回收方式(
当前行为是:如果您部署 lambda 层并将 lambda 附加到该 lambda 层,然后将更新部署到该 lambda 层,则不会发生任何事情。
但是,如果您随后更新 lambda 以指向该层的最新版本,并且没有对该层的先前版本的其他引用,则该版本似乎被删除。
要小心,因为如果您需要回滚,您可能会不走运。