#はじめに
先日、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を作成。

EFSが作成されたことを確認した後、EC2にログインしてEFSクライアントのインストールを実施。
$sudo yum install -y amazon-efs-utils
次にEFSをマウントするディレクトリを用意。
$mkdir efs-test
ここまでがマウント前までに行った内容になります。
###ハマった内容
作成したEFSのファイルシステムIDを指定して、mountコマンドを実行。
しかし待てども待てどもマウントされず・・・。
$sudo mount -t efs -o tls fs-07d78a63cf0e92891:/ efs/efs-test
暫くすると結局エラーが返ってきてしまいました。どうやらファイルシステムIDが取得できていない様子。
b'mount.nfs4: mount system call failed'
#原因
原因はEFSのマウントターゲットにアタッチされているセキュリティグループにありました。
EFSのマウントターゲットとは、下記図の赤枠の部分のことです。

EFSのコンソールから、[ファイルシステム]>[作成したファイルシステム名]>[ネットワーク]>[管理]をクリックして確認してみると、マウントターゲットにVPCのデフォルトセキュリティグループがアタッチされています。

そしてデフォルトセキュリティグループのインバウンドルールを確認してみると、ソースに自身のセキュリティグループが指定されています。

つまり、同じデフォルトセキュリティグループをアタッチしたEC2からはインバウンド通信を行うことが出来ますが、今回EC2にはEC2-SGという別のセキュリティグループを設定しているため、マウントターゲットと通信が行えず、マウントに失敗するわけです。
#対処法
デフォルトセキュリティグループの代わりに、マウントターゲットにアタッチするEFS用のセキュリティグループを新規で作成します。
EC2のコンソールから、[セキュリティグループ]>[セキュリティグループを作成]をクリックし、セキュリティグループ名、説明、VPCを入力します。

タイプにNFS、ソースにEC2のセキュリティグループを指定したインバウンドルールを追加し、画面下の[セキュリティグループを作成]をクリックします。

これにより、EFS用のセキュリティグループの作成は完了です。
次にEFSのコンソールから、[ファイルシステム]>[作成したファイルシステム名]>[ネットワーク]>[管理]をクリックし、現在設定されているマウントターゲットを削除します。

そしてマウントターゲットを新たに追加し、先ほど作成したEFS用のセキュリティグループを指定して保存をクリックします。

これでマウントターゲットの設定は完了です。
もう一度EC2にログインし、マウントを実行してみます。
$sudo mount -t efs -o tls fs-07d78a63cf0e92891:/ efs/efs-test
今度はエラーもなく、成功した様子。
dfコマンドで確認してみると、ちゃんとマウントされていました!
$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のマウントって簡単にできると思ってましたが、マウントターゲットとか、デフォルトセキュリティグループとか、ちゃんと理解していないとダメですね。
あらためて実際に手を動かすのって大事だなあと感じました。
この記事が誰かの助けとなれば幸いです。
