如何使用具有 Docker 的模拟 Lambda 环境创建 Lambda 层?

上次更新时间:2021 年 10 月 11 日

我想创建一个与目标环境运行时兼容的 AWS Lambda 层。该如何操作?

简短描述

在构建 Lambda 函数时,您要在受支持的 Lambda 运行时版本之间进行选择。要创建与特定运行时兼容的 Lambda 函数和层,您可以执行以下任意一项操作:

有关更多信息,请参阅创建和共享 Lambda 层

解决方法

注意:如果您在运行 AWS Command Line Interface(AWS CLI)命令时遇到错误,请确保您运行的是最新版本的 AWS CLI

以下说明使用 Python 作为编程语言,并以基于 Linux 的计算机平台为例。对于其他编程语言和平台,请相应地调整步骤。

在计算机上安装 Docker

如果还没有安装 Docker,在您的计算机上安装适用于 LinuxWindows,或 macOS 的 Docker。

创建适当的目录结构,并在 pip 要求文件 (requirements.txt) 中指定您的依赖关系。

有关创建目录结构的详细信息,请参阅在层中包含库依赖关系。有关指定依赖关系的更多信息,请参阅 pip 用户指南中的要求文件

与 Python 版本 3.6 和 3.8 兼容的 Lambda 层的目录结构示例

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

注意:函数和所有层的解压总大小不得超过部署程序包的解压大小限制,即 250MB。如需关于在 Lambda 中受支持的 Python 版本的更多信息,请参阅使用 Python 构建 Lambda 函数

根据您在目录结构中指定的运行时,将库依赖关系安装到相应的子文件夹中

为您在目录结构中指定的每个运行时运行以下 AWS CLI 命令一次。

重要提示:根据您要安装的兼容的库,将 3.6 替换为 3.73.8

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

为层创建 .zip 存档文件

运行以下命令来压缩 python 文件夹并创建层程序包:

注意:您可以使用您偏好的任何名称替换 mypythonlibs

zip -r mypythonlibs.zip python > /dev/null

.zip 文件在 Lambda 环境的 /opt 文件夹中被压缩。可以通过您的 Lambda 函数代码访问 /opt 文件夹。

创建或更新层

运行以下命令以创建或更新 Lambda 层:

重要提示:确保包含您在之前指定的兼容的运行时。用您在上一步中使用的程序包的名称替换 mypythonlibs。将 My python libs 替换成您偏好的任何描述。

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

查看输出并复制层的 Amazon Resource Name (ARN)。您需要层的 ARN 才能完成下一步。

更新您的 Lambda 函数配置以使用相关层

运行以下命令来更新您的 Lambda 函数配置以使用该层:

重要提示:使用层 ARN 替换 arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(可选)将 Docker 映像用于您的 Lambda 程序包而不是 AWS SAM 文件

您还可以使用 amazon/aws-sam-cli-build-image Docker images 创建 Lambda 程序包,而不是使用 AWS SAM 文件。使用 Docker 映像允许您在不创建层的情况下创建程序包。

1.    运行以下命令以获得您的依赖关系的所需版本:

重要提示:根据您要安装的兼容的库,将 3.6 替换为 3.73.8

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    创建一个 Lambda 部署程序包,其中包含您的函数代码和正确的库。