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

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

Lambda 与 EFS 的集成

将 EFS 挂载到 Lambda 函数后,可以通过 /mnt 下的路径访问文件系统。Lambda 的 /tmp 目录最多可以设置为 10 GB,而 EFS 是根据工作负载自动伸缩的文件系统。可以用于处理大容量的机器学习模型、数据集和临时文件。在设置中,指定 Lambda 函数的 VPC 设置(子网、安全组)以及 EFS 的文件系统 ID / 访问点 ID。Lambda 函数在 VPC 内运行,因此需要将其部署在与 EFS 挂载目标相同的子网或可路由的子网中。

访问点的设计

EFS 访问点是按应用隔离对文件系统的访问的功能。为每个访问点设置根目录(例如 /app1、/app2)和 POSIX 用户(UID/GID),并为每个 Lambda 函数分配不同的访问点。可以按照函数 A 通过 /mnt/efs 只访问 /app1 下的内容、函数 B 只访问 /app2 下的内容的方式进行隔离。启用 IAM 授权后,可以通过 EFS 的文件系统策略进行基于 IAM 角色的访问控制,可以限制为只有特定的 Lambda 函数可以使用特定的访问点。

与 ECS 任务的集成和性能

在 ECS 任务定义中定义 EFS 卷,在容器定义的 mountPoints 中指定挂载路径。同一任务内的多个容器可以共享同一个 EFS 卷,可以用于在边车(sidecar)模式中由日志收集容器读取应用容器的日志文件的配置。从性能的角度来看,Lambda 冷启动时 EFS 的挂载会产生数百毫秒的额外延迟。通过 Provisioned Concurrency 避免 Lambda 的冷启动,或者通过 Elastic 吞吐量模式确保 EFS 的吞吐量,来控制对延迟的影响。

EFS 集成的费用考虑

EFS 的费用由存储类别和吞吐量模式决定。Standard 存储每 GB 每月约 0.30 美元,IA(Infrequent Access)约 0.016 美元(截至 2026 年 8 月)。从 Lambda 访问 EFS 时,将函数连接到 VPC,新的函数在连接准备完成之前无法调用,准备有时需要几分钟。EFS 的吞吐量推荐使用 Elastic 模式,它会根据访问模式自动扩缩。在 Lambda 的 /tmp(最多可以设置为 10 GB,超过 512 MB 设置的部分收费)够用的情况下,可以采用不使用 EFS 的配置。

用例的扩展

将 EFS 与无服务器相结合,可以在 Lambda 和 ECS 上运行处理文件的工作。如果将大型机器学习模型放在 EFS 上,由多个 Lambda 函数共享读取,就可以不受部署包大小限制的约束执行推理。也可以用于保持多个函数和任务引用 / 更新同一文件的共享状态。在不大幅改写的情况下将以文件系统为前提构建的现有应用迁移到容器时,它也会成为承接这些应用的落脚点。可以用于以文件操作为中心的工作负载,例如临时共享视频和图像中间文件的处理等。

吞吐量模式的选择

EFS 的性能会因吞吐量模式的选择而变化。根据访问量自动调整性能的模式(Elastic)适合负载变动难以预测的工作负载。如果想确保稳定的性能,就选择预先分配吞吐量的模式(Provisioned)。在按存储的数据量成比例决定性能的传统方式中,容量小而访问多时,性能有时会不足,因此对此加以注意。根据访问的特性,选择在延迟和成本之间取得平衡的模式。

可用性与备份

EFS 的 Regional 文件系统将数据冗余存储在多个可用区中,One Zone 文件系统则存储在 1 个可用区中。如果在每个可用区都准备好挂载目标,即使一个可用区发生故障,也可以从另一个可用区继续访问。与将 Lambda 和 ECS 分散部署到多个可用区的配置相结合,为可用区的故障做好准备。为应对误删除和数据损坏,与备份管理服务联动定期获取备份,并建立能够在需要时恢复的机制。对于丢失后会造成困扰的数据,有通过复制到其他区域来应对灾害的方法。

安全设计

为了安全地使用共享文件系统,设计多层的保护。启用静态数据的加密,同时对通信路径也进行加密,以保护数据。为每个访问点分开 POSIX 权限和根目录,防止应用之间的越界访问。此外,如果使用 IAM 授权和文件系统策略,可以控制为只有特定的角色可以使用特定的访问点。通过挂载目标的安全组,使其只能从允许的路径连接。将这些组合起来,构建以最小权限共享文件系统的配置。

总结

通过 EFS 与 Lambda / ECS 的集成,在无服务器架构中也可以利用共享文件系统。可以用访问点按应用分开根目录和 POSIX 权限,用于 Lambda 函数之间的数据共享和大容量文件的处理。通过 Intelligent-Tiering 的生命周期管理,可以将访问少的文件移到 IA,控制存储的成本。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享