默认情况下,您的 AWS Lambda 函数仅包含核心 Python 功能。Lambda 层是一项很棒的功能,可让您向 Lambda 函数添加外部依赖项。在这篇文章中,我将向您介绍如何使用 Docker 创建自己的 Lambda 层库。
什么是 Lambda 层?
如果您不熟悉 Lambda 层,层是您可以在运行时包含在 Lambda 函数中的附加代码,用于将外部库合并到您的 Lambda 函数中。默认情况下,Lambda 函数仅包含核心 Python 库。层是您将其他外部库包含到您的 Lambda 函数中的一种方式。层的一个有用特性是它们存在于 Lambda 函数本身之外。创建层后,您可以在所有 Lambda 函数中使用该层。您可以从 AWS 文档中阅读有关层的更多信息。
使用 Docker 创建 Lambda 层
在这篇文章中,我们将以 Flask 为例创建一个层。使用 Docket 创建 Lambda 层有四个主要步骤:
- 设置图层的本地目录
- 使用 Docker 安装层包
- 创建目录的 zip 文件
- 使用 AWS CLI 上传到 AWS
接下来的几节将更详细地描述这些步骤中的每一个。最后一节将展示如何将这些步骤组合到一个 bash 脚本中,以使部署更加容易。
设置图层目录
第一步是构建将包含我们层的所有工件的本地目录结构。在终端中输入以下命令。将创建一个名为的新目录flask-layer
以及一个子目录python/lib.python3.8/site-packages
,我们将在其中安装 Python 包。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>mkdir flask-layer
cd flask-layer
mkdir -pv python/lib/python3.8/site-packages
</code></span></span>
如果您想为多个 Python 版本创建图层,您可以重复最后一个命令并将“python3.8”更改为您想要包含的任何其他 Python 版本。
在flask-layer
目录中创建一个requirements.txt
包含以下内容的文件。
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>flask==1.1.1
</code></span></span>
该requirements.txt
文件定义将包含在您的层中的包。如果您想在图层中包含其他依赖项,则可以将它们添加到此requirements.txt
文件中。
层需要注意的一件事是,当它们被加载到您的 Lambda 函数中时,它们的大小不能超过 250MB。一个 Lambda 函数最多可以包含 5 个不同的层。考虑到这些限制,最好有更小的层,你可以在你的函数中混合和匹配,而不是构建大型的、单一用途的层。
使用 Docker 安装需求
Docker 将安装您在requirements.txt
. Docker 具有复制 AWS Lambda 环境的图像。使用这些图像 Docker 将安装您在其中指定的requirements.txt
与 Lambda 运行时兼容的库。在终端中输入以下代码。在输入此命令之前,请确保您已运行 Docker!
<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
</code