在Amazon Linux(CentOS)和Ubuntu系统的EC2上使用EFS服务

2年前写过一篇EFS挂载使用说明,一晃2年过去。EFS界面已经大幅优化,挂载命令对中国区支持也更加友好,不需要以前步骤的人工修改挂载点了。因此重新编写了本文档。

新版EFS操作界面简化了创建过程,可实现几次点击即可配置好EFS。本文描述如何创建EFS服务,并在Amazon Linux(CentOS)和Ubuntu系统的EC2挂载使用。

一、创建EFS服务

1、创建EFS所需要的安全组

安全规则组的配置有两种方式,请二选一:

  • 1)配置一个EFS Service用的安全规则组,直接放行本VPC的IP地址,或者特定EC2的安全地址;
  • 2)配置一个EFS Service用的安全组,再配置一个EFS Client用安全组绑定到EC2或者要使用EFS的服务。在EFS Service安全组的放行清单中,不要放行整个IP地址段,而是只放行来源是EFS Client的安全组的名字。由此即可实现比放行IP地址更精确、更灵活的管控。

本文使用方式一配置安全组。

进入VPC界面,点击左侧的安全规则组菜单。如下截图。

点击创建按钮。

在创建新的安全规则组界面,输入安全规则组名称是EFS,描述部分任意输入(不可用中文),然后协议位置选择NFS,在源地址位置输入本VPC的地址段,表示允许本VPC的链接EFS服务。如下截图。

继续将界面向下滚动。在出站流量部分保持默认不用修改,也就是默认允许出站流量。然后在Tag标签位置,输入Name,值是EFS Service,这样方便稍后在安全规则组中检索。最后点击创建。如下截图。

至此安全规则组创建完成。

2、使用快速向导创建EFS服务

进入EFS服务界面,点击右上角的创建按钮。如下截图。

在弹窗的创建向导框中,输入EFS文件系统名称,选择要使用的VPC,并选择是区域型存储,然后点击创建。如下截图。

在数秒后,EFS文件系统创建完成。然后点击名称查看详情。如下截图。

至此EFS创建完成。

3、更换EFS安全组

EFS的快速创建向导会为EFS使用默认的安全规则组,接下来需要更换默认安全组为本文第一步创建的安全组。

进入EFS文件系统界面,点击上一步创建的EFS查看详情,点击网络标签。如下截图。

在安全规则组编辑位置上,点击默认的安全规则组边上的x符号,删除掉当前使用的安全规则组,然后从搜索框中搜索前文步骤配置好的安全规则组。如下截图。

绑定新的安全组完成。最后点击保存按钮。如下截图。

至此EFS服务配置完成。

二、在EC2上使用EFS服务

1、Amazon Linux 2操作系统和CentOS系统

(1)安装EFS客户端

执行如下命令安装:

yum update -y
yum install amazon-efs-utils -y

即可安装好客户端。

(2)挂载EFS

创建挂载点目录并挂载。

mkdir /efs
mount -t efs -o tls fs-0c4100ec2f42424e4:/ /efs

设置开机自动挂载。编辑/etc/fstab文件,加入如下一行:

fs-0c4100ec2f42424e4:/ /efs efs _netdev,noresvport,tls 0 0

请替换以上一行中的配置为实际EFS的名称、挂载路径。然后验证是否配置正常。首先执行umount /efs取消挂载。然后确认/etc/fstab挂载路径修改完毕。接下来执行mount -a重新挂载。最后检查/efs目录是否挂载正常即可。

配置成功后,重启EC2后也会自动挂载。

(3)设置访问权限

EFS默认是按照root身份挂载的。而普通Amazon Linux 2和CentOS操作系统的EC2默认用户名是ec2-user。为了有权限写入数据,可以用root身份在EFS挂载后根目录内,创建一个新的目录并,赋予ec2-user用户的读写权限。

mkdir /efs/demo1
chown ec2-user:ec2-user /efs/demo1

现在退出root身份,以EC2默认的ec2-user用户即可正常读写。

接下来可向EFS存储哪复制文件做下验证。以下输出可以看到复制文件成功。

[ec2-user@ip-172-31-43-216 efs]$ ls -l
total 1606572
drwxr-xr-x 2 ec2-user ec2-user       6144 May 25 14:07 demo1
-rw-r--r-- 1 root     root     1645123327 May 25 11:15 test-1.tar.gz
[ec2-user@ip-172-31-43-216 efs]$ cp test-1.tar.gz demo1/
[ec2-user@ip-172-31-43-216 efs]$ ls -l demo1/
total 3213144
-rw-rw-r-- 1 ec2-user ec2-user          0 May 25 13:43 hehe
-rw-rw-r-- 1 ec2-user ec2-user          0 May 25 14:06 hehe2
-rw-r--r-- 1 ec2-user ec2-user 1645123327 May 25 13:45 test-0.tar.gz
-rw-r--r-- 1 ec2-user ec2-user 1645123327 May 25 14:08 test-1.tar.gz
[ec2-user@ip-172-31-43-216 efs]$

至此操作完成。

2、Ubuntu系统

(1)安装EFS客户端

执行如下命令安装客户端。以root身份执行如下命令:

apt-get update && apt-get upgrade -y
apt-get install git binutils -y
git clone https://github.com/aws/efs-utils
cd efs-utils
./build-deb.sh
apt-get -y install ./build/amazon-efs-utils*deb

(2)挂载EFS

创建挂载点目录并挂载。

mkdir /efs
mount -t efs -o tls fs-0c4100ec2f42424e4:/ /efs

设置开机自动挂载。编辑/etc/fstab文件,加入如下一行:

fs-0c4100ec2f42424e4:/ /efs efs _netdev,noresvport,tls 0 0

请替换以上一行中的配置为实际EFS的名称、挂载路径。然后验证是否配置正常。首先执行umount /efs取消挂载。然后确认/etc/fstab挂载路径修改完毕。接下来执行mount -a重新挂载。最后检查/efs目录是否挂载正常即可。

配置成功后,重启EC2后也会自动挂载。

(3)设置访问权限

EFS默认是按照root身份挂载的。而普通Ubuntu操作系统的EC2默认用户名是ubuntu。为了有权限写入数据,可以用root身份在EFS挂载后根目录内,创建一个新的目录并,赋予Ubuntu用户的读写权限。

mkdir /efs/demo1
chown ubuntu:ubuntu /efs/demo1

现在退出root身份,以EC2默认的ubuntu用户即可正常读写。

接下来可向EFS存储哪复制文件做下验证。以下输出可以看到复制文件成功。

ubuntu@ip-172-31-31-19:/efs$ ls -l
total 1606580
drwxr-xr-x  3 root   root         6144 May 25 13:43 ./
drwxr-xr-x 20 root   root         4096 May 25 13:38 ../
drwxr-xr-x  2 ubuntu ubuntu       6144 May 25 13:43 demo1/
-rw-r--r--  1 root   root   1645123327 May 25 11:15 test-1.tar.gz
ubuntu@ip-172-31-31-19:/efs$ cp test-1.tar.gz demo1/
ubuntu@ip-172-31-31-19:/efs$ ls -lh demo1/
total 1.6G
-rw-rw-r-- 1 ubuntu ubuntu    0 May 25 13:43 hehe
-rw-r--r-- 1 ubuntu ubuntu 1.6G May 25 13:45 test-1.tar.gz
ubuntu@ip-172-31-31-19:/efs$

至此操作完成。

三、在Workspaces服务的Amazon Linux 2系统上使用EFS

1、查看Workspaces所在可用区

Workspaces提供的唯一Linux操作系统是Amazon Linux 2系统。在Workspaces上,默认使用的是AWS Managed AD托管的目录服务。因此,Workspaces的系统默认DNS是托管的域控制器,可通过执行cat /etc/resolv.conf查看当前默认的DNS。在这种情况下,DNS会无法解析出来EFS的挂载点的Endpoint。

为了正确挂载EFS,可使用IP模式进行操作。为了确认当前Workspaces的IP地址,可以执行ipconfig命令查看Workspaces的内网IP,例如本例中可以看到IP是172.31.101.217。接下来到VPC界面的Subnet子网中,确认这个IP地址属于哪一个子网,再确认它所在的可用区。

2、查看EFS使用IP地址挂载的命令

查看界面可获得如下信息:

sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 172.31.7.78:/ efs

将以上命令复制到Workspaces上,并酌情调整下挂载目录,录入挂载到当前用户的桌面上。

cd /volumes/user/home/lxy2/Desktop/
mkdir efs
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 172.31.7.78:/ efs

3、设置开机自动挂载

用root身份编辑系统启动的开机配置文件/etc/rc.d/rc.local,在最后加入如下一行:

mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 172.31.13.238:/ /volumes/user/home/lxy2/Desktop/efs

保存退出。然后为这个文件设置运行权限。

chmod 755 /etc/rc.d/rc.local

重启Workspaces,即可验证挂载是否成功。