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后,接下来可以:

  1. RDS关系数据库 - 学习数据库服务
  2. Web应用部署 - 实践Web应用
  3. 微服务架构 - 学习微服务架构
最后更新:2026-03-28