Amazon EFS 与 Lambda/ECS 的集成模式 - 无服务器中的共享文件系统活用

将 EFS 挂载到 Lambda 函数和 ECS 任务以活用共享文件系统。介绍访问点设计和性能优化。

Lambda 与 EFS 的集成

EFS 挂载到 Lambda 函数后,可通过 /mnt 下的路径访问文件系统。Lambda 的 /tmp 目录最大 10 GB,而 EFS 提供实质上无限的存储。适用于大容量机器学习模型、数据集和临时文件的处理。配置需要 Lambda 函数的 VPC 设置(子网、安全组)和 EFS 的文件系统 ID 及访问点。

访问点设计

EFS 访问点是按应用隔离文件系统访问的功能。为每个访问点设置根目录(如 /app1、/app2)和 POSIX 用户(UID/GID),为每个 Lambda 函数分配不同的访问点。函数 A 通过 /mnt/efs 仅访问 /app1 下的内容,函数 B 仅访问 /app2 下的内容。IAM 策略中指定访问点 ARN 进一步限制访问。

ECS 任务集成与性能

ECS 任务定义中定义 EFS 卷,在容器定义的 mountPoints 中指定挂载路径。同一任务内的多个容器可共享同一 EFS 卷,可用于 Sidecar 模式中日志收集容器读取应用容器日志文件的配置。性能方面,Lambda 冷启动时 EFS 挂载会增加数百毫秒的额外延迟。使用预置并发可消除冷启动,保持 EFS 连接。

EFS 集成的费用考虑

EFS 费用由存储类别和吞吐量模式决定。Standard 存储每 GB 月费约 0.30 美元,IA(低频访问)约 0.016 美元。从 Lambda 访问 EFS 需要 Lambda 的 VPC 连接,冷启动时间会增加数秒。EFS 吞吐量在 Elastic 模式下根据访问模式自动扩缩,无需预置。

总结

通过 EFS 与 Lambda/ECS 的集成,无服务器架构也能活用共享文件系统。通过访问点隔离每个应用的根目录和 POSIX 权限,实现 Lambda 函数间的数据共享和大容量文件处理。Intelligent-Tiering 还提供根据访问频率自动优化存储成本的功能。