能否让AWS Lambda的/tmp文件夹对外开放?及相关技术问题咨询
核心问题解答
1. /tmp文件夹能否从外部访问?
Lambda的/tmp是执行实例的本地磁盘存储,完全不支持外部直接访问。你通过浏览器访问时遇到的"Missing Authentication Token"错误,本质是访问了Lambda的API网关或函数URL端点,但/tmp目录并不在这些端点的可访问路径范围内——Lambda执行环境是完全隔离的,没有任何公网/内网路径可以直接指向/tmp里的文件,所以这条路从根本上走不通。
2. /tmp出现文件已存在的原因
AWS所说的"实例隔离"是正确的,但Lambda会复用执行环境(即热启动机制):当同一函数的后续请求被分配到之前用过的实例时,/tmp中的文件会被保留,并非和其他实例共享,而是同一个实例被重复利用导致的残留。你可以通过每次处理前删除目标文件,或使用带请求ID的唯一文件名来避免这个错误,但这无法解决外部访问的核心问题,因此将/tmp作为外部存储的方案不可行。
针对小体积一次性文件的替代方案
方案1:将视频分片嵌入Manifest的Data URI
由于你的视频仅100-200KB,分片后的单个片段体积更小,可以直接将分片内容转成Base64编码,以Data URI的形式写入HLS/Dash的Manifest文件中:
- 对于HLS,将
.ts片段的URI替换为data:video/mp2t;base64,[Base64编码的片段内容] - 对于Dash,在MPD文件的
<Representation>节点中,将片段的src设置为对应的Data URI
播放器可以直接解析Manifest并加载内嵌的视频内容,完全不需要外部存储,延迟最低,且符合一次性使用的需求。
方案2:Lambda函数URL + 内存缓存分片
在Lambda处理视频打包时,将分片内容暂存到内存(比如全局变量),并在Manifest中指向函数URL的特定路径(例如https://your-function-url.com/segments/[唯一片段ID])。当播放器请求分片时,Lambda从内存中取出对应内容返回:
- 给每个分片分配唯一ID,避免环境复用导致的内容混淆
- 可在请求处理完成后清理内存中的分片内容,或设置短周期的自动过期逻辑
方案3:使用Lambda临时存储扩展(Ephemeral Storage)
如果需要更大的临时空间,可以启用Lambda的Ephemeral Storage(最大10GB),但此方案仍无法解决外部访问问题,仅适合不需要外部访问的临时处理场景,优先级低于前两个方案。
内容的提问来源于stack exchange,提问作者SamTest

