使用Amazon CLI部署Python脚本至Lambda的痛点及超时问题求助
解决方案:Lambda函数超时及Python3.7依赖适配问题
针对超时问题的直接优化
- 调整Lambda超时时间:默认3秒不足以支撑yfinance拉取金融数据的网络请求,在Lambda控制台或通过CLI修改函数配置,将超时时间设置为10-30秒(根据实际数据量调整)。
- 提升内存配置:Lambda的CPU资源与内存配额正相关,128MB内存下CPU性能受限,建议将内存提升至256MB或512MB,既能加快代码执行速度,也能压缩初始化和运行时长。
依赖与部署优化
- 重新校验依赖包兼容性:确认yfinance和pymysql的降级版本完全适配Python3.7,比如yfinance指定
yfinance==0.1.70(该版本支持3.7),pymysql用pymysql==1.0.2。避免安装不必要的冗余依赖,减少Layer体积。 - 替换CloudShell打包环境:CloudShell的Python3.7环境可能存在编译依赖问题,建议本地使用Amazon Linux 2镜像或Docker模拟Lambda运行环境打包依赖:
- 拉取Lambda镜像:
docker pull public.ecr.aws/lambda/python:3.7 - 运行容器并安装依赖:
docker run -v "$PWD":/var/task public.ecr.aws/lambda/python:3.7 bash -c "pip install yfinance==0.1.70 pymysql==1.0.2 -t python/lib/python3.7/site-packages/" - 压缩打包后上传S3创建Layer,确保依赖是针对Lambda环境编译的。
- 拉取Lambda镜像:
- 改用容器镜像部署:放弃Layer模式,直接将代码和依赖打包成Docker镜像上传至ECR,再创建Lambda函数。这种方式可以使用更高版本的Python(如3.9/3.10),既解决Python3.7的兼容性限制,也能提升代码运行性能。
代码逻辑优化
- 复用网络连接:yfinance内部依赖requests,可在代码中复用Session对象减少连接建立时间;pymysql连接尽量复用(注意Lambda冷启动和连接泄露问题,可在函数结束时关闭连接)。
- 减少不必要的数据拉取:yfinance默认拉取全量数据,可通过参数指定时间范围或所需字段,降低数据传输和处理耗时。
- 异步处理(可选):如果业务允许,使用
asyncio结合aiohttp替代同步请求,并行拉取数据提升效率。
网络排查
- 如果Lambda函数部署在VPC内,必须配置NAT网关确保函数能访问外网(yfinance需要调用Yahoo Finance的API);若无需VPC,直接使用默认的公网访问模式即可。
内容的提问来源于stack exchange,提问作者ZKK
相关产品推荐
相关产品推荐

