我想创建一个与目标环境运行时兼容的 AWS Lambda 层。该如何操作?
简短描述
在开发 Lambda 函数时,可以在各个受支持的 Lambda 运行时版本之间进行选择。要创建与特定运行时兼容的 Lambda 函数和层,可以执行以下任一操作:
有关更多信息,请参阅 Creating and sharing Lambda layers。
解决方法
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
以下指令使用 Python 作为编码语言,并以基于 Linux 的计算机平台为示例。如需使用其他编码语言和平台,请相应地调整步骤。
在电脑上安装 Docker
如果还没有安装 Docker,请在计算机上安装适用于 Linux、Windows 或 macOS 的 Docker。
创建适当的目录结构,并在 pip 要求文件(requirements.txt)中指定依赖项
有关创建目录结构的更多信息,请参阅 Including library dependencies in a layer。有关指定依赖项的更多信息,请参阅 pip 用户指南中的 Requirements files。
兼容 Python 3.6 和 3.8 版本的 Lambda 层目录结构示例
├── requirements.txt
└── python/
└── lib/
├── python3.6/
│ └── site-packages/
└── python3.8/
└── site-packages/
**注意:**该函数连同所有 Lambda 层解压缩后的总大小不得超出解压缩部署包大小的上限(250 MB)。有关 Lambda 中 Python 版本支持的更多信息,请参阅 Building Lambda functions with Python。
根据在目录结构中指定的运行时,将库依赖项安装到其相应的子文件夹
对在目录结构中指定的每个运行时运行一次下列 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"
为 Lambda 层创建 .zip 文件存档
运行以下命令,以便压缩 python 文件夹并创建 Lambda 层包:
**注意:**可以用自己喜欢的任何名字替换 mypythonlibs。
zip -r mypythonlibs.zip python > /dev/null
.zip 文件已压缩到 Lambda 环境的 /opt 文件夹中。可以通过 Lambda 函数代码访问 /opt 文件夹。
创建或更新 Lambda 层
要创建或更新 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 资源名称(ARN)。您需要层的 ARN 才能完成下一步。
更新 Lambda 函数配置以使用该层
运行以下命令来更新 Lambda 函数配置以使用该层:
**重要信息:**将 arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 替换为层 ARN。
aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function
(可选)为 Lambda 包使用 Docker 映像而不是 AWS SAM 文件
除了使用 AWS SAM 文件,还可以使用 amazon/aws-sam-cli-build-image Docker 映像来创建 Lambda 包。使用 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 部署包,其中包含函数代码和正确的库。
相关信息
为什么我的 Python(Boto 3)Lambda 函数出现“unknown service”、“parameter validation failed”或“object has no attribute”错误?
Building layers
Use any programming language and share common components
Lambda(AWS CLI 命令参考)