使用 Docker 创建 AWS 层

ID:20463 / 打印

使用 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 文档
上一篇: Python+Selenium:为什么调用类时出现"driver 在没有赋值前引用了"错误?
下一篇: 为什么使用 `np.unique()` 函数得到的唯一值是自动排序的?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。