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,来安装和提取依赖软件包文件。
创建一个临时 Python 项目
- 执行命令
sam init
,
根据提示选择:
AWS Quick Start Templates
Hello World Example
Use the runtime and package type? (Python and zip)
Project name,使用默认的“sam-app”
- 编辑
requirements.txt
,添加实际项目所需的第三方库
安装依赖的软件包
-
启动 docker
-
进入项目目录,执行安装依赖
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
的文件夹中(不是压缩包文件的名称)
相关文章:
参考文章: