跨Lambda调用能否将主调方/tmp挂载到基于容器的被调Lambda
核心结论
无法直接将主调Lambda的/tmp目录挂载给被调Lambda使用。
每个Lambda函数的运行环境是完全独立隔离的,哪怕是父子调用关系,两个函数也运行在各自独立的沙箱实例中,/tmp目录是单个实例独占的临时存储,生命周期和当前函数实例绑定,Lambda服务本身没有提供跨函数实例挂载临时目录的能力,这个思路从底层机制上就行不通。
可行替代方案
你提到的两个方向都是可行的,另外还有一个更常用的轻量方案可以按需选择:
- 小文件场景:直接通过payload传文件内容
你当前考虑的这个方案是小体积文件下的最优选择,实现成本最低。注意Lambda同步调用的payload硬上限是6MB,只要你的文件内容做base64编码后不超过这个阈值,就可以直接在主调函数里读取出/tmp下的文件内容,作为参数传给Lambda 2;Lambda 2收到参数后,先把内容写入自身实例的/tmp目录,再走后续的外网上传逻辑即可,不需要额外配置其他云资源。 - 中大型文件、无VPC场景:S3中转
如果文件大小超过6MB,又不想做复杂的网络配置,可以让Lambda 1处理完文件后先上传到S3存储桶,调用Lambda 2时只需要传递S3的桶名、文件路径两个参数即可;Lambda 2启动后先从S3下载对应文件到自身的/tmp目录,再执行后续上传逻辑。这个方案不需要把Lambda部署到VPC,存储成本也极低,是大多数跨Lambda传文件场景的首选。 - 多函数共享文件、低延迟要求场景:EFS共享存储
如果你后续有多个Lambda需要反复读写同一份文件,对文件访问延迟要求高,可以给Lambda 1和Lambda 2配置挂载同一个EFS文件系统。两个函数直接读写EFS的挂载路径即可,不需要额外做文件传递。注意这个方案需要把Lambda部署到关联了EFS的VPC内,会有一定的配置成本和VPC网络冷启动开销。
内容的提问来源于stack exchange,提问作者minh ly
相关产品推荐
相关产品推荐

