こんにちは!24卒の印部です。
RedHatを利用したEC2インスタンスへ Amazon EFS (Elastic File System) を自動マウントする構成を紹介します。方法として、EFSヘルパーを利用して、/etc/fstab
へと自動マウントの設定を書き込む方法をとります。
今回は基礎的な内容になるので、EFSの利用経験がない方や少ない方に向けてご紹介します。RHELでEFSヘルパーを利用したEFSの設定をするために少々難しかった部分があるため、手元でも同じ構成を再現できるように設定手順と自分がハマりそう&ハマったポイントを残しておければと思います!
本記事は検証用に動作確認をするための簡単な構成になっています。 下記の記事では、より実践的な構成で類似の設定をおこなっているので、合わせてご参考ください。
Red Hat Linux 8からEFSマウントヘルパーでEFSマウント - サーバーワークスエンジニアブログ
構成
構成は下記のとおりです。
- EC2インスタンス
- AMI: Red hat Enterprise Linux 9
- EFS
- EFSヘルパーを利用
- アクセスポイントを利用
リソースの設定
では、早速構築していきましょう!まずは各種リソースの下準備からしていきます。
VPCの設定
VPCはお手元のなんでもよいのですが、必要になる最低限の設定は書いておきました。参考にしてください!
- VPCコンソール画面にて、VPCを作成します。
- VPCを作成画面では、VPCなどを選択し、下記のように設定します。
- アベイラビリティゾーンの数:1
- パブリックサブネットの数:1
- プライベートサブネットの数:0
- NATゲートウェイ:なし
- VPCエンドポイント:なし
- DNSオプション:
- DNSホスト名を有効化:チェック
- DNS解決を有効化:チェック
DNSオプションで解決を有効にしていないと、EFSとEC2の通信がおこなえません。この設定は後からでも変更できますが、ここで有効にしておきましょう。
EC2インスタンスの作成
つぎにEC2インスタンスをたてます。今回はRHEL9を利用します。また、セキュリティグループは重要なので要注意です。
まずはAMIを選択します。今回はRHEL9のSSD Volume Typeを使用します。
インスタンスタイプ、キーペアは任意でお願いします。今回は、t3.smallを利用して、キーペアは自身のローカルPCに保存してあるものを利用します。
つぎに、ネットワーク設定は編集をクリックして、VPCを今回利用するものに変えます。ここでは、次のことに注意してください。
- サブネットがpublicであること
- IP自動割り当てが有効であること
- セキュリティグループは、sshの他にも、NFSの2049ポートを開けておく必要があります。
EFSの作成
さいごに、EFSのリソースを作成します。
まずEFSコンソール画面で、ファイルシステムの作成をおこないます。
- 名前はご自由に。
- vpcでは、先ほど作成したものを選択してください。
次に、作成したファイルシステムの詳細画面のタブから、ネットワークを選択します。
管理のボタンを押して、設定画面を開きます。
セキュリティグループがdefaultになっているので、こちらをEC2インストールにアタッチしたものと同じセキュリティグループに変更します。
- 保存します。
次に、アクセスポイントを作成します。
- ファイルシステムは、先ほど作成したファイルシステムを選択して、名前は任意です。
- その他の設定は今回は記載しません。
- アクセスポイントを作成します。
EC2インスタンスにEFSヘルパーを設定する
今回はEFSヘルパーを利用してマウントします。他にも、NFSクライアントを利用したマウントも可能です。
cf. ネットワークファイルシステムを使用したEFSファイルシステムのマウント - Amazon Elastic File System
ただし今回は、RHELを利用しているため、EFSヘルパーを利用するために少し煩雑な手続きが必要になります。
cf. efs-utils_GitHub
※なお、通常のAmazon Linux 2023であれば、EFSクライアントをインストールするだけで準備は完了します。
For those using Amazon Linux, the easiest way to install efs-utils is from Amazon's repositories: Amazon Linuxを利用しているばあい、efs-utilsをインストールするもっとも単純な方法は、Amazonのリポジトリからインストールすることです。
- まずは、EC2にsshでアクセスしてください。
- つぎに、下記のコマンドを順に実行します。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh . "$HOME/.cargo/env"
途中で止まりますが、そのままEnterで次に勧めます。
$ sudo yum -y install git rpm-build make rust cargo openssl-devel $ git clone https://github.com/aws/efs-utils $ cd efs-utils $ make rpm $ sudo yum -y install build/amazon-efs-utils*rpm
少々時間がかかるコマンドもありますが、完了までまち順番どおりに実行してください。
ファイルシステムのマウント
- まずは、ルートディレクトリでマウントするファイルを作成します。
$ cd ~ $ sudo mkdir efs
現在マウントされているストレージを確認しておきましょう。
df -h
コマンドを実行して確認できます。つぎに、いよいよディレクトリへとEFSをマウントします 今回はEC2インスタンスの
etc/fstab
を更新して、EC2インスタンスの始動と同時に自動的にファイルをマウントする仕組みを作ります。
cf. 既存の EC2 Linux インスタンスでの自動マウントの有効化 - Amazon Elastic File System
$ sudo vi /etc/fstab
でエディターをたちあげて、fstabファイルに下記の情報を追加します。
fs-xxxxxxxxxxxxxxxxx:/ /home/ec2-user/efs efs _netdev,noresvport,tls,nofail,accesspoint=fsap-xxxxxxxxxxxxxxxxx 0 0
2箇所ご自分の環境に合わせてIDを書き換えてください。
- fs-
で始まる場所に、ファイルシステムのIDを記載
- fsap-
で始まる場所に、アクセスポイントのIDを記載
- また、/home/ec2-user/efs
は、場合によってご自分でmkdir
で作成した任意のディレクトリにたどり着くようなパスとファイル名にしてください。今回はこのままで作成できるようなパスと名前になっています。
sudo mount -fav
で確かめみましょう。下記のようになればokです!
設定できたので、一度EC2インスタンスを再起動してみます。うまく設定できていれば、再起動後に自動でEFSがマウントされた状態になると思います。
最後にもう一度
df -h
をして、ちゃんと自動でEFSがマウントされていることを確かめます。
以上で手順は終了です。 別のEC2インスタンスからもアクセスしてみたり、なかでディレクトリを作成してみたりして、挙動を確かめてみるのもよいかもしれません。
ハマりポイント
自分は実際はじめてEFSをいろいろと触ってみて、うまくいかずに悩んだ部分がいくつかあるので、下記に実際に見落としてハマった部分やハマりそうだなと思った部分をまとめておきます。トラブルシューティングにご活用ください。
- セキュリティグループの設定
- EC2インスタンスにNFSを開けておくこと。
- 同時に、EFS側に自動にくっつくセキュリティグループにも、EC2と同じセキュリティグループをアタッチすること。
- VPCのDNS解決の設定
- DNS解決が有効にすること。
- これが有効になっていないと、EFSとEC2の通信がうまくいかなくなります。
- 時間
- EFSたててから少し待たないと、DNSが伝播しないみたいなことがあるようです。
- 「ファイルシステムをマウントする前に、マウントターゲットを作成してから 90 秒待機することをお勧めします。この待機により、ファイルシステム AWS リージョン がある でDNSレコードが完全に伝播されます。」 cf. https://docs.aws.amazon.com/ja_jp/efs/latest/ug/mounting-fs-mount-cmd-dns-name.html
- EFSヘルパーの初期設定
- Amazon Linux 2023以外は、AWSのEFSヘルパーを使うために事前準備のセットアップが必要になります。
- 今回はRHELでのケースを紹介していますが、各OSで実際の対応に違いが出てくるので、都度確認する必要があります。
/etc/fstab
へのマウントポイントの記載ルール- 必ず絶対パスを使用してマウントポイントを書くと安全です!
- 記述を間違えてしまったせいで、うまく接続せずに、EC2インスタンスが起動しなくなるということが検証中に発生しました。
おわりに
今回は最低限の設定で構成をつくってみました。ひととおりこなすことで、おおよその仕組みがみえてくるのではないでしょうか。
/etc/fstab
には、EC2インスタンスにアタッチしたインスタンスプロファイルや自身のAWS CLIの認証情報を設定し、特定のユーザーが特定のディレクトリにのみアクセスできるようなセキュリティを設けることも可能です。今回の構成がうまくいったら、このようなより実践的でセキュアな方法に挑戦してみるのも良いかと思います。
それではまた!