
EFSマウントヘルパーについて
ご挨拶
こんにちは!運用チームのT.Nです。
直近でEFSマウントに関するトラブル対応を実施したこともあり、理解を深める為、記事にまとめようと思います。
Elastic File System
Elastic File System(EFS)は、AWSが提供しているフルマネージド型ファイルストレージサービスです。
スケーラビリティを備えたNFSサーバと考えてもらっても問題ないです。
アクセス方法も非常にシンプルであり、各アベイラビリティゾーンに作成されるマウントターゲットにアクセスいただくだけで利用可能です。
マウントヘルパー
Linuxの標準的なmountコマンドでもEFSのマウントはできますが、EFSマウントヘルパーをインストールすることで各種パラメータの簡略化やログ出力、暗号化といった機能が利用できます。
マウントヘルパーを使用時の大きな特徴として、efsという新しいネットワークファイルシステムタイプが定義され、こちらを基本的には使用します。また、通常のmountコマンドと完全な互換性があるので、使用感が変わるといった心配もありません。
パッケージインストール
amazon-efs-utilsパッケージを導入することでマウントヘルパーが利用できます。
また、AmazonLinuxにはパッケージが提供されておりますが、RHEL/UbuntuといったOSではビルドする必要がございますので、ご注意ください。
今回はRed Hat Enterprise Linux 9.5 (Plow)で導入する為、ビルドから始めます。
ビルドに必要なgit準備
# yum install git rpm-build make rust cargo openssl-devel
amazon-efs-utilsクローンからビルドまで
# git clone https://github.com/aws/efs-utils
# cd efs-utils
# make rpm
amazon-efs-utilsインストール
# yum -y install build/amazon-efs-utils*rpm
dnf list amazon-efs-utilsコマンド等確認するとインストールされているか確認できます。
# dnf list amazon-efs-utils
Updating Subscription Management repositories.
Unable to read consumer identity
…
amazon-efs-utils.x86_64 2.2.1-1.el9 @@commandline
マウント動作
パッケージをインストールしたところで、実際にEFSをマウントしてみましょう。
マウントには対象EFSの内、いずれかを指定する必要があります。
- ファイルシステムの DNS 名
- ファイルシステム ID
- マウントターゲット IP アドレス
今回はわかりやすさも兼ねて、ファイルシステムIDを指定します。
まずは、マウントポイントを作成し、
# mkdir /efs
ファイルシステムを確認しておきましょう。
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 192M 5.4M 187M 3% /run
/dev/xvda4 9.2G 3.0G 6.2G 33% /
/dev/xvda3 536M 356M 181M 67% /boot
/dev/xvda2 200M 7.1M 193M 4% /boot/efi
tmpfs 96M 0 96M 0% /run/user/1000
では、以下のコマンドでマウントを実施。
# mount -t efs -o tls fs-057c986261e8c2364:/ /efs/
オプションとしてtlsを指定していますが、特段なくても問題ないです。
では、マウントできているか確認します。
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 192M 5.4M 186M 3% /run
/dev/xvda4 9.2G 3.0G 6.2G 33% /
/dev/xvda3 536M 356M 181M 67% /boot
/dev/xvda2 200M 7.1M 193M 4% /boot/efi
tmpfs 96M 0 96M 0% /run/user/1000
127.0.0.1:/ 8.0E 0 8.0E 0% /efs
問題なく、マウントできています。
また、ファイルシステム名が127.0.0.1と表示されておりますが、暗号化通信(TLS)を行う際、
ローカルホストを介したトンネル(Stunnel)が作成されている影響ですので、問題ありません。
自動マウント
コマンドだけのマウントではサーバ起動時にマウントが外れてしまいますので、fstabを使用する必要があります。
/etc/fstabに下記を追記し、マウントヘルパーを使用して、自動再マウントさせることができます。
fs-057c986261e8c2364:/ /efs efs defaults,_netdev 0 0
この際、通常のブロックデバイスのマウント時の記述の差異としては、
ファイルシステムタイプがefsであることと、マウントオプションに_netdevを追加する点です。
_netdevは、サーバのネットワークが有効になるまでマウントしないオプションであり、EFSのようにネットワークを介してマウントさせる場合には必要になります。
おわりに
マウントヘルパーの導入や基本的なマウント動作を確認しましたが、暗号化がされていることは知らなかった点でもあり、セキュリティ側面からもマウントヘルパーの利用は必須だと思いました。
/etc/amazon/efs/efs-utils.confファイルに細かい設定が記載されており、ログ出力等の調整もできますので必要に応じて試してみてください。
参考
EFS マウントヘルパーを使用した EFS ファイルシステムのマウント
EFSマウントヘルパーの利用有無でマウントコマンドの違い等をみてみた
FargateでEFSをマウントした際に127.0.0.1:/と表示される理由とその解決策