

# 在 Lambda 中创建和删除层
<a name="creating-deleting-layers"></a>

Lambda 层是包含补充代码或数据的 .zip 文件存档。层通常包含库依赖项、[自定义运行时系统](runtimes-custom.md)或配置文件。

本部分介绍如何在 Lambda 中创建和删除层。有关层的更多概念性信息以及您可能会考虑使用层的原因，请参阅 [使用层管理 Lambda 依赖项](chapter-layers.md)。

[打包层内容](packaging-layers.md)完成后，下一步是在 Lambda 中创建层。本部分演示如何仅使用 Lambda 控制台或 Lambda API 创建和删除层。要使用 AWS CloudFormation 创建层，请参阅 [与层结合使用 AWS CloudFormation](layers-cfn.md)。要使用 AWS Serverless Application Model（AWS SAM）创建层，请参阅 [与层结合使用 AWS SAM](layers-sam.md)。

**Topics**
+ [创建层](#layers-create)
+ [删除层版本](#layers-delete)

## 创建层
<a name="layers-create"></a>

您可以从本地计算机或 Amazon Simple Storage Service（Amazon S3）上传 .zip 文件存档。从 Amazon S3 上传时，您可以选择是让 Lambda 将代码复制到 Lambda 托管式存储，还是直接从 S3 存储桶中引用代码。有关更多信息，请参阅 [自行管理的 S3 代码存储](configuration-self-managed-storage.md)。

设置函数的执行环境时，Lambda 将图层内容提取到 `/opt` 目录。

层可以有一个或多个[层版本](chapter-layers.md#lambda-layer-versions)。创建层时，Lambda 将层版本设置为版本 1。您可以随时更改现有层版本的权限。但是，要更新代码或进行其他配置更改，必须创建该层的新版本。

**创建层（控制台）**

1. 打开 Lambda 控制台的 [Layers page](https://console.aws.amazon.com/lambda/home#/layers)（层页面）。

1. 选择 **Create layer**（创建层）。

1. 在 **Layer configuration**（层配置）下，在 **Name**（名称）中，输入层的名称。

1. （可选）对于 **Description**（描述），输入对层的描述。

1. 要上载层代码，请执行以下操作之一：
   + 要从电脑上传 .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），输入文件的链接。

1. 如果选择从 Amazon S3 上传，请在**代码存储模式**下选择下列选项之一：
   + **复制模式（默认）**
   + **引用模式**

1. （可选）对于**兼容架构**，选择一个值或两个值。有关更多信息，请参阅 [为 Lambda 函数选择和配置指令集架构](foundation-arch.md)。

1. （可选）对于**兼容的运行时系统**，选择与层兼容的运行时系统。

1. （可选）对于 **License**（许可证），输入任何必要的许可证信息。

1. 选择**创建**。

或者，您可以运行 [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) AWS Command Line Interface（CLI）命令。从 Amazon S3 上传时，请包含 `S3ObjectStorageMode=REFERENCE` 以使用[自行管理的 S3 代码存储](configuration-self-managed-storage.md)，或者将其省略（默认为 `COPY`）以使用 Lambda 托管式存储。示例：

```
aws lambda publish-layer-version --layer-name {{my-layer}} --zip-file fileb://layer.zip --compatible-runtimes {{python3.14}}
```

每次运行 `publish-layer-version` 时，Lambda 都将创建一个新[版本的层](chapter-layers.md#lambda-layer-versions)。

## 删除层版本
<a name="layers-delete"></a>

要删除层版本，请使用 [DeleteLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteLayerVersion.html) API 操作。例如，运行 [delete-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-layer-version.html) AWS CLI 命令并指定层名称和层版本。

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

在删除一个层版本后，您将不再能将新函数配置为使用该层。但已经引用已删除层版本的任何函数仍可使用该层的内容。Lambda 永远不会在层名称中重复使用版本号。

### 删除层对存储配额的影响
<a name="layers-delete-storage"></a>

删除层版本对存储配额的影响，取决于该层以及引用该层的函数所使用的存储模式。

层使用 Lambda 托管式存储 (COPY)  
删除使用 Lambda 托管式存储的层版本时，该层代码将从您账户的 Lambda 托管式存储配额中移除。但仍然引用已删除层版本的任何函数将继续能够访问该层的内容。层内容会占用函数的部署包大小配额（250 MB 未压缩），但不会再占用账户级别的 Lambda 托管式存储配额。

层使用自行管理的 S3 存储 (REFERENCE)  
使用[自行管理的 S3 代码存储](configuration-self-managed-storage.md)的层不会消耗 Lambda 托管式存储，因此删除此类层不会影响您的 Lambda 托管式存储配额。引用已删除的自行管理层版本的函数可继续正常运行。但如果您同时从 S3 存储桶中删除了源对象或撤消了 Lambda 对源对象的访问权限，则将不再能更新使用该层的函数配置。

**注意**  
删除层版本永远不会停用引用该版本的函数。无论该层使用的是 Lambda 托管式存储还是自行管理的 S3 存储，函数都将保留 `Active` 状态。仅当 Lambda 无法访问存储在自行管理的 S3 存储桶中的函数自有源代码时，才会变为 `Inactive` 状态。