在 Lambda 中创建和删除层
Lambda 层是包含补充代码或数据的 .zip 文件存档。层通常包含库依赖项、自定义运行时系统或配置文件。
本部分介绍如何在 Lambda 中创建和删除层。有关层的更多概念性信息以及您可能会考虑使用层的原因,请参阅 使用层管理 Lambda 依赖项。
打包层内容完成后,下一步是在 Lambda 中创建层。本部分演示如何仅使用 Lambda 控制台或 Lambda API 创建和删除层。要使用 AWS CloudFormation 创建层,请参阅 与层结合使用 AWS CloudFormation。要使用 AWS Serverless Application Model(AWS SAM)创建层,请参阅 与层结合使用 AWS SAM。
创建层
您可以从本地计算机或 Amazon Simple Storage Service(Amazon S3)上传 .zip 文件存档。从 Amazon S3 上传时,您可以选择是让 Lambda 将代码复制到 Lambda 托管式存储,还是直接从 S3 存储桶中引用代码。有关更多信息,请参阅 自行管理的 S3 代码存储。
设置函数的执行环境时,Lambda 将图层内容提取到 /opt 目录。
层可以有一个或多个层版本。创建层时,Lambda 将层版本设置为版本 1。您可以随时更改现有层版本的权限。但是,要更新代码或进行其他配置更改,必须创建该层的新版本。
创建层(控制台)
-
打开 Lambda 控制台的 Layers page
(层页面)。 -
选择 Create layer(创建层)。
-
在 Layer configuration(层配置)下,在 Name(名称)中,输入层的名称。
-
(可选)对于 Description(描述),输入对层的描述。
-
要上载层代码,请执行以下操作之一:
-
要从电脑上传 .zip 文件,请选择 Upload a .zip file(上传 .zip 文件)。然后,选择 Upload(上载)以选择本地 .zip 文件。
-
要从 Simple Storage Service(Amazon S3)上传文件,请选择 Upload a file from Amazon S3 [从 Simple Storage Service(Amazon S3)上传文件]。然后,对于 Amazon S3 link URL(Simple Storage Service (Amazon S3) 链接 URL),输入文件的链接。
-
-
(可选)对于兼容架构,选择一个值或两个值。有关更多信息,请参阅 为 Lambda 函数选择和配置指令集架构。
-
(可选)对于兼容的运行时系统,选择与层兼容的运行时系统。
-
(可选)对于 License(许可证),输入任何必要的许可证信息。
-
选择创建。
或者,您可以运行 publish-layer-versionS3ObjectStorageMode=REFERENCE 以使用自行管理的 S3 代码存储,或者将其省略(默认为 COPY)以使用 Lambda 托管式存储。示例:
aws lambda publish-layer-version --layer-namemy-layer--zip-file fileb://layer.zip --compatible-runtimespython3.14
每次运行 publish-layer-version 时,Lambda 都将创建一个新版本的层。
删除层版本
要删除层版本,请使用 DeleteLayerVersion API 操作。例如,运行 delete-layer-version
aws lambda delete-layer-version --layer-name my-layer --version-number 1
在删除一个层版本后,您将不再能将新函数配置为使用该层。但已经引用已删除层版本的任何函数仍可使用该层的内容。Lambda 永远不会在层名称中重复使用版本号。
删除层对存储配额的影响
删除层版本对存储配额的影响,取决于该层以及引用该层的函数所使用的存储模式。
- 层使用 Lambda 托管式存储 (COPY)
-
删除使用 Lambda 托管式存储的层版本时,该层代码将从您账户的 Lambda 托管式存储配额中移除。但仍然引用已删除层版本的任何函数将继续能够访问该层的内容。层内容会占用函数的部署包大小配额(250 MB 未压缩),但不会再占用账户级别的 Lambda 托管式存储配额。
- 层使用自行管理的 S3 存储 (REFERENCE)
-
使用自行管理的 S3 代码存储的层不会消耗 Lambda 托管式存储,因此删除此类层不会影响您的 Lambda 托管式存储配额。引用已删除的自行管理层版本的函数可继续正常运行。但如果您同时从 S3 存储桶中删除了源对象或撤消了 Lambda 对源对象的访问权限,则将不再能更新使用该层的函数配置。
注意
删除层版本永远不会停用引用该版本的函数。无论该层使用的是 Lambda 托管式存储还是自行管理的 S3 存储,函数都将保留 Active 状态。仅当 Lambda 无法访问存储在自行管理的 S3 存储桶中的函数自有源代码时,才会变为 Inactive 状态。