如何访问ECR上AWS Lambda Python镜像的Shell?
解决方案
直接进入Lambda Python镜像的Shell
Lambda官方Python镜像的默认entrypoint是Lambda运行时的启动脚本,要求必须传入handler名称作为参数,直接追加/bin/bash会被当作handler参数导致报错。要直接进入shell,需要覆盖默认的entrypoint,执行以下命令:
docker run -it --entrypoint /bin/bash public.ecr.aws/lambda/python:3.8
-it:启用交互模式并分配伪终端--entrypoint /bin/bash:替换镜像默认的entrypoint为bash shell
适配现有build_lambda.sh脚本(无需Dockerfile)
如果要在流水线脚本中自动完成依赖安装,不用手动进入shell,可以直接在docker run中挂载本地代码目录,执行安装命令:
# 在build_lambda.sh中替换原有的依赖安装步骤 docker run --rm -v "$(pwd):/app" --entrypoint /bin/bash public.ecr.aws/lambda/python:3.8 -c " cd /app && pip install -r requirements.txt -t ./package "
--rm:容器执行完命令后自动删除-v "$(pwd):/app":将当前目录挂载到容器内的/app路径-c:让bash执行后续的命令串,完成依赖安装并将包输出到本地./package目录
更优方案:使用Serverless Python依赖插件
如果不想手动维护Docker命令,推荐使用Serverless Framework的serverless-python-requirements插件,它会自动:
- 识别Lambda运行时环境,匹配对应的系统依赖
- 自动在隔离环境(默认用Docker)中安装兼容的Python依赖
- 打包时自动剔除无用文件,减小部署包体积
配置示例:
# serverless.yml中添加插件配置 plugins: - serverless-python-requirements custom: pythonRequirements: dockerizePip: true # 启用Docker环境安装依赖 runtime: python3.8 # 指定对应Python版本
这样只需要在serverless.yml中添加几行配置,就能替代原有手动的Docker依赖安装逻辑,大幅简化流水线脚本。
内容的提问来源于stack exchange,提问作者Teh__docco
相关产品推荐
相关产品推荐

