はじめに
Amazon EFS(Elastic File System)について、最近あまり触る機会が少なかったので、改めてどのようなサービスでどのようなことができるのか、復習する意味で触ってみました。
このサービスです!
この記事は、過去に行った技術検証の発展形となります。前回は1台のEC2インスタンスのみで EFS をマウントしていましたが、今回は2台のEC2インスタンスを使用し、ファイルシステムが正しく共有されるかを検証しました!
前回の記事です!
書こうと思ったきっかけ
久しぶりにマネジメントコンソールを眺めていると、新しいサービスが増えている一方で、以前使っていたサービスについて忘れていることも多くなっていると感じました。その中でEFSについても改めて理解し直したいと思い、簡単な技術検証をしてみました。
実際にやってみた
前提条件
- すでに EFSファイルシステム が作成済み(例:fs-xxxxxxxx)
- VPC内に2つ以上のサブネット(異なるAZ)と、インターネット接続がある
- セキュリティグループに、EFS用の ポート2049(NFS) が許可されていること(後述解説)
① EFSの確認と準備
- EFSの作成を確認
AWSマネジメントコンソール → EFS → 対象のファイルシステムを確認
画面内の「ネットワーク」タブで、ターゲットのVPC内すべてのAZにマウントターゲットがあるか確認
② EC2インスタンスの作成
- 異なるAZ・サブネットにEC2を2台作成
インスタンス | AZ | サブネット | ホスト名(例) |
---|---|---|---|
EC2-A | ap-northeast-1a | subnet-a | ec2-a |
EC2-B | ap-northeast-1c | subnet-c | ec2-b |
- Amazon Linux 2
- 同じ セキュリティグループを使用(EFSにアクセスできること)
- セキュリティグループの設定(必須)
インバウンドルールに以下を追加
こんな感じで作成しました!
タイプ | プロトコル | ポート範囲 | ソース(例) |
---|---|---|---|
NFS | TCP | 2049 | 自身のSG または VPC CIDR |
※SSH接続を行うために、追加でセキュリティグループのインバウンドルールを設定しています。
今回は検証目的のため「全世界からのアクセスを許可」していますが、本番環境では必ずアクセス元を制限してください。
③ EFSクライアントのインストール
ここでは、EC2 Instance Connect を使ってインスタンスに接続します。
接続方法の詳細については、過去の記事で紹介していますので、興味のある方はぜひそちらも参考にしてみてください。
- どちらのEC2にもログインして以下を実行
sudo yum update -y
sudo yum install -y amazon-efs-utils
問題なくインストールすることができました!
④ マウントディレクトリの作成とマウント
- マウント先ディレクトリ作成
sudo mkdir -p /mnt/efs
- 両方のEC2で同じEFSをマウント(IDは適宜置き換え)
sudo mount -t efs -o tls fs-xxxxxxxx:/ /mnt/efs
※接続できない場合は、セキュリティーグループなどを見直してみてください!
- 正常にマウントされたか確認
df -h | grep efs
問題なくマウントされていることが確認できました!
⑤ 検証:ファイルの共有確認
- EC2-Aでファイルを作成
echo "shared from EC2-A" | sudo tee /mnt/efs/shared.txt
EC2-A側で問題なくファイルを作成できました!
- EC2-Bでファイルを確認
cat /mnt/efs/shared.txt
👉 正常に "shared from EC2-A" と表示され、EFSによるファイル共有が問題なく成功していました!
まとめ
ここまで読んでいただきありがとうございました!(今回は、手軽に検証できる内容でした〜)
Amazon EFSの基本的な使い方を復習しつつ、複数のEC2インスタンスからの同時アクセスによるファイル共有が正常に機能するかを検証しました。
EFSは高可用性かつスケーラブルなファイル共有ストレージとして、開発や分析、Webサービスのファイル保存先として便利に使えると改めて感じました...!