Amazon EFS Overview#
Keywords: AWS, EFS, Elastic File System.
What is EFS#
EFS 是一个通过网络挂载的共享文件系统. 可以理解为一个巨大的本地磁盘文件系统. 它主要是给计算资源提供文件系统的访问. 更重要的是, 它能给多个 EC2 / Container 提供 共享文件系统. 与之相比, 一个 EBS 卷只能挂载到一个 EC2 上.
在使用上, EFS 可以说是一个无限大小的单个硬盘. 熟悉 Linux 的同学知道, Linux 下的磁盘硬件是需要挂载到特定目录才能使用. Linux 启动的时候会用到一个临时文件系统. 在这个文件系统下你可以创建一些空目录, 并将硬件挂载到这个目录. 之后你对这个目录的读写就会使用你挂载的硬件了. 而如果你把 磁盘 1 挂载到 root /
, 而把磁盘 2 挂载到 /disk2
, 那么写入到 /disk2
的数据将会被写入到磁盘 2. 所以 EFS 本质上也是要挂载的. 在实践中从 EFS 的视角看, 把 EFS 作为 Root, 那么文件结构可能会是这样:
/ec2/ec2-uuid/user-id/...
比如你的一台 ec2 你想升级 CPU 内存, 但是想留着数据, 那么可以把 ec2 销毁, 重新创建一个, 然后把 efs 的 /ec2/ec2-uuid 挂载到新的 ec2 的目录下即可.
而这个 user-id 的部分则是用来 Linux 上的各个用户, 不同的用户有不同的文件夹, 就跟 $HOME 的效果类似. 而且 EFS 还能用 IAM Role 来定义访问权限, 这就更方便管理了.
EFS 的作用是给 VPC 内的 EC2 提供文件系统.
必须为 EFS 指定 VPC 配合使用.
必须为 EFS 指定 Mount Target.
每一个 AZ 可以创建一个 Mount Target.
如果一个 AZ 上有多个 Subnet, 可以在其中一个 Subnet 上创建一个 Mount Target. 所有在当前 AZ 上的 EC2 都共享使用同一个 Mount Target.
AWS 建议为每一个 AZ 都创建一个 Mount Target. 因为 在一个 AZ 上的 EC2 访问另一个 AZ 上的 Mount Target 价格很贵.
位于同一个 Region 下的两个 VPC 可以通过使用 VPC Peering 来共享访问一个 EFS. 不同一个 Region 的不行.
EFS 有专用的 Network File System Port, 而 EC2 本身受到 Security Group 的限制, 所以 Security Group 设置不当可能会导致 EC2 无法访问 EFS.
EFS 的加密分两种, 存储加密和传输加密. 存储加密只能在创建 EFS 的时候启用. 传输加密则不是 EFS 本身的功能, 需要在启动 EC2 时使用 EFS Mount Helper, 断开再重新挂载同一个 EFS 即可使得传输加密生效, 详情请参考这篇文档 Data encryption in Amazon EFS.
Performance Mode 有两种: General 和 Max IO. Max IO 是给 几十个上百个 EC2 分享同一个 EFS 时用的, 延迟高一些. General 比较快, 但是 IO 的容量不是特别大.
Throughput Mode 有两种: Burst 和 Provisioned, Burst 是大多数时间很普通, 5MB/s, 一天能有 18 分钟提供 100MB/S 的速度. Provisioned 适用于 100MB ~ 1TB /S 级别的速度.
EFS Knowledge Graph#
以下是 EFS 的知识图谱, 对所有的知识点进行了一个梳理.