EFS文件系统 #
一、EFS概述 #
1.1 什么是EFS #
Amazon EFS(Elastic File System)是AWS提供的完全托管、弹性扩展的网络文件系统服务,支持NFS协议,可被多个EC2实例同时访问。
1.2 EFS特点 #
text
EFS核心特点:
├── 弹性扩展
│ └── 自动扩展和收缩
│ └── 无需预置容量
│
├── 多实例共享
│ └── 可被多个实例同时访问
│ └── 支持并发读写
│
├── 完全托管
│ └── 无需管理基础设施
│ └── AWS处理维护
│
├── 高可用
│ └── 跨多个可用区存储
│ └── 自动复制
│
├── 兼容NFS
│ └── 标准NFS 4.1协议
│ └── 兼容现有应用
│
└── 安全
└── 支持加密
└── IAM授权
1.3 EFS与其他存储对比 #
| 特性 | EFS | EBS | S3 |
|---|---|---|---|
| 类型 | 文件系统 | 块存储 | 对象存储 |
| 访问方式 | NFS | 块设备 | API |
| 共享 | 多实例 | 单实例 | 多客户端 |
| 容量 | 弹性 | 固定 | 无限 |
| 延迟 | 中 | 低 | 高 |
| 使用场景 | 共享文件 | 数据库 | 对象存储 |
1.4 EFS使用场景 #
text
EFS适用场景:
├── 共享文件存储
│ └── 多实例共享配置文件
│
├── Web服务器内容
│ └── 多Web服务器共享内容
│
├── 用户主目录
│ └── 集中管理用户数据
│
├── 构建环境
│ └── CI/CD共享构建目录
│
├── 容器持久存储
│ └── 容器共享存储卷
│
└── 大数据分析
└── 共享数据集
二、创建EFS文件系统 #
2.1 创建步骤 #
text
创建EFS文件系统步骤:
├── 第一步:基本信息
│ ├── 名称
│ └── VPC选择
│
├── 第二步:网络访问
│ ├── 选择挂载目标子网
│ └── 安全组配置
│
├── 第三步:性能选项
│ ├── 吞吐模式
│ └── 性能模式
│
├── 第四步:加密
│ └── 启用加密(可选)
│
└── 第五步:审核创建
2.2 通过CLI创建 #
bash
aws efs create-file-system \
--performance-mode generalPurpose \
--throughput-mode bursting \
--encrypted \
--tags Key=Name,Value=my-efs
2.3 创建挂载目标 #
bash
aws efs create-mount-target \
--file-system-id fs-12345678 \
--subnet-id subnet-12345678 \
--security-groups sg-12345678
三、挂载EFS #
3.1 安装EFS工具 #
bash
sudo yum install -y amazon-efs-utils
sudo apt-get install -y amazon-efs-utils
3.2 挂载文件系统 #
bash
sudo mkdir /efs
sudo mount -t efs fs-12345678:/ /efs
sudo mount -t efs -o tls fs-12345678:/ /efs
3.3 自动挂载 #
bash
echo "fs-12345678:/ /efs efs defaults,_netdev 0 0" | sudo tee -a /etc/fstab
3.4 通过DNS挂载 #
bash
sudo mount -t efs -o tls fs-12345678.efs.us-east-1.amazonaws.com:/ /efs
3.5 验证挂载 #
bash
df -h | grep efs
mount | grep efs
四、EFS性能 #
4.1 性能模式 #
text
性能模式:
├── 通用用途(General Purpose)
│ ├── 默认模式
│ ├── 低延迟
│ ├── 适合大多数工作负载
│ └── 最高7,000文件操作/秒
│
└── 最大I/O(Max I/O)
├── 更高吞吐量
├── 更高延迟
├── 适合大规模并行工作负载
└── 最高500,000+文件操作/秒
4.2 吞吐模式 #
text
吞吐模式:
├── 突增模式(Bursting)
│ ├── 默认模式
│ ├── 基于存储大小分配吞吐
│ ├── 可累积突增额度
│ └── 适合突发工作负载
│
└── 预置模式(Provisioned)
├── 指定吞吐量
├── 不依赖存储大小
├── 额外付费
└── 适合持续高吞吐需求
│
└── 弹性模式(Elastic)
├── 自动调整吞吐量
├── 无需预置
└── 适合变化的工作负载
4.3 性能基准 #
| 存储大小 | 基准吞吐量 | 突增吞吐量 |
|---|---|---|
| 100 GB | 5 MB/s | 100 MB/s |
| 1 TB | 50 MB/s | 100 MB/s |
| 10 TB | 500 MB/s | 1,000 MB/s |
4.4 性能优化 #
text
性能优化建议:
├── 选择合适的性能模式
│ └── 大规模并行选择Max I/O
│
├── 选择合适的吞吐模式
│ └── 持续高吞吐选择Provisioned
│
├── 并行写入
│ └── 多线程/多进程写入
│
├── 使用正确的NFS选项
│ └── rsize、wsize参数
│
└── 监控性能指标
└── 根据监控调整配置
五、EFS存储类别 #
5.1 存储类别 #
text
EFS存储类别:
├── 标准(Standard)
│ ├── 频繁访问的数据
│ └── 多可用区存储
│
├── 标准IA(Standard-IA)
│ ├── 不频繁访问的数据
│ ├── 更低的存储成本
│ └── 更高的访问成本
│
└── One Zone
├── 单可用区存储
├── 更低成本
└── 适合可重建数据
5.2 生命周期管理 #
text
生命周期管理:
├── 自动将不活跃文件移动到IA
├── 可配置策略
│ ├── 7天后移动
│ ├── 14天后移动
│ ├── 30天后移动
│ ├── 60天后移动
│ ├── 90天后移动
│ ├── 180天后移动
│ └── 270天后移动
│
└── 访问时自动移回标准
5.3 启用生命周期管理 #
bash
aws efs put-lifecycle-configuration \
--file-system-id fs-12345678 \
--lifecycle-policies TransitionToIA=AFTER_30_DAYS
六、EFS安全 #
6.1 网络安全 #
text
网络安全配置:
├── 安全组
│ └── 控制NFS访问(端口2049)
│
├── 网络ACL
│ └── 子网级别访问控制
│
└── VPC端点
└── 私有网络访问
6.2 加密 #
text
加密选项:
├── 传输中加密
│ └── 使用TLS
│ └── 挂载时启用
│
└── 静态加密
├── 使用AWS KMS
├── 创建时启用
└── 透明加密
6.3 IAM授权 #
text
IAM授权:
├── EFS文件系统策略
│ └── 控制访问权限
│
├── IAM身份策略
│ └── 用户/角色权限
│
└── 客户端授权
└── 基于IAM的NFS访问
6.4 文件系统策略示例 #
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/EC2Role"
},
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite"
],
"Resource": "arn:aws:elasticfilesystem:us-east-1:123456789012:file-system/fs-12345678"
}
]
}
七、EFS备份 #
7.1 备份选项 #
text
备份方式:
├── AWS Backup
│ └── 自动备份
│ └── 策略管理
│
└── 手动备份
└── 按需创建
7.2 使用AWS Backup #
bash
aws backup create-backup-plan \
--backup-plan file://backup-plan.json
7.3 备份最佳实践 #
text
备份建议:
├── 定期备份
├── 设置保留策略
├── 跨区域复制
├── 测试恢复流程
└── 监控备份状态
八、EFS监控 #
8.1 CloudWatch指标 #
| 指标 | 说明 |
|---|---|
| DataReadIOBytes | 读取数据量 |
| DataWriteIOBytes | 写入数据量 |
| MetadataIOBytes | 元数据操作 |
| TotalIOBytes | 总I/O |
| ClientConnections | 客户端连接数 |
| BurstCreditBalance | 突增额度余额 |
| PercentIOLimit | I/O限制百分比 |
| StorageBytes | 存储使用量 |
8.2 设置告警 #
bash
aws cloudwatch put-metric-alarm \
--alarm-name "EFSBurstCreditLow" \
--alarm-description "突增额度不足" \
--metric-name BurstCreditBalance \
--namespace AWS/EFS \
--statistic Average \
--period 300 \
--threshold 1000000000 \
--comparison-operator LessThanThreshold \
--dimensions Name=FileSystemId,Value=fs-12345678
九、EFS访问点 #
9.1 访问点概述 #
text
访问点特点:
├── 简化应用访问
├── 强制用户身份
├── 强制根目录
├── 强制权限
└── 应用级访问控制
9.2 创建访问点 #
bash
aws efs create-access-point \
--file-system-id fs-12345678 \
--posix-user Uid=1000,Gid=1000 \
--root-directory Path=/app,CreationInfo={OwnerUid=1000,OwnerGid=1000,Permissions=755}
9.3 使用访问点挂载 #
bash
sudo mount -t efs -o tls,accesspoint=fsap-12345678 fs-12345678:/ /app
十、EFS最佳实践 #
10.1 性能最佳实践 #
text
性能建议:
├── 选择合适的性能模式
├── 选择合适的吞吐模式
├── 使用生命周期管理
├── 监控突增额度
├── 并行化I/O操作
└── 使用正确的挂载选项
10.2 安全最佳实践 #
text
安全建议:
├── 启用加密
├── 使用安全组限制访问
├── 使用IAM授权
├── 使用访问点
├── 定期审计权限
└── 启用日志记录
10.3 成本优化 #
text
成本优化建议:
├── 使用生命周期管理
├── 选择合适的存储类别
├── 监控存储使用
├── 清理不需要的文件
├── 选择合适的吞吐模式
└── 使用One Zone(如适用)
十一、EFS限制 #
11.1 配额限制 #
| 限制项 | 配额 |
|---|---|
| 每账户文件系统 | 1000 |
| 每文件系统挂载目标 | 每可用区1个 |
| 文件系统大小 | 无限制 |
| 单个文件大小 | 52.67TB |
| 文件系统策略大小 | 20KB |
十二、小结 #
本章介绍了EFS文件系统:
| 内容 | 要点 |
|---|---|
| EFS概念 | 网络文件系统、多实例共享 |
| 性能模式 | 通用用途、最大I/O |
| 吞吐模式 | 突增、预置、弹性 |
| 存储类别 | 标准、IA、One Zone |
| 安全 | 加密、IAM授权、访问点 |
下一步学习 #
了解EFS后,接下来可以:
最后更新:2026-03-28