使用 Amazon EFS 构建共享文件存储 - 从 Lambda/ECS/EC2 挂载的设计指南
明确性能模式和吞吐量模式的选型标准,介绍通过生命周期管理自动迁移到 IA 层以优化成本的方法。
EFS 的特点及与 EBS/S3 的选择
EFS 是符合 NFS v4.1 的托管文件系统,最大特点是可从多个计算资源同时挂载。EBS 是附加到单个 EC2 实例的块存储(io2 多附加除外),S3 是对象存储无法作为 POSIX 文件系统挂载。需要从多个实例或容器访问同一文件时选择 EFS。适用于 CMS 共享媒体存储、机器学习训练数据共享、CI/CD 构建缓存共享等场景。EFS 无需预先配置容量,随着文件的增删自动扩缩。数据冗余存储于区域内多个可用区,标准具备对单一可用区故障的容错能力。选择 One Zone 存储类别则仅存储在单个可用区,费用更低但需承担可用区故障风险。
性能模式与吞吐量模式
性能模式有通用模式和最大 I/O 模式两种。通用模式延迟低,适合大多数工作负载。最大 I/O 模式针对数千客户端同时访问优化,但延迟略高。文件系统创建后无法更改性能模式,因此需在初始设计阶段评估需求。吞吐量模式有 Elastic、预置和突发三种。Elastic 模式根据访问模式自动扩缩吞吐量,提供最高 10 GiB/s 的读取吞吐量。无需管理突发积分,推荐新建文件系统使用 Elastic 模式。预置模式用于需要保证固定吞吐量的场景。突发模式提供与文件系统大小成比例的基线吞吐量,通过积累的突发积分应对短时间高负载,但小型文件系统存在积分耗尽的风险。
生命周期管理与成本优化
EFS 的生命周期管理是将一定期间未访问的文件自动迁移到低频访问(IA)存储类别的功能。IA 存储类别费用约为标准类别的 8%,最多可削减 92% 成本。迁移触发器可从 1 天、7 天、14 天、30 天、60 天、90 天中选择。访问 IA 类别的文件时每次读取会产生访问费用,但对于访问频率低的文件,存储成本的削减效果超过此费用。启用 Intelligent-Tiering 还可将再次访问的文件自动移回标准类别。Archive 存储类别成本更低,适合比 IA 访问频率更低的数据(如合规保留数据)。成本优化最佳实践是将生命周期管理设为 30 天迁移至 IA 并启用 Intelligent-Tiering,这对大多数工作负载有效。 EFS 的深入理解可参考专业书籍(Amazon)。
从 Lambda/ECS/EC2 挂载的设计模式
EC2 挂载推荐使用 amazon-efs-utils 包,支持 TLS 加密传输和 IAM 认证。安全组需允许 NFS 端口(2049)。ECS(Fargate)在任务定义的 volumes 部分指定 EFS 文件系统 ID 和访问点 ID。使用访问点可为每个容器强制不同的根目录和 POSIX 用户,在多租户环境中有效实现数据隔离。Lambda 在函数配置中指定 VPC 和文件系统挂载路径。Lambda 挂载 EFS 时函数必须在 VPC 内运行,冷启动时建立 EFS 连接会增加约数百毫秒的首次调用延迟,需在设计中纳入考虑。多个 Lambda 函数挂载同一 EFS 可实现函数间的数据共享和缓存持久化。
安全性与备份
EFS 可通过文件系统策略强制传输加密(TLS),拒绝来自未加密客户端的连接。启用 IAM 认证后,挂载时验证 IAM 角色权限,可实现仅允许访问特定访问点的精细控制。POSIX 权限的文件级访问控制照常运作。备份方面,EFS 与 AWS Backup 集成,支持定期自动备份和时间点恢复。复制功能可在另一区域创建 EFS 只读副本,用于灾难恢复(DR)。故障转移到副本需要手动操作,但可将 RTO 控制在分钟级别。
总结
EFS 是 AWS 中唯一符合 POSIX 的托管服务,适用于需要从多个计算资源共享访问的文件存储。结合 Elastic 吞吐量模式和生命周期管理,可同时优化性能和成本。通过从 Lambda 和 ECS 挂载,无服务器架构也能活用共享文件系统。访问点实现多租户隔离,文件系统策略强制加密,可满足安全性要求。