概要
Session ManagerでEC2インスタンスへ接続して、共有ストレージサービスのEFSをマウントしようとしたところ上手くマウントできず暫く沼にはまったので、戒めとして記録に残します。
EFSとは
EFS(Amazon Elastic File System)は、AWSが提供するファイルストレージサービスです。
ファイルストレージサービスだとDropboxが有名です。
EBSと異なって、複数のEC2インスタンスに一つのEFSをマウントすることが可能です。
EFSのリソースを作成すると、fsから始まるファイルシステムIDが自動採番されるので、
そのIDはマウントする際に使用します。
EFSのマウント手順
1. session Managerにログインする
2. df -h コマンドでEFSがマウントされていない事を確認する
3. cat /etc/fstab コマンドでfstabファイル内を確認する
4. vi /etc/fstab コマンドでfstabファイル内に下表の必要な情報を追記して保存する
5. cat /etc/fstab コマンドでfstabファイル内を確認する
6. mount -a コマンドでEFSのマウントを実施する
7. df -h コマンドでEFSがマウントできたかを確認する
fstabファイルに記載する内容
デバイスファイル名 | マウントポイント |
ファイルシステムの種類 |
マウントオプション | dump対象 | fsck順序 |
---|---|---|---|---|---|
fs-×××××××××××××××××.efs.ap-northeast-1.amazonaws.com:/ | /work | nfs4 | nfsvers=4.1,rsize=1048576, wsize=1048576,hard,timeo=600, retrans=2,noresvport,_netdev |
0 | 0 |
例としてworkディレクトリにEFSをマウントする想定で、マウントオプション内の値については
NFS の推奨されるマウントオプション を参照ください。
上記1~7のコマンドを入力し、fstabファイルを編集すればEFSのマウントは成功するはずです。
それでマウントできない場合、以下の理由が想定されます。
マウント失敗の原因
1. fstabファイルに記載したデバイスファイル名の記載が誤っている
2. セキュリティグループの設定が不足している
3. 異なる環境のEFSリソース情報をfstabに記載していたりする
上記1のデバイスファイル名の記載が誤っているについては私が失敗した事例です。
EFSのリソース上のDNS名はコピペが出来てほぼデバイスファイル名そのままです。
しかし、DNS名にはデバイスファイル名の末尾に記載するべき :/ がありません。
EFSマウントが成功する場合と失敗する場合が発生し、:/ の記載漏れに気付けなかった私は暫く沼にはまりました。
mount.nfs4: remote share not in 'host:dir' format と文言が出力され、
リモート共有がhost:irではありませんと怒られましたが、そんな設定をしてなかったのですが、
実際は :/ のただの記載漏れでした。
上記2のセキュリティグループについては設定の不足が原因でConnection timed outが発生することがあります。事例が分かりやすかったので [小ネタ][EFS]マウント時にConnection timed outが出て少しハマる を参照ください。
上記3については複数のAWS環境を行き来する場合に起こりえます。実際に使用するのは本番環境のEFSリソースなのに、検証環境のEFSリソースを設定していたなんていう場合にもConnection timed outが発生します。
一文字の記載漏れでも上手く動いてくれなくて、延々と時間を溶かすことが起こりえます。
成功した場合と失敗した場合の比較をするために WinMerge で比較すれば良かったかもと頭をよぎりました。
補足
fstabファイルの編集はvimで編集しています。
vimも使わないとすぐにコマンドを忘れるので、
よくお世話になるQiita記事のリンクを貼っておきます。※自分用でもあります。
よく使う Vim のコマンドまとめ