使用 Docker 创建 AWS 层
当我们需要在 aws 中为 lambda 函数创建一个层,并且该层对其操作有一些 so 依赖项时,因此我们遇到了问题,aws 文档可能不够。
因此,在这种情况下,我们可以在所需的层中构建缺少的二进制文件。
好吧,对于这个例子,我们将使用 python 3.x 和 pdf2image 库来制作演示
先决条件
- docker 安装
- python 3.x
- aws cli 配置(可选)
- 访问 aws lambda
1.准备环境
mkdir lambda-layer cd lambda-layer mkdir python cd python
2.安装python依赖项
pip3 install [your_dependencies] --platform manylinux2014_x86_64 --target . --only-binary=:all: --implementation cp --python-version [tu_version_python] --no-deps
pdf2image 示例:
pip3 install pdf2image pillow --platform manylinux2014_x86_64 --target . --only-binary=:all: --implementation cp --python-version 3.10 --no-deps
3.dockerfile基础
from ubuntu:22.04 as builder env debian_frontend=noninteractive run apt-get update && apt-get install -y python3.10 python3-pip binutils zip [tus_paquetes_adicionales] --no-install-recommends && rm -rf /var/lib/apt/lists/* workdir /lambda run mkdir -p /opt/python/lib/python3.10/site-packages/bin copy python/ /opt/python/lib/python3.10/site-packages/ run cp [tus_binarios] /opt/python/lib/python3.10/site-packages/bin/ && chmod 755 /opt/python/lib/python3.10/site-packages/bin/* run cd /opt && zip -r9 /lambda/layer.zip python/ from alpine:3.18 copy --from=builder /lambda/layer.zip / cmd ["/bin/sh"]
4. 构建和提取
# image build docker build -t lambda-layer . # extract layer.zip docker run --rm -v "$(pwd)":/out lambda-layer cp /layer.zip /out/
5.使用图层
完成前面的步骤后,我们可以像往常一样上传图层并将其导入到我们的项目中
import os import sys #Configuring paths SITE_PACKAGES = '/opt/python/lib/python3.10/site-packages' BIN_DIR = os.path.join(SITE_PACKAGES, 'bin') os.environ['PATH'] = f"{BIN_DIR}:{os.environ['PATH']}" sys.path.append(SITE_PACKAGES) #importing dependencies from pdf2image import [your_import] def lambda_handler(event, context): try: # your code here return { 'statusCode': 200, 'body': 'Success' } except Exception as e: return { 'statusCode': 500, 'body': f'Error: {str(e)}' }
参考
- aws lambda 层文档
- python 包管理
- docker 文档
以上就是使用 Docker 创建 AWS 层的详细内容,更多请关注其它相关文章!