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

2 分钟阅读
0

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

简短描述

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

有关更多信息,请参阅 Creating and sharing Lambda layers

解决方法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

以下指令使用 Python 作为编码语言,并以基于 Linux 的计算机平台为示例。如需使用其他编码语言和平台,请相应地调整步骤。

在电脑上安装 Docker

如果还没有安装 Docker,请在计算机上安装适用于 LinuxWindowsmacOS 的 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.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"

为 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.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 部署包,其中包含函数代码和正确的库。


相关信息

为什么我的 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 命令参考)

AWS 官方
AWS 官方已更新 3 年前
没有评论