【AWS】EFSボリュームの自動マウント設定(AmazonLinux)

# はじめに
EC2インスタンス(AmazonLinux)にてEFSボリュームを自動マウントする設定についてアウトプットしたいと思います。

# 環境

|  項目  |  説明  |
| ---- | ---- |
|  EC2  |  Amazon Linux 2 AMI (HVM), SSD Volume Type  |
| Size | t2.micro |

# 作業前提

- EFSボリュームの作成が完了している
- ネットワーク環境の設定ができている(EC2からEFSボリュームへアクセス可能な状態)

※前提条件をクリアしていない場合は過去の記事をご覧下さい。
[【AWS】AmazonLinuxにEFSボリュームのNFSマウントを実施してみる](https://qiita.com/satton6987/items/b5a67fad6cee73d508b0)


# 手順

EC2インスタンスへログイン済みであることを前提としています。

## 手動マウント

※下記手順を実施済みの場合は飛ばして問題ないです。

### ①ルートユーザーへスイッチ

```bash
sudo su
```

### ②事前にディスク状態を確認

```bash
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# df -Ph
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        474M     0  474M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  400K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.3G  6.8G  16% /
tmpfs            99M     0   99M   0% /run/user/1000
[root@ip-10-0-0-120 ec2-user]#
```

### ③amazon-efs-utilsパッケージインストール

```bash
yum -y install amazon-efs-utils
```

### ④EFSマウント

```bash
mkdir マウントしたいディレクトリ
mount -t efs <ファイルシステムID>:/ <マウントしたいディレクトリ>
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# mkdir /test
[root@ip-10-0-0-120 ec2-user]# mount -t efs fs-7f41435e:/ /test
[root@ip-10-0-0-120 ec2-user]#
```

### ⑤マウント確認

```bash
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# df -Ph
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  404K  492M   1% /run
tmpfs                                           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1                                      8.0G  1.3G  6.8G  16% /
tmpfs                                            99M     0   99M   0% /run/user/1000
fs-7f41435e.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test
[root@ip-10-0-0-120 ec2-user]#
```

### ⑥アンマウント

```bash
umount <マウント済みディレクトリ>
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# umount /test
[root@ip-10-0-0-120 ec2-user]#
[root@ip-10-0-0-120 ec2-user]# df -Ph
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        474M     0  474M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  400K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.3G  6.8G  16% /
tmpfs            99M     0   99M   0% /run/user/1000
[root@ip-10-0-0-120 ec2-user]#
```

→`/test`がアンマウントされている(dfの結果に存在しない)ことを確認

## 自動マウント設定

自動マウントの設定をしていきます。

###　①/etc/fstabバックアップ

```bash
cp -p /etc/fstab /etc/fstab_`date +'%Y%m%d'`
```
※``date +'%Y%m%d'``はサーバ内の当日日付になります。(自動入力)

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# cp -p /etc/fstab /etc/fstab_`date +'%Y%m%d'`
[root@ip-10-0-0-120 ec2-user]#
[root@ip-10-0-0-120 ec2-user]# ll /etc | grep fstab
-rw-r--r--  1 root root       91 May 27 00:48 fstab
-rw-r--r--  1 root root       91 May 27 00:48 fstab_20200701
[root@ip-10-0-0-120 ec2-user]#
```

### ②自動マウント設定追加

`(ファイルシステムID):/ <マウントしたいディレクトリ>   efs    defaults,_netdev  0 0`を`/etc/fstab`に追記

```bash
echo "(ファイルシステムID):/ <マウントしたいディレクトリ>   efs    defaults,_netdev  0 0" >> /etc/fstab
```

※必ず`>>`として下さい。(`>`の場合、ファイル全体が上書きされてしまうため)

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# echo "fs-7f41435e:/ /test   efs    defaults,_netdev  0 0" >> /etc/fstab
[root@ip-10-0-0-120 ec2-user]# cat /etc/fstab
#
UUID=be4f19b3-a8ae-4d74-a7a0-b12b49e21194     /           xfs    defaults,noatime  1   1
fs-7f41435e:/ /test   efs    defaults,_netdev  0 0
[root@ip-10-0-0-120 ec2-user]#
```

### ③バックアップファイルと比較

追記したファイルとバックアップファイルを比較し、差異が修正した箇所のみであることを確認。

```bash
/etc/fstab /etc/fstab_`date +'%Y%m%d'`
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# diff /etc/fstab /etc/fstab_20200701
3d2
< fs-7f41435e:/ /test   efs    defaults,_netdev  0 0
[root@ip-10-0-0-120 ec2-user]#
```

### ④マウント確認

`/etc/fstab`の記述通りマウントできることを確認

```bash
mount <マウントしたいディレクトリ>
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-120 ec2-user]# mount /test
[root@ip-10-0-0-120 ec2-user]# df -Ph
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  404K  492M   1% /run
tmpfs                                           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1                                      8.0G  1.3G  6.8G  16% /
tmpfs                                            99M     0   99M   0% /run/user/1000
fs-7f41435e.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test ←　マウントできている
[root@ip-10-0-0-120 ec2-user]#
```

## 自動マウント確認

### ①EC2の再起動実施

```bash
sudo reboot
```

### ②再起動後のマウント確認

再起動後にログインし、NFSボリュームがマウントされていることを確認

```bash
df -Ph
```

**実行例**

```bash
[ec2-user@ip-10-0-0-120 ~]$ df -Ph
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  408K  492M   1% /run
tmpfs                                           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1                                      8.0G  1.3G  6.8G  16% /
fs-7f41435e.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test ←　マウントされている
tmpfs                                            99M     0   99M   0% /run/user/1000
[ec2-user@ip-10-0-0-120 ~]$
```

# まとめ

- AmazonLinuxにEFSボリュームを自動マウントさせるためには、`/etc/fstab`を修正する必要がある。
- amazon-efs-utilsパッケージは必須

# 参考
[AWS EFSの設定とマウント](https://qiita.com/sakura_star/items/3c312d7ba56bead96db5)