EFSのマウントが失敗してハマった話

#はじめに
先日、EC2にEFSをマウントしようとした際にマウントが失敗し、少しハマったことがあったので、記録です。

#事象
以下に発生した事象を示します。

###ハマる前までに行った内容
まず前提として、EFSをアタッチするEC2インスタンスを作成。

|設定項目             |設定値             |
|:-------------------|:------------------|
|リージョン           |東京               |
|VPC                 |10.0.0.0/21（名前：MyVPC1）|
|AZ                  |ap-northeast-1a    |
|サブネット           |10.0.0.0/24（名前：PublicSubnet1）        |
|インスタンスタイプ   |t2.micro           |
|セキュリティグループ |全てのSSH接続を許可（名前：EC2-SG）          　　　　　|


その後、EFSのコンソールから、[ファイルシステム]>[ファイルシステムの作成]をクリック。
そしてEC2インスタンスと同じVPCを指定してEFSを作成。
![2022-02-23_19h45_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/64cd677f-443b-6d3b-791c-f8abdf98a804.png)

EFSが作成されたことを確認した後、EC2にログインしてEFSクライアントのインストールを実施。

```linux:
$sudo yum install -y amazon-efs-utils
```

次にEFSをマウントするディレクトリを用意。

```linux:
$mkdir efs-test
```
ここまでがマウント前までに行った内容になります。

###ハマった内容
作成したEFSのファイルシステムIDを指定して、mountコマンドを実行。
しかし待てども待てどもマウントされず・・・。

```linux:
$sudo mount -t efs -o tls fs-07d78a63cf0e92891:/ efs/efs-test
```

暫くすると結局エラーが返ってきてしまいました。どうやらファイルシステムIDが取得できていない様子。

```linux:
b'mount.nfs4: mount system call failed'
```

#原因
原因はEFSのマウントターゲットにアタッチされているセキュリティグループにありました。
EFSのマウントターゲットとは、下記図の赤枠の部分のことです。
<img width="400" alt="WS0002.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/09ae5a6c-e151-c194-db2d-36b16bdad93f.png">

EFSのコンソールから、[ファイルシステム]>[作成したファイルシステム名]>[ネットワーク]>[管理]をクリックして確認してみると、マウントターゲットにVPCのデフォルトセキュリティグループがアタッチされています。
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/a5037bb7-92bc-3314-af55-34970de6a6ba.jpeg)

そしてデフォルトセキュリティグループのインバウンドルールを確認してみると、ソースに自身のセキュリティグループが指定されています。
![2022-02-23_18h22_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/2fbde88d-cace-d378-7d8e-9e7e60875ac6.png)

つまり、同じデフォルトセキュリティグループをアタッチしたEC2からはインバウンド通信を行うことが出来ますが、今回EC2にはEC2-SGという別のセキュリティグループを設定しているため、マウントターゲットと通信が行えず、マウントに失敗するわけです。

#対処法
デフォルトセキュリティグループの代わりに、マウントターゲットにアタッチするEFS用のセキュリティグループを新規で作成します。

EC2のコンソールから、[セキュリティグループ]>[セキュリティグループを作成]をクリックし、セキュリティグループ名、説明、VPCを入力します。
![2022-02-23_18h39_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/d50752b0-7a22-c6f5-e84d-4c00ad972d77.png)

タイプにNFS、ソースにEC2のセキュリティグループを指定したインバウンドルールを追加し、画面下の[セキュリティグループを作成]をクリックします。
![2022-02-23_19h01_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/69aa514b-7b2b-1d1b-4e4f-77c886764e9e.png)
これにより、EFS用のセキュリティグループの作成は完了です。

次にEFSのコンソールから、[ファイルシステム]>[作成したファイルシステム名]>[ネットワーク]>[管理]をクリックし、現在設定されているマウントターゲットを削除します。
![2022-02-23_18h56_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/1ecae667-8faf-c7b9-45fa-bb3d146ef6f5.png)

そしてマウントターゲットを新たに追加し、先ほど作成したEFS用のセキュリティグループを指定して保存をクリックします。
![2022-02-23_19h08_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689573/93673ea6-8bb6-e9ae-df91-0e709728591b.png)
これでマウントターゲットの設定は完了です。

もう一度EC2にログインし、マウントを実行してみます。

```linux:
$sudo mount -t efs -o tls fs-07d78a63cf0e92891:/ efs/efs-test
```
今度はエラーもなく、成功した様子。

dfコマンドで確認してみると、ちゃんとマウントされていました！

```linux:
$df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        475M     0  475M   0% /dev
tmpfs           483M     0  483M   0% /dev/shm
tmpfs           483M  460K  483M   1% /run
tmpfs           483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.6G  6.4G  20% /
tmpfs            97M     0   97M   0% /run/user/1000
127.0.0.1:/     8.0E     0  8.0E   0% /home/ec2-user/efs-test
```

#最後に
EFSのマウントって簡単にできると思ってましたが、マウントターゲットとか、デフォルトセキュリティグループとか、ちゃんと理解していないとダメですね。
あらためて実際に手を動かすのって大事だなあと感じました。
この記事が誰かの助けとなれば幸いです。