如何使用具有 Docker 的模拟 Lambda 环境创建 Lambda 层?
上次更新时间:2021 年 10 月 11 日
我想创建一个与目标环境运行时兼容的 AWS Lambda 层。该如何操作?
简短描述
在构建 Lambda 函数时,您要在受支持的 Lambda 运行时版本之间进行选择。要创建与特定运行时兼容的 Lambda 函数和层,您可以执行以下任意一项操作:
- 使用 AWS Serverless Application Model (AWS SAM) 自动创建新资源。
– 或 – - 使用 AWS SAM 的底层 amazon/aws-sam-cli-build-image Docker 映像来创建它们。
有关更多信息,请参阅创建和共享 Lambda 层。
解决方法
注意:如果您在运行 AWS Command Line Interface(AWS CLI)命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
以下说明使用 Python 作为编程语言,并以基于 Linux 的计算机平台为例。对于其他编程语言和平台,请相应地调整步骤。
在计算机上安装 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.7 或 3.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.7 或 3.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 部署程序包,其中包含您的函数代码和正确的库。