テックブログ

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:/と表示される理由とその解決策

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください