Azure函数停止后/tmp目录文件是否自动删除及相关疑问
Azure Functions 消费计划(Linux)下/tmp目录常见疑问解答
函数停止后,/tmp文件会自动删除吗?
不会在函数停止后立即自动删除。/tmp文件的清理完全取决于宿主实例的生命周期:
- 只要实例处于活跃状态(正在运行函数或等待新调用),/tmp内的文件会一直保留;
- 只有当Azure后台回收该宿主实例(比如长时间无调用触发闲置回收、资源紧张时分配给其他需求),整个实例的本地存储才会被销毁,包括/tmp里的所有文件。
未手动删除/tmp文件的安全隐患
先明确核心隔离逻辑:Linux消费计划下,不同租户的Function App宿主实例是完全隔离的,其他租户的函数绝对访问不到你的实例的/tmp目录。但仍有以下风险:
- 同App内的其他函数:同一Function App下的多个函数会共享同一个实例的资源,包括/tmp目录。如果文件包含敏感数据(如密钥、用户隐私信息),可能被同App内的其他函数读取;
- 实例复用导致数据混淆:如果你的函数再次被分配到之前用过的实例,旧的/tmp文件会被当前调用的函数读取到,可能引发业务逻辑错误(比如使用旧数据);
- 存储配额耗尽:Linux消费计划下/tmp目录的配额是5GB,大量未清理的文件堆积会触发存储不足错误,导致函数运行失败。
为什么测试时文件多次运行后仍存在?
你看到的文章描述的是不能依赖本地磁盘做持久化存储,而非“每次调用后都会删除文件”。差异的核心原因是:
- 消费计划的实例是按需复用的:短时间内多次调用函数,Azure会优先复用已有的活跃实例,不会每次都创建新实例,所以/tmp文件会保留;
- 实例回收是被动且无规律的:实例只有在满足回收条件时才会被销毁,这个时机由Azure后台控制,你测试时可能刚好没碰到实例回收的场景;
- 官方强调“不依赖本地磁盘”,是因为你无法控制实例的生命周期,文件随时可能被清除,绝对不能把/tmp用于存储需要长期保留或关键业务数据。
内容的提问来源于stack exchange,提问作者IDrumsey
相关产品推荐
相关产品推荐

