【AWS】AmazonLinuxにEFSボリュームのNFSマウントを実施してみる

# はじめに
AmazonLinuxにEFSのNFSマウントを実施する手順をまとめたいと思います。
今回はEC2インスタンス2台に同じEFSをマウントして、ファイルを共有できるか確認するという内容になります。

# そもそもEFSとは？

「Amazon Elastic File System」の略。
AWSクラウドサービスおよびオンプレミスリソースで使用するためのNFSファイルシステム

## 特徴

- NFSサーバ(EFS)自体はAWSにて管理
- 高い可用性と耐久性を備えている

# 基盤環境

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

※AmazonLinuxは作成直後の状態になります。

# 構成

![EFSマウント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/8bb1b1c6-d424-c8d9-ceea-438ef2a24b4d.png)

## 構成表

|  項目  |  名前  |  備考  |
| ---- | ---- | ---- |
|  VPC  |  efs-test  |  -  |
| セキュリティグループ | efs-security |  -  |
|  サブネット#1  |  efs-public-1a  |  AZ(ap-norheast-1a)  |
|  サブネット#2  |  efs-public-1c  |  AZ(ap-norheast-1c)  |
|  EC2#1  |  efs-test01  |  -  |
|  EC2#2  |  efs-test02  |  -  |
|  EFS  |  test-efs  |  -  |

※サブネット2つにつきましては、パブリックIPへSSH接続できるように設定しています。


# 手順

※VPCについては、セキュリティグループの説明以外省略します。

## EFS作成

### ①EFSを開く

AWSマネジメントコンソールよりEFSを開く。

![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/09021301-b7f0-3f6a-b9d5-a6c065d671b7.jpeg)

### ②ファイルシステムの作成

「ファイルシステムの作成」をクリック。

![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/edd8a30c-3518-3794-3a83-9d82cb12b29f.jpeg)

### ③ネットワークアクセスの設定

以下のように設定

- VPC

|  項目  |  名前  |  備考  |
| ---- | ---- | ---- |
|  VPC  |  efs-test  |  -  |


- マウントターゲットの設定

|  チェック  |  アベイラビリティーゾーン  |  サブネット  |  IPアドレス  |  セキュリティグループ  |
| ---- | ---- | ---- | ---- | ---- |
| ☑ | ap-northeast-1a |  efs-public-1a  |  自動  |  efs-security  |
|  ☑  |  ap-northeast-1c  |  efs-public-1c  |  自動  |  efs-security  |

![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/eee1c1c2-8b43-34d1-043e-7b6acc923409.jpeg)

設定後、**次のステップ**をクリック

### ④タグ設定

下記のようにタグ設定を実施

|  キー  |  値  |
| ---- | ---- |
|  Name  |  test-efs |

![4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/1b892e45-da2c-f48b-eb0a-5a59ccb7b8da.jpeg)

他の設定はデフォルトのままで、**次のステップ**をクリック

### ⑤内容確認

内容確認し、**ファイルシステムの作成**をクリック。

![7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/cffd2095-1571-e846-a494-372c758a613c.jpeg)


### ⑥ファイルシステム作成

ファイルシステム作成が完了すると、下記のようになる。
※マウントターゲットの状態が「利用可能」

![efs.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/46a5f248-180e-10ef-33e4-6320c65ac1e4.jpeg)


## セキュリティグループ

セキュリティグループ(efs-security)に**NFS(0.0.0.0/0)**を追加。
※セキュリティグループはVPCダッシュボードから設定可能

![9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/4de537bc-cd5a-3605-696f-ae10a8a6dd1d.jpeg)

※設定前の状態では、SSH/HTTP/HTTPSをフルオープン(0.0.0.0/0)状態にしています。

## EC2設定

EC2インスタンス2台(efs-test01/efs-test02)に同様の設定を実施します。

### ①rootへスイッチ

```bash
sudo su
```

### ②ディスク確認

```bash
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-191 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-191 ec2-user]#
```

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

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

### ④EFSマウント

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

**実行例**

```bash
mkdir /test
mount -t efs fs-ecfdfecd:/ /test
```

※ファイルシステムIDはこちらの部分になります。
(EFSダッシュボードのファイルシステム一覧から確認できます。)

![ID.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/687430bb-e9fa-537d-cabe-8947d31b0c3b.jpeg)



### ⑤EFSマウント確認

```bash
df -Ph
```

**実行例**

```bash
[root@ip-10-0-0-191 ~]# 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-ecfdfecd.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test
[root@ip-10-0-0-191 ~]#
```

# 確認

EC2インスタンス2台(efs-test01/efs-test02)にてファイルが共有できるか確認します。
※今回の確認手順では、分かりやすくするためにOSにホスト名を付与しています。

## ①マウント確認

2台とも「/test」にボリュームがマウントされていることを確認。

- efs-test01

```bash
[root@efs-test01 ~]# df -Ph
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  464K  492M   1% /run
tmpfs                                           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1                                      8.0G  1.3G  6.8G  16% /
fs-ecfdfecd.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test　←　これ
tmpfs                                            99M     0   99M   0% /run/user/0
tmpfs                                            99M     0   99M   0% /run/user/1000
[root@efs-test01 ~]#
```

- efs-test02

```bash
[root@efs-test02 ~]# df -Ph
Filesystem                                      Size  Used Avail Use% Mounted on
devtmpfs                                        474M     0  474M   0% /dev
tmpfs                                           492M     0  492M   0% /dev/shm
tmpfs                                           492M  464K  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/0
fs-ecfdfecd.efs.ap-northeast-1.amazonaws.com:/  8.0E     0  8.0E   0% /test
tmpfs                                            99M     0   99M   0% /run/user/1000
[root@efs-test02 ~]#
```

## ②efs-test01にてファイル作成

efs-test01より`/text`へファイルの作成を実施する。

### ファイル作成の流れ

①`test.txt`作成
②`test.txt`に「test」と書き込み
③`test.txt`の表示

### コマンド

```bash
touch /test/test.txt
echo test > /test/test.txt
cat /test/test.txt
```

**実行例**

```bash
[root@efs-test01 ~]# touch /test/test.txt
[root@efs-test01 ~]# echo test > /test/test.txt
[root@efs-test01 ~]# cat /test/test.txt
test
[root@efs-test01 ~]#
```

## ③efs-test02にてファイル存在確認/ファイル削除

### ファイル存在確認

`/test`内にefs-test01にて作成したファイルが存在することを確認。

```bash
ll /test
cat /test/test.txt
```

**実行例**

```bash
[root@efs-test02 ~]# ll /test
total 4
-rw-r--r-- 1 root root 5 Jun 30 14:26 test.txt
[root@efs-test02 ~]#
[root@efs-test02 ~]# cat /test/test.txt
test
[root@efs-test02 ~]#
```

### ファイル削除

`test.txt`を削除する。

```bash
rm -f /test/test.txt
```

**実行例**

```bash
[root@efs-test02 ~]# rm -f /test/test.txt
[root@efs-test02 ~]# ll /test
total 0
[root@efs-test02 ~]#
```

## ④efs-test01にてファイル存在確認

`test.txt`が`/test`より消えているか確認する。

```bash
ll /test
```

**実行例**

```bash
[root@efs-test01 ~]# ll /test
total 0
[root@efs-test01 ~]#
```

# まとめ

- AmazonLinuxにEFSボリュームをNFSマウントできる
- EFSボリュームは複数のEC2インスタンスで共有できる。

# 参考
[Amazon EFS入門 S3、EBSとの違いと使い方](https://business.ntt-east.co.jp/content/cloudsolution/column-64.html#section-01-01)
[Amazon Linux で amazon-efs-utils パッケージをインストールする](https://docs.aws.amazon.com/ja_jp/efs/latest/ug/installing-amazon-efs-utils.html)
[AWS EFS をEC2にマウントしてみる](https://qiita.com/tandfy/items/829f9fcc68c4caabc660)