EC2インスタンス(Amazon Linux 2023)にAmazon EFSファイルシステムをマウントする手順
はじめに
Amazon EFS(Elastic File System)は、Amazon EC2インスタンス間で共有可能なマネージドファイルシステムサービスです。複数のEC2インスタンスから同時にアクセスでき、自動でスケールするため、アプリケーションのデータ共有に非常に便利です。
Amazon Linux 2023でのamazon-efs-utilsパッケージのインストールから、EFSファイルシステムのマウント、そして再起動後も自動でマウントされる設定まで、一連の手順をまとめた記事が見つからなかったため、本記事で一通りの手順をまとめました。
前提条件
- OS: Amazon Linux 2023 (AL2023)
- EFS ファイルシステム: 作成済み
- セキュリティグループ設定: EC2からEFS(ポート2049/NFS)への通信許可
- VPC: EC2とEFSが同じVPC内に存在
EFSは、NFS(Network File System)プロトコルのポート2049番を使用してアクセスします。
EC2インスタンスのセキュリティグループで、このポートへの通信が許可されていることを事前に確認してください。
EFS ファイルシステムの構築については、以下の記事が参考になります。
手順
1. 事前確認
EC2インスタンスに接続し、現在のディスク使用状況を確認します。
$ df -Ph
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 204M 0 204M 0% /dev/shm
tmpfs 82M 416K 82M 1% /run
/dev/nvme0n1p1 8.0G 1.8G 6.2G 22% /
tmpfs 204M 0 204M 0% /tmp
/dev/nvme0n1p128 10M 1.3M 8.7M 13% /boot/efi
2. amazon-efs-utilsパッケージのインストール
EFSマウントに必要なamazon-efs-utilsパッケージをインストールします。
$ sudo dnf -y install amazon-efs-utils
~中略~
Installed:
amazon-efs-utils-2.1.0-1.amzn2023.x86_64 stunnel-5.58-1.amzn2023.0.2.x86_64
Complete!
amazon-efs-utilsパッケージには、EFSマウントヘルパーとTLS暗号化に必要なstunnelが含まれています。AL2023では標準リポジトリから簡単にインストールできます。
AL2023以外の場合は、以下のドキュメントを参考にインストールしてください。
3. マウントポイントの作成
EFSファイルシステムのマウントポイントとして使用するディレクトリを作成します。
$ sudo mkdir /ABC/
今回は例として/ABC
ディレクトリを作成していますが、実際の運用では用途に応じて/opt/app/data
や/mnt/efs
などの適切な名前を使用することをお勧めします。
4. EFSファイルシステムのマウント
EFSファイルシステムをマウントします。
$ sudo mount -t efs -o tls fs-02c0b784c564bf93c:/ /ABC
fs-02c0b784c564bf93c
の部分は、実際のEFSファイルシステムIDに置き換えてくださいtls
オプションにより、転送時のデータの暗号化が有効になります- 本番環境では、セキュリティの観点からTLS暗号化を使用することを推奨します
このコマンドにより、EC2インスタンス上の/ABC
ディレクトリ(ローカルパス)と、EFSファイルシステムfs-02c0b784c564bf93c
のルートディレクトリ(/
)が接続されます。
例:
- EC2側のパス:
/ABC/test.txt
- EFS上の実際の場所:
fs-02c0b784c564bf93c:/test.txt
マウント後は、/ABC
配下で行うすべてのファイル操作(作成、編集、削除)が、実際にはEFS上で実行されます。
上記では、ファイルシステム ID を使用してマウントしています。
ファイルシステム DNS 名を使用してマウントする場合やマウントターゲット IP アドレスを使用してマウントする方法については、以下のドキュメントを参考にしてください。
5. マウント状況の確認
EFSが正常にマウントされているかを確認します。
$ df -h /ABC
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /ABC
EFSは実質無制限の容量を持つため、サイズが8.0E
(8エクサバイト)と表示されます。
127.0.0.1:/
と表示される理由
TLS暗号化使用時、EFSマウントヘルパーが内部的にstunnelプロセスを起動し、ローカルポート(20449-21049番台)経由でEFSに接続します。
そのため、NFSクライアントはローカルホスト(127.0.0.1)にマウントしているように見えますが、実際にはstunnel経由でEFSに暗号化通信しています。これは正常な動作です。
6. 動作テスト
テストファイルを作成して、EFSの読み書きが正常に動作するかを確認します。
$ echo "EFS mount test" | sudo tee /ABC/test.txt
EFS mount test
$ cat /ABC/test.txt
EFS mount test
正常にファイルの作成と読み取りができることを確認できました。
7. 自動マウント設定
EC2インスタンスの再起動後も自動でEFSがマウントされるよう設定します。
$ echo "fs-02c0b784c564bf93c:/ /ABC efs _netdev,noresvport,tls 0 0" | sudo tee -a /etc/fstab
fs-02c0b784c564bf93c:/ /ABC efs _netdev,noresvport,tls 0 0
各マウントオプションの詳細:
-
_netdev
(ネットワーク必須)- ファイルシステムがネットワーク経由でアクセスすることをsystemdに通知
- ネットワークサービス(network.target)が起動完了後にマウントを実行
- 必須である理由: EFSはネットワーク経由でアクセスするファイルシステムのため、ネットワークが利用可能になる前にマウントを試行すると失敗し、EC2インスタンスの起動が停止する可能性があります
- systemdの依存関係により、適切な順序でサービスを起動するために必要
-
noresvport
(ポート再利用)- ネットワーク接続が切れて再接続する際に、新しいTCPポートを使用
- ネットワーク障害から復旧した後も、EFSファイルシステムへの接続を継続
-
tls
(暗号化)- データ転送時の暗号化を有効化
- セキュリティ向上のため本番環境では有効化推奨
各オプションの詳細については、以下のドキュメントを参考にしてください。
8. 再起動テストによる動作確認
EC2コンソールからインスタンスを再起動し、自動マウントが正常に動作することを確認します。
再起動後、EC2インスタンスに再接続して確認します。
$ df -h /ABC
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /ABC
$ cat /ABC/test.txt
EFS mount test
再起動後もEFSが自動的にマウントされ、以前に作成したテストファイルにアクセスできることを確認できました。
最後に
本記事では、EC2インスタンス(Amazon Linux 2023)にAmazon EFSファイルシステムをマウントする手順について解説しました。
amazon-efs-utilsパッケージのインストールから、実際のマウント作業、そして再起動後も自動でマウントされる設定まで、一連の流れを網羅しています。
EFSを活用することで、複数のEC2インスタンス間でファイルを共有でき、スケーラブルで高可用性なファイルストレージを簡単に構築できます。特に、TLS暗号化を使用することで、セキュアなデータ転送も実現できます。
本記事が参考になれば幸いです。