容器化AWS Lambda本地正常,部署到AWS后报错求助
容器化AWS Lambda部署后文件写入报错排查
问题根源
本地测试正常但Lambda部署后报错,核心原因是相对路径../tmp在Lambda环境中无效:
- Lambda运行时,代码位于
/var/task目录下,../tmp会解析到/var/tmp,而Lambda仅允许写入/tmp目录(这是平台提供的唯一可写临时目录)。 - 本地测试时的目录结构与Lambda官方环境不一致,导致相对路径在本地能正常访问到临时目录,但部署后无法定位到正确的可写路径。
修复方案
方案1:使用绝对路径直接指向Lambda临时目录
将代码中的相对路径替换为绝对路径/tmp:
with open(os.path.join('/tmp', video_name), 'wb') as f: s3_client.download_fileobj('mybucketname', video_name, f)
方案2:通过环境变量动态获取临时目录(更健壮)
Lambda会自动设置TMPDIR环境变量指向合法的临时目录,通过该变量获取路径可以适配更多场景:
import os tmp_dir = os.environ.get('TMPDIR', '/tmp') # fallback到/tmp防止环境变量缺失 with open(os.path.join(tmp_dir, video_name), 'wb') as f: s3_client.download_fileobj('mybucketname', video_name, f)
额外检查点
如果修改路径后仍报错,需确认:
- Lambda执行角色是否拥有目标S3桶的
s3:GetObject权限; - 目标视频文件在S3桶中确实存在,且
video_name参数的取值与S3对象键完全一致(注意大小写、特殊字符)。
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

