如何将AWS Lambda的/tmp目录切换至EFS存储(Docker镜像场景)
解决Lambda /tmp空间不足:替换为EFS目录(Docker部署场景)
一、确认EFS挂载基础配置
- 确保EFS已关联Lambda所在VPC,且Lambda执行角色拥有
elasticfilesystem:ClientMount、elasticfilesystem:ClientWrite权限 - 记下Lambda控制台中配置的EFS容器内挂载路径(比如
/mnt/efs)
二、修改Docker镜像,替换/tmp指向EFS
因为是Docker镜像部署,要调整启动逻辑,把系统/tmp替换为EFS下的专属目录:
调整Lambda入口脚本(比如
entrypoint.sh):- 先在EFS挂载目录下创建实例专属临时目录(用
hostname区分实例,避免并发冲突):mkdir -p /mnt/efs/lambda_tmp/$(hostname) - 替换系统/tmp为该目录的软链接(适合直接写死/tmp路径的代码):
rm -rf /tmp ln -s /mnt/efs/lambda_tmp/$(hostname) /tmp - 或者通过环境变量指定临时目录(适合读取TMPDIR等变量的程序):
export TMPDIR="/mnt/efs/lambda_tmp/$(hostname)" export TMP="/mnt/efs/lambda_tmp/$(hostname)" export TEMP="/mnt/efs/lambda_tmp/$(hostname)"
- 先在EFS挂载目录下创建实例专属临时目录(用
补充镜像依赖(如果基础镜像缺必要工具):
在Dockerfile中添加安装命令,根据基础镜像选择:# 对于CentOS/RHEL系 RUN yum install -y coreutils && yum clean all # 对于Ubuntu/Debian系 RUN apt-get update && apt-get install -y coreutils && apt-get clean
三、更新Lambda的EFS挂载配置(按需调整)
- 进入Lambda控制台的配置 -> 文件系统
- 确认EFS访问点路径正确,容器内挂载路径(如
/mnt/efs)具备可写权限 - 高并发编译场景下,建议将EFS切换为最大IO性能模式
四、测试验证
- 重新构建镜像并推送到ECR,更新Lambda函数的镜像版本
- 发送并发请求测试,检查EFS目录下的临时文件生成情况,确认日志中不再出现"No space left on device"错误
- 可在代码中添加日志输出
df -h /tmp,验证/tmp已指向EFS
内容的提问来源于stack exchange,提问作者MLugo
相关产品推荐
相关产品推荐

