向函数添加层 - AWS Lambda

向函数添加层

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

本部分介绍如何向 Lambda 函数添加层。有关层的更多概念性信息以及您可能会考虑使用层的原因,请参阅 使用层管理 Lambda 依赖项

在将 Lambda 函数配置为使用层之前,您必须:

您最多可以在 Lambda 函数中添加五个层。函数和所有层的总解压缩大小不能超出 250 MB 的解压缩部署程序包大小配额。有关更多信息,请参阅 Lambda 配额

即使在删除该层版本或撤消该层的访问权限后,函数也可以继续使用已添加的任何层版本。但是,您无法创建使用已删除层版本的新函数。

注意

确保添加到函数的层与函数的运行时系统和指令集架构兼容。

向函数添加层(控制台)
  1. 打开 Lamba 控制台的函数页面

  2. 选择要配置的函数。

  3. 下,选择添加层

  4. 选择层下,选择一个层源:

    1. 对于 AWS 层自定义层层源,请从下拉菜单中选择一个层。在版本下,从下拉菜单中选择层版本。

    2. 对于指定 ARN 层源,请在文本框中输入 ARN 并选择验证。然后,选择添加

添加层的顺序就是 Lambda 将层内容合并到执行环境中的顺序。您可以使用控制台更改层合并顺序。

更新函数的层合并顺序(控制台)
  1. 打开 Lamba 控制台的函数页面

  2. 选择要配置的函数。

  3. 下,选择编辑

  4. 选择其中一个图层。

  5. 选择提前合并或者稍后合并以调整层的顺序。

  6. 选择保存

层受版本控制。每个层版本的内容都是不可变的。层所有者可以发布新的层版本以提供更新内容。您可以使用控制台更新附加到函数的层版本。

更新函数的层版本(控制台)
  1. 打开 Lambda 控制台的 Layers page(层页面)。

  2. 选择要为其更新版本的层。

  3. 选择使用此版本的函数选项卡。

  4. 选择要修改的函数,然后选择编辑

  5. 层版本中,选择要更改的目标层版本。

  6. 选择 Update functions(更新函数)。

不能跨 AWS 账户更新函数的层版本。

通过函数访问层内容

如果 Lambda 函数包含层,Lambda 会将层的内容提取到函数执行环境中的 /opt 目录。Lambda 按函数列出的顺序(从低到高)提取层。Lambda 会合并同名文件夹。如果同一文件出现在多个层中,则该函数将使用上次提取的层中的版本。

每个 Lambda 运行时系统都会将特定的 /opt 目录文件夹添加到 PATH 变量。函数代码无需指定路径即可访问层内容。有关 Lambda 执行环境中路径设置的更多信息,请参阅 定义运行时环境变量

请参阅 每个 Lambda 运行时的层路径 以了解创建层时在何处纳入库。

如果您使用的是 Node.js 或 Python 运行时系统,则可使用 Lambda 控制台中的内置代码编辑器。您能够导入作为层添加到当前函数的任何库。

查找层信息

要查找账户中与函数运行时系统兼容的层,请使用 ListLayers API。例如,您可以使用以下 list-layers AWS Command Line Interface(CLI)命令:

aws lambda list-layers --compatible-runtime python3.9

您应该可以看到类似于如下所示的输出内容:

{ "Layers": [ { "LayerName": "my-layer", "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LatestMatchingVersion": { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2023-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "python3.9", "python3.10", "python3.11", ] } } ] }

要列出账户中的所有层,您可以省略 --compatible-runtime 选项。响应详细信息显示了每层的最新版本。

您还可以使用 ListLayerVersions API 获取层的最新版本。例如,您可以使用以下 list-layer-versions CLI 命令:

aws lambda list-layer-versions --layer-name my-layer

您应该可以看到类似于如下所示的输出内容:

{ "LayerVersions": [ { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2023-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "java11" ] }, { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1", "Version": 1, "Description": "My layer", "CreatedDate": "2023-11-15T00:27:46.592+0000", "CompatibleRuntimes": [ "java11" ] } ] }