はじめに
本記事では、複数の EC2 インスタンスで同じファイルを安全かつリアルタイムに共有する方法について学んでいきます。
アプリケーションをスケールアウトさせるとき、どのインスタンスからも共通のデータにアクセスできる仕組みが必要になります。もし各インスタンスがバラバラに動いてしまうと、データの不整合や管理の手間が増えてしまいます。そのため、「共有ストレージ」という考え方を理解しておくことはとても重要です。
ここでは、代表的な手法である EFS・S3・NFS・同期ツール などを取り上げ、それぞれの特徴や使いどころを整理します。実際の構築を通じて、スケールアウト構成で共通データを扱う仕組みを理解し、どんなケースでどの選択肢を使うべきかを掴んでいきましょう。
EFS の概要と S3 との違い
EFS(Amazon Elastic File System)
- 仕組み:NFS(Network File System)ベースの共有ストレージ
- 利用方法:EC2 インスタンスにマウントして、通常のファイルシステムのように利用可能
- 特徴:複数の EC2 インスタンスから同時アクセスが可能で、リアルタイムにファイルを共有できる
- 用途:スケールアウト構成のアプリケーション(例:Web サーバー群の共通データ保存)
S3(Amazon Simple Storage Service)
- 仕組み:オブジェクトストレージ(ファイルを「オブジェクト」として保存)
- 利用方法:API(REST/SDK/CLI)経由でアクセス
- 特徴:ほぼ無制限にデータを保存可能。高い耐久性と可用性を持ち、グローバル配信にも強い
- 用途:大容量データの保管、バックアップ、静的ファイルの配信(例:画像・動画、静的 Web サイトのホスティング)
違いのまとめ
項目 | EFS | S3 |
---|---|---|
ストレージ形式 | ファイルシステム(NFS) | オブジェクトストレージ |
アクセス方法 | EC2 にマウントして利用 | API 経由でアクセス |
同時利用 | 複数 EC2 からリアルタイム共有可能 | リアルタイム共有は想定されていない |
主な用途 | アプリケーション間でのファイル共有 | 静的ファイル配信、大容量データ保存 |
EFS の作成とマウントターゲットの設定手順
EFS を作成する
- AWS マネジメントコンソールにアクセスし、EFS の作成画面を開きます。
- ファイルシステム名や利用する VPC を選択し、基本的な設定を完了します。

セキュリティグループの作成/選択
「ネットワーク」設定画面で、EFS 用のセキュリティグループを割り当てます。
新規作成する場合は「EC2」サービスの「セキュリティグループ」から作成可能です。
インバウンドルールの追加
- プロトコル: NFS
- ポート: 2049
- ソース: EFS を利用する EC2 インスタンスのセキュリティグループ
- (IP アドレス直指定でも動きますが、SG を指定する方が安全です)
EC2 側のセキュリティグループも確認
EC2 インスタンス側の SG で、アウトバウンドルールが NFS(2049) を許可していることも確認してください。
EFS のマウントターゲットにアタッチする
- マネジメントコンソールで 「EFS」 を開く
- 対象のファイルシステムをクリック
- 「ネットワーク」タブ を選択
- 「管理」をクリック
- 各マウントターゲットに対して、先ほど作成した セキュリティグループ を関連付ける
EC2 から EFS をマウントする手順
amazon-efs-utils パッケージをインストールする
EFS を簡単にマウントできるユーティリティを導入します。
Amazon Linux 2 の場合
sudo yum install -y amazon-efs-utils
マウントポイントを作成する
EFS をマウントするディレクトリを作成します。
sudo mkdir -p /mnt/efs
EFS をマウントする
EFS のファイルシステム ID を指定してマウントします。
sudo mount -t efs -o tls fs-XXXXXXXX:/ /mnt/efs
fs-XXXXXXXX
は EFS のファイルシステム ID に置き換えます-o tls
は暗号化通信を有効化するオプションです
マウントできているか確認
sudo tail -n 50 /var/log/amazon/efs/mount.log
永続化設定(/etc/fstab に登録)
再起動後も自動的にマウントされるように、/etc/fstab
に設定を追加します。
echo "fs-XXXXXXXX:/ /mnt/efs efs _netdev,tls 0 0" | sudo tee -a /etc/fstab
EFS を利用した共有 HTML ディレクトリ構成
マウントポイントを作成(作成されていない場合)
EC2 上で Web サーバーのドキュメントルート /var/www/html
を作成します。
sudo mkdir -p /var/www/html
EFS をマウント
作成済みの EFS を /var/www/html
にマウントします。
sudo mount -t efs fs-xxxxxxxx:/ /var/www/html
fs-xxxxxxxx
は、実際の EFS ファイルシステム ID に置き換えてください。-t efs
を指定することでamazon-efs-utils
経由でマウントできます。
検証用ファイルを作成
EFS 内に index.html
を作成し、複数 EC2 から同じ内容が参照できることを確認します。
echo "Hello from EFS" | sudo tee /var/www/html/index.html
動作確認
複数の EC2 から Web サーバーを経由してアクセスし、同じページが返ってくることを確認します。
curl http://<EC2のパブリックIP>/
まとめ
本記事では EFS を用いた複数 EC2 インスタンス間でのファイル共有 をテーマに、以下のポイントを学びました。
- リアルタイム共有が可能な EFS の仕組み
- スケールアウト構成での共通データ管理の考え方
- インフラ設計における「EFS と S3 の使い分け」
この流れを理解すれば、実運用でも EC2 を増やしたときに 同じデータソースを持つ安全な構成 をすぐに展開できるようになります。
コメント