旧的 AWS Lambda 层是否会自动删除?如果没有,如何删除它们?

Are old AWS Lambda layers automatically removed? If not, how to delete them?

在阅读讨论使用 AWS Lambda 函数的主要缺点的 this article 后,我试图避免作者必须处理的问题并对我自己的代码执行一些清理:

"Lambda versions every function. We use the Serverless Framework for developing Lambda application. This means that Serverless creates Lambda functions. Our average Lambda function is about 60MB. [...]
When you couple CI/CD with rapid development and Lambda functions, you get many versions. Hundreds even. And Lambda code storage is limited to 75GB. We hit that limit, and we hit it hard. After two years of CI/CD driven development, our lack of version cleanup led to complete gridlock in our development process."

(强调我的)

关于我的架构。我有 lambda 函数,可以从存储在 layers 中的自制 python 包中调用方法。目标是避免在 lambda 中包含太多代码并轻松重用它们之间的功能。

现在,我找到了如何删除我的 lambda 函数的旧版本(我也在使用无服务器框架,它提供了一个很好的插件,可以在部署堆栈时自动修剪它们)。但是,我不知道旧层是否会被 AWS 自动删除:我还没有找到一个仪表板来汇总我所有层版本的总代码大小,而且我找不到可以自动删除它们的插件。

是否会自动删除旧的 AWS Lambda 层?如果没有,我如何批量删除它们?

不会自动删除旧图层。你可以run a CLI command比如下面删除一个图层version:

$ aws lambda delete-layer-version --layer-name my-layer --version-number 1

这里的关键点是你正在删除图层的一个版本。您可以在循环中 运行 上面的命令来批量删除一堆层版本,也许结合对 list-layer-versions 的调用。您还可以通过控制台删除图层版本。删除层的所有版本后,层本身也会被删除。 link 的其他一些有趣的观点是

When you delete a layer version, you can no longer configure functions to use it. However, any function that already uses the version continues to have access to it. Version numbers are never re-used for a layer name.

文档没有具体说明保留在 lambda 中而函数仍然引用它的 "deleted" 层是否计入总大小配额。

另见

To avoid breaking functions, a copy of the version remains in Lambda until no functions refer to it.