AWS Lambda 准备有平台相关性的 Python 依赖项程序包

native code

使用 docker 在 Amazon lambda runtime 环境

mkdir lambda_headless_chrome_python
cd lambda_headless_chrome_python

  • 创建下面的 Dockerfile。

Dockerfile

FROM lambci/lambda:build-python3.6

ENV AWS_DEFAULT_REGION ap-northeast-1
ENV APP_DIR /var/task

ADD . .

CMD pip install -r requirements.txt -t $APP_DIR && \
  zip -9 deploy_package.zip lambda_function.py && \
  zip -r9 deploy_package.zip *
  • 创建 docker 镜像并打包。
docker build -t lambda_headless_chrome .
docker run -v "${PWD}":/var/task lambda_headless_chrome
  • 现在您有一个 zip 文件deploy_package.zip 可以上传到 lambda。

使用 SAM

如果使用了 AWS Chalice 部署项目,且依赖包的体积不大,可以直接使用 Chalice 部署。会自动准备适配 Lambda 环境的依赖包,作为项目代码的一部分,整体压缩打包更新到 Lambda。

假设 Lambda 的运行环境是 Amazon Linux 2,为了提取适配该系统的软件包文件,需要准备一个 Amazon Linux 2 操作系统环境。

本地需要用到 AWS SAM CLI 和 Docker,来安装和提取依赖软件包文件。

  1. 执行命令 sam init
    根据提示选择:

AWS Quick Start Templates
Hello World Example
Use the runtime and package type? (Python and zip)
Project name,使用默认的“sam-app”

  1. 编辑 requirements.txt,添加实际项目所需的第三方库
  1. 启动 docker

  2. 进入项目目录,执行安装依赖

cd sam-app
sam build -u

-u, --use-container 选项说明:
If your functions depend on packages that have natively compiled dependencies, use this option to build your function inside a Lambda-like Docker container.

文件位置:sam-app/.aws-sam/build/HelloWorldFunction

只需要依赖项软件包文件,其它文件可以忽略或删除。

cd sam-app
cp -r .aws-sam/build/HelloWorldFunction/ python/
cd python
rm app.py __init__.py .DS_Store
rm -r *.dist-info
rm -r */_MACOSX
rm -r tests/

或通过文件管理器手动整理后,将所需文件放到名称为 python 的文件夹中。

压缩打包:

cd ..
zip -r9 layer.zip python -x "*/__pycache__/*"

部署准备好的依赖包,推荐 通过 Lambda Layer 的方式部署依赖项
注意:必需将软件包文件放在名称 python 的文件夹中(不是压缩包文件的名称)

或参见 为 AWS Lambda 添加第三方依赖软件包


相关文章:

参考文章: