本文介绍了如何在AWS中国区使用EC2挂载EFS服务。
一、创建EC2
本文目标读者假设已经掌握EC2使用技能,这里不再介绍EC2的创建和SSH登录密钥的使用。
请创建一个Amazon Linux 2版本的系统。Amazon Linux 2和CentOS 7版本高度兼容,使用yum做库管理。这里选则Amazon Linux的原因是可以使用自带的EFS挂载工具,操作更为简单。其他版本OS的挂载请参考AWS官方文档。
二、创建EFS
1、创建安全规则组
进入VPC下的安全规则组界面,点击创建安全规则组。
创建安全规则组界面,注意选择稍后要使用的VPC。安全规则组不能跨VPC,因此如果VPC选择错误,安全规则组不可见。如下截图。
创建完成。继续编辑刚才新建的安全规则组,可以看到Inbound入栈规则默认是空白的。如下截图。
从下拉框中选择NFS协议,在源地址位置选择Anywhere任意地址。如果有需要的话,可以认为限制特定网段。如下截图。
保存配置,安全规则组配置完成。
2、创建EFS文件系统(默认权限)
首先进入EFS界面,点击创建文件系统。
在选择VPC界面,选择要使用的VPC,并且绑定所有的可用区。同时,在每个可用区最后,选择安全规则组的界面,将默认的default删除,选中刚才新建的名为efs的安全规则组。如下截图。
在向导的第二步骤,选择生命周期规则为30天,将不活跃的数据转移到非频繁访问存储, 以明显降低成本。如下截图。
将页面继续向下滚动,吞吐能力选择爆发型,性能选项选择一般用途,以降低成本,在加密的位置,打开数据加密,选择第一项KMS密钥。此时会自动生成一个EFS专用的KMS密钥。如下截图。
接下来配置权限。在这一步保持默认选项不变,即可创建出来默认可读写的EFS服务,且根目录是可写状态。
继续到向导最后一步,点击创建文件系统。
至此创建完成。
三、从EC2 Linux上挂载使用
1、安装客户端
如前文所述,本文使用兼容CentOS 7的Amazon Linux 2进行配置。需要确认此EC2与EFS在同一个Region,且在同一个VPC内。
登录EC2上。执行如下命令安装客户端。
sudo -i yum update -y
sudo -i yum install -y amazon-efs-utils
安装完成。如下截图。
安装客户端完成。
2、调整客户端适应中国区服务的挂载地址
因为中国区的endpoint与AWS海外不同,因此需要修改amazon-efs-utils的配置文件。执行如下命令:(注意以下为一条命令没有换行)
echo -e '\n[mount.cn-north-1]\ndns_name_suffix = amazonaws.com.cn\n\n[mount.cn-northwest-1]\ndns_name_suffix = amazonaws.com.cn' | sudo tee -a /etc/amazon/efs/efs-utils.conf
如下截图。
修改完成。
3、挂载
执行如下命令挂载。请把fs-xxxx这一串,替换为AWS控制台上显示的本EFS文件系统的名称。以下命令用ec2-user身份,因为Amazon Linux 2的证书登录用户默认叫做ec2-user,因此当前目录是 /home/ec2-user 。
注:以下参数中,-o tls是指用SSL方式挂载。如果完全是在VPC内,不涉及与私有数据中心或其他云的连接,也可以去掉tls参数。
mkdir ~/efs
sudo mount -t efs -o tls fs-3938d1dc:/ efs
如下截图中红色的。
执行命令后,挂载完成。
4、修改Owner
刚挂载完的 /home/ec2-user/efs 目录的属主和组是 root:root,所以直接sudo为root是可以写入的。例如touch hehe就可以建立一个文件名为hehe的空白文件。
实际应用中,大部分时候运行身份可能不是root,是apache webserver或者其他非root身份。一般用户如Amazon Linux的默认证书登录用户ec2-user是没权限写入的,因此可修改下他们的属主。不建议修改为权限777,这样过于不安全。
执行如下命令:
sudo chown ec2-user:ec2-user /home/ec2-user/efs
由此ec2-user身份就有权限写入。例如执行touch命令新建一个空白文件,或者移动一个压缩包到EFS上可以进行写入测试。再执行ls命令查询,就可以看到是新写入的文件都是 ec2-user:ec2-user 的身份。如下截图。
至此本机可以正常读写EFS。
5、使用另外的客户端挂载
重复以上过程,另外新建一个EC2客户端,并且同样挂载。
挂载后可以看到同样的文件。操作正常。
6、设置fstab再重启后自动挂载
为了能在重启后自动挂载,可以修改EC2对应的/etc/fstab文件。
请注意,如果修改有数据生产环境,建议先对本EC2做快照,或者实施其他备份手段,以免配置失败导致无法启动影响生产。如果启动失败,需要将硬盘挂载到其他健康的EC2上,重新mount磁盘,然后进行修复。
以root身份编辑 /etc/fstab,写入如下一行:
fs-3938d1dc.efs.cn-northwest-1.amazonaws.com.cn:/ /home/ec2-user/efs nfs4 defaults
将以上第一段,file-system-id替换为本机挂载的EFS对应的名称,如果在宁夏区,则endpoint就使用cn-northwest-1,如果在北京,需要替换为cn-north-1,最后替后边的挂载路径也要相应替换。修改后效果如下。
先不要重启,以root身份执行 mount -a 命令确认下有无报错。执行后没有任何报错,就表示配置成功了。现在可以重启EC2。
重启后再次登录,执行df命令查看挂载,正常。如下截图。
至此配置完成。