AWS Lambda是否自动删除/tmp目录文件?如何手动清理该目录?
关于AWS Lambda /tmp目录清理的相关解答
/tmp目录的自动清理规则
AWS Lambda不会在每次函数调用结束后自动清理/tmp目录:
- 冷启动函数时,
/tmp目录初始状态为空 - 同一份执行环境被多次调用复用时,
/tmp目录内的文件会在多次调用之间保留共享 - 只有当执行环境被AWS底层回收销毁(比如长期无调用、函数版本更新、底层资源调度)时,
/tmp目录的内容才会被清空
如果不主动清理临时文件,多次调用后很容易占满/tmp默认512MB的存储空间,触发磁盘不足报错。
官方是否提供内置清理函数
AWS官方没有提供类似flush()的专门用于清理/tmp的内置接口,需要手动实现清理逻辑。
手动清空/tmp目录的实现方法
清理时只需删除/tmp下的所有文件和子目录即可,不要删除/tmp目录本身,不同运行环境的示例代码如下:
Python运行环境
import os import shutil def clear_tmp_dir(): for file_name in os.listdir("/tmp"): file_path = os.path.join("/tmp", file_name) try: if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception as e: # 可按需添加错误处理逻辑 print(f"清理失败 {file_path}: {str(e)}")
你可以在文件上传到S3的逻辑执行完成后,调用上述函数即可完成清理。
Node.js运行环境
const fs = require('fs/promises'); const path = require('path'); async function clearTmpDir() { const files = await fs.readdir('/tmp'); for (const file of files) { const filePath = path.join('/tmp', file); await fs.rm(filePath, { recursive: true, force: true }); } }
本地无法查看/tmp文件的解决方法
Lambda运行环境和你本地macOS的系统是完全隔离的,二者的/tmp目录是互相独立的存储空间,所以你在本地自然看不到Lambda运行时产生的临时文件。
要验证清理是否成功,只需在清理逻辑执行完成后,添加打印/tmp目录内容的日志代码,之后在AWS CloudWatch控制台对应Lambda函数的日志组中查看输出即可。
比如Python环境下添加:
print("清理后/tmp目录内容:", os.listdir("/tmp"))
如果输出为空列表,就说明清理成功。
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

