こんにちは!インフラエンジニアの牛係長です。
今回はAWSのサービスのひとつである「EFS」について解説します。
エンジニアとしてAWSの構築を実施する必要のあるかた、AWSの設計業務に従事しているかたは避けては通れないEFS。
筆者がIT企業で経験したEFSの構築経験をもとに、AWS環境でt3.mediumのEC2インスタンス(RHEL8.6)にEFSマウントヘルパーを使ってEFSをマウントする方法を記載します。
前提条件
・AWSのEC2インスタンスはt3.medium
・t3.mediumと同じVPCに1ゾーンでEFSを作成済み
・t3.mediumのOSはRHEL8.6
もくじ
EFSを使うとなにができるの?
まず最初にEFSを使ってできることをお伝えします。
EFSでできること
・ファイルを複数サーバで共有できる
・サーバへのマウントが楽
・めんどくさい運用をする必要がない
複数のサーバでファイルを共有する場合、EFSで実現可能です。
ファイルシステムの設定など、サーバの専門知識がないひとでも簡単にファイル共有することが大きなポイント。
さらには、容量やファイルシステムの冗長化などを考慮せずにマウント可能です。
冗長化については、あらかじめ1ゾーンで構成するか、複数ゾーンで構成するか選択制となっているため、システムの要件によって使い分ける必要はあります。
1.RHEL8.6に必要なパッケージをインストールする
EFSマウントヘルパーを使用するため、必要なパッケージをインストールするコマンドをうちます。
まずはスーパーユーザーになります。
$ sudo su
アマゾンのマウントヘルパーに必要なgitをインストールします。
# dnf -y install git
実行するといろいろなパッケージがインストールされます。
無事終了すると「Complete!」を表示されます。
Is this okと聞かれなかったけど、そのまま進んで大丈夫ですか?
「【パッケージ名】is already installed.」と記載があれば、すでにインストールされているのでIs this okと聞かれません。そのまま次のコマンドに進んで大丈夫です!以降も同様です。
gitリポジトリにあるEFSマウントヘルパーをgitコマンドでサーバに複製します。
# git clone https://github.com/aws/efs-utils
途中でIs this okと聞かれるので「y」を入力しましょう。「N」を入力すると中断します。
Is this ok [y/N]: y
インストールしたefs-utilsのディレクトリに移動します。
cd efs-utils/
rpm-buildのパッケージをインストールします。
dnf -y install rpm-build
途中でIs this okと聞かれるので「y」を入力しましょう。「N」を入力すると中断します。
Is this ok [y/N]: y
インストールが無事終わると「Complete!」と表示されます。
makeのパッケージをインストールします。
dnf install make
途中でIs this okと聞かれるので「y」を入力しましょう。「N」を入力すると中断します。
Is this ok [y/N]: y
インストールが無事終わると「Complete!」と表示されます。
ビルドします。
make rpm
amazon-efs-utilsをインストールします。
dnf -y install ./build/amazon-efs-utils*rpm
2.EFSをマウントする
AWSマネジメントコンソールし、EFSの画面に遷移します。
左ペインの「ファイルシステム」からマウントしたいEFSの名前を選択します。
アタッチを選択します。
EFSのマウントコマンドが表示されるので、コマンドをコピーしてEC2インスタンスにコマンドを入力して実行します。
sudo mount -t efs -o tls 【ファイルシステムID】:/ 【マウントしたいディレクトリ】
mountコマンドでうまくmountできませんでした。なぜでしょうか?
エラーが出る理由は環境によって異なります。AWSにエラーの原因と対処方法についてまとめたページをご参照ください。だいたいのエラーと対処方法は掲載されています(https://docs.aws.amazon.com/ja_jp/efs/latest/ug/troubleshooting-efs-mounting.html)
3.マウント状態の確認
EFSをマウントできたら、正しく動作しているか確認をしましょう。
2つ確認方法をご紹介します。
〇 dfコマンドでマウント確認
マウント状態を確認します。
# df -hT
うまくマウントできている場合の出力結果について教えてください。
筆者がEFSをマウントしたときのログを掲載します。一番下の行がEFSのマウントにあたる行となります。
<出力例>
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs tmpfs 1.8G 8.5M 1.8G 1% /run
tmpfs tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/nvme0n1p2 xfs 10G 2.3G 7.8G 23% /
tmpfs tmpfs 368M 0 368M 0% /run/user/1000
127.0.0.1:/ nfs4 8.0E 0 8.0E 0% /EFS
〇 マウントしたディレクトリにファイルを作成し、他サーバからアクセスする
まずはEFSをマウントしたサーバAとサーバBを用意し、それぞれEFSをマウントしたディレクトリに移動します。
サーバAとサーバBで下記コマンドを実行します。
# cd 【EFSをマウントしたディレクトリ】
サーバAでtouchコマンドを実行し、ファイルを作成します。
# touch test.txt
サーバBで下記コマンドを実行し、サーバAで作成したtest.txtファイルが存在しているか確認します。
# ls -l
サーバBでもtest.txtファイルを確認することができたらEFSをマウントできています。
まとめ
AWSの主要サービスのひとつ「EFS」のマウント方法について解説しました。
お手軽に、かつ簡単にファイル共有をすることができるため使い勝手がよく、AWSの業務に携わるかたは必須の知識です。
これからEFSを構築するかたのお役に立てれば光栄です。