
用于打包Python和Node AWS Lambda函数代码的Docker容器工具。
https://github.com/3mcloud/lambda-packager
Dockerfile链接假设所有代码位于src目录,且该目录下包含requirements.txt,希望在项目根目录生成deployment.zip,只需执行:
bashdocker run -it --rm \ -v $(if ${PWD},${PWD},${CURDIR}):/src \ # 将代码挂载到容器 3mcloud/lambda-packager:python-latest
执行后,deployment.zip将生成在项目根目录。
注意:$(if ${PWD},${PWD},${CURDIR})是三元运算符,用于在Makefile中实现Windows和Mac系统的兼容性。
可通过容器环境变量修改打包器默认行为:
| 变量名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
MANIFEST_FILE | | 否 | 若只需打包单个Lambda函数,忽略此变量;否则参考清单文件。相对于CI_WORKSPACE的路径或绝对路径,默认不使用。 |
LAMBDA_CODE_DIR | ./src | 否 | 待打包代码目录,相对于CI_WORKSPACE或绝对路径。 |
CONTAINER_BUILD_DIRECTORY | /build | 否 | 容器内代码移动、依赖安装及打包的工作目录,通常无需修改。 |
ARTIFACT_NAME | deployment.zip | 否 | 输出zip包的路径和名称,相对于CI_WORKSPACE或绝对路径。 |
GLOB_IGNORE | *.pyc,__pycache__ | 否 | 打包时忽略的文件/文件夹,逗号分隔的glob表达式。 |
CI_WORKSPACE | $(pwd) - 即根目录 | 否 | 容器内工作空间目录。 |
REQUIREMENTS_FILE | requirements.txt | 否 | 依赖文件路径,相对于LAMBDA_CODE_DIR或绝对路径。若未找到,将尝试使用setup.py。 |
SETUP_FILE | setup.py | 否 | setup.py文件路径,相对于LAMBDA_CODE_DIR或绝对路径。 |
MAX_LAMBDA_SIZE_BYTES | 52428800 | 否 | Lambda包大小检查阈值(字节),整数类型。 |
FAIL_ON_TOO_BIG | False | 否 | 设为True时,若包大小超过阈值,容器将以状态码1退出。 |
SSH_FLIP | False | 否 | 仅当通过ssh或https直接从仓库安装依赖时相关。设为True且使用REQUIREMENTS_FILE时,容器将检查ssh访问权限,若无权限则将所有ssh依赖替换为https。 |
示例1:自定义代码目录和依赖文件
代码位于code目录,依赖文件为reqs.txt,需在项目根目录生成deployment.zip:
bashdocker run -it --rm \ -v $(if ${PWD},${PWD},${CURDIR}):/src \ # 将项目挂载到容器 -e CI_WORKSPACE=/src \ # 工作空间为/src -e LAMBDA_CODE_DIR=/code \ # 代码目录为/src/code -e REQUIREMENTS_FILE=reqs.txt \ # 依赖文件为/src/code/reqs.txt 3mcloud/lambda-packager:python-latest
示例2:仅挂载代码目录
仅挂载code目录而非整个项目根目录:
bashdocker run -it --rm \ -v $(if ${PWD},${PWD},${CURDIR})/code:/src \ # 将代码目录挂载到容器 -e LAMBDA_CODE_DIR=/src \ # 代码目录为/src(CI_WORKSPACE默认为/) -e REQUIREMENTS_FILE=reqs.txt \ # 依赖文件为/src/reqs.txt -e ARTIFACT_NAME=/src/deployment.zip \ # zip包保存到/src/ 3mcloud/lambda-packager:python-latest
示例3:使用默认配置
代码位于src目录,包含requirements.txt,在项目根目录生成deployment.zip:
bashdocker run -it --rm \ -v $(if ${PWD},${PWD},${CURDIR}):/src \ # 将项目挂载到容器 3mcloud/lambda-packager:python-latest
确保:
src文件夹package.json(建议同时包含package-lock.json)bashdocker run -it --rm -v $(pwd):/workspace -w /workspace 3mcloud/lambda-packager:node-12.22
执行后,deployment.zip将生成在项目根目录。
可通过容器环境变量修改打包器默认行为:
| 变量名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
ARTIFACT_CODE_PREFIX | 空 | 否 | zip包内代码目录的名称 |
ARTIFACT_NAME | deployment.zip | 否 | 输出zip包的名称 |
CONTAINER_BUILD_DIRECTORY | /build | 否 | 容器内构建输出目录 |
CI_WORKSPACE | Docker工作目录 | 否 | 容器内工作空间目录 |
LAMBDA_CODE_DIR | src | 否 | Lambda函数代码目录 |
参考Python的使用示例,只需将镜像标签从3mcloud/lambda-packager:python-latest替换为3mcloud/lambda-packager:node-12.22即可。
Node打包器默认假设package.json和package-lock.json与应用入口文件在同一目录。例如项目结构:
bash. ├── app.js ├── package.json
可直接使用默认配置。
若项目结构嵌套(如sam init创建的项目):
bash. ├── package.json ├── src │ └── handlers │ ├── get-all-items.js │ └── put-item.js
需生成包含node_modules和src的zip包,执行:
bashdocker run -it --rm -w /test -v $(pwd):/test \ -e NPM_PACKAGE_FILE=./package.json \ -e NPM_PACKAGE_LOCK=./package-lock.json \ -e LAMBDA_CODE_DIR=src \ -e ARTIFACT_CODE_PREFIX=src \ 3mcloud/lambda-packager:node-12.22


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务