概要
Amazon EFS(Elastic File System)は、AWS が提供するフルマネージドの共有ファイルシステムサービスです。複数の EC2 インスタンスから同時にアクセスでき、ファイルの追加・削除に応じて自動的に容量が拡張・縮小されます。
アプリケーションの運用では、複数のサーバーから同じファイルにアクセスしたいケースが頻繁に発生します。例えば、Web サーバーのコンテンツ共有、ログの集約、機械学習の学習データの共有などです。EFS はこうしたユースケースに対応する NFS(Network File System)互換のファイルシステムを提供します。この記事では、EFS ファイルシステムの作成から EC2 インスタンスへのマウント、ファイルの共有確認までの基本操作を体験します。

この記事のメリット
- Amazon EFS の基本概念(ファイルシステム、マウントターゲット、アクセスポイント)を理解できる
- EFS ファイルシステムを作成する手順を習得できる
- EC2 インスタンスから EFS をマウントしてファイルを読み書きする手順を体験できる
- 複数のインスタンスからの同時アクセスを確認できる
- パフォーマンスモードとスループットモードの違いを把握できる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説



とひさん、Amazon EFS とはどんなサービスでござるか?
Amazon EFS は、NFS v4.1 プロトコルに対応したフルマネージドのファイルストレージサービスだよ。EBS が単一のインスタンスにアタッチされるブロックストレージであるのに対し、EFS は複数のインスタンスから同時にマウントできるネットワークファイルシステムなんだ。容量はペタバイトスケールまで自動的にスケールして、事前のプロビジョニングが不要なんだよ。



EBS とはだいぶ違うのでござるな。具体的には、どう違うのでござる?
いい質問だね。EFS と EBS の主な違いをまとめるとこうなるよ。
| 特徴 | Amazon EFS | Amazon EBS |
|---|---|---|
| アクセス方式 | NFS(ネットワーク経由) | ブロックデバイスとしてアタッチ |
| 同時接続 | 複数のインスタンスから同時アクセス可能 | 通常1つのインスタンスにアタッチ |
| 容量管理 | 自動スケーリング | 事前にサイズを指定 |
| 対応OS | Linux | Linux / Windows |
| 可用性 | 複数 AZ にデータを自動複製 | 単一 AZ 内 |





複数のインスタンスから同時にアクセスできて、容量も自動で増えるのでござるな! 猿山のみんなで使う共同のバナナ倉庫のようでござる。でも、EC2 インスタンスからはどうやって EFS にアクセスするのでござるか?
マウントターゲットというものを使うんだ。マウントターゲットは、VPC 内の各アベイラビリティゾーン(AZ)に作成される EFS へのアクセスポイント(ネットワークインターフェース)だよ。EC2 インスタンスは同じ AZ のマウントターゲットを経由して EFS にアクセスするんだ。高可用性を確保するために、使用するすべての AZ にマウントターゲットを作成することが推奨されているよ。



AZ ごとに入口を用意するのでござるな。パフォーマンスの設定などもあるのでござるか?
あるよ。まずパフォーマンスモードから説明するね。
| モード | 特徴 | ユースケース |
|---|---|---|
| 汎用(General Purpose) | 低レイテンシーで幅広い用途に対応。デフォルト設定 | Web サーバー、コンテンツ管理、開発環境 |
| 最大 I/O(Max I/O) | 高いスループットと IOPS に最適化。レイテンシーは若干高い | ビッグデータ分析、メディア処理 |



用途に応じて選べるのでござるな。スループットの設定もあるのでござる?
うん、スループットモードも3種類あるよ。
| モード | 特徴 |
|---|---|
| エラスティック | ワークロードに合わせて自動的にスループットをスケーリングする。新規作成時のデフォルトで、AWS の推奨 |
| プロビジョンド | ストレージ量に関係なく、指定したスループットを確保する |
| バースト | ファイルシステムのサイズに比例したベーススループットを提供し、一時的なバーストが可能 |



いろいろあって迷いそうでござる……。ストレージクラスにも種類があるのでござるか?
そうだね、ストレージクラスは「どこに置くか(リージョナル / One Zone)」と「アクセス頻度」の組み合わせで選ぶよ。
| ストレージクラス | 説明 |
|---|---|
| EFS Standard(リージョナル) | 頻繁にアクセスするデータ向け。複数 AZ に保存 |
| EFS 低頻度アクセス(IA) | 月に数回程度しかアクセスしないデータ向け。保存コストが低い |
| EFS アーカイブ | 年に数回程度しかアクセスしないデータ向け。最も保存コストが低い |
| One Zone(Standard / IA / アーカイブ) | 単一 AZ にデータを保存する版。複数 AZ 複製が不要ならさらに安い |
IA やアーカイブへの移行は、ライフサイクル管理で「最後のアクセスから何日」という条件を設定すると自動で行われるよ。



アクセス頻度や可用性の要件に応じて、コストを最適化できるのでござるな! 全体像がつかめたでござる!
実践
ここでは、EFS ファイルシステムを作成し、2台の EC2 インスタンスからマウントしてファイルの共有を確認します。
前提条件
- リージョン:
ap-northeast-1(東京) - AWS マネジメントコンソールにログイン済み
- 同一 VPC 内に2台の EC2 インスタンスが起動済みであること(異なる AZ に配置されていることが望ましい)
- EC2 インスタンスに SSH 接続できること
- EC2 インスタンスにセキュリティグループが設定されていること(このセキュリティグループを EFS 側の許可元として指定します)
- VPC の「DNS 解決」と「DNS ホスト名」が有効であること(
mount -t efsが使う<ファイルシステムID>.efs.<リージョン>.amazonaws.comの名前解決に必要です)
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| EFS ファイルシステム | my-shared-efs | 共有ファイルシステム |
| セキュリティグループ | efs-sg | EFS マウントターゲット用 |
EFS 用セキュリティグループを作成する
- 上部の検索バーに
EC2と入力し、表示された「EC2」を選択します - 左側ナビゲーションの「ネットワーク&セキュリティ」→「セキュリティグループ」を選択します
- 「セキュリティグループを作成」をクリックします
- 「基本的な詳細」で以下を設定します
- セキュリティグループ名:
efs-sg - 説明:
Security group for EFS mount targets - VPC: EC2 インスタンスと同じ VPC を選択(ドロップダウンに VPC ID を入力すると絞り込めます)
- 「インバウンドルール」セクションで「ルールを追加」をクリックし、以下を入力します
- タイプ:
NFS(プロトコルTCP、ポート範囲2049が自動で入ります) - ソース:
カスタムのまま、右の検索ボックスに EC2 インスタンスのセキュリティグループ ID(sg-で始まる)を入力して候補から選択 - 「アウトバウンドルール」はデフォルト(すべてのトラフィックを許可)のままにします
- 「セキュリティグループを作成」をクリックします


EFS ファイルシステムを作成する
- 上部の検索バーに
EFSと入力し、表示された「EFS」を選択します - 「ファイルシステムの作成」をクリックします
- 表示されるダイアログで「カスタマイズ」をクリックして、4 ステップの作成ウィザードを開きます
- 「ステップ 1: ファイルシステムの設定」で以下を設定します
- 名前:
my-shared-efs - ファイルシステムのタイプ:
リージョン(デフォルト。複数 AZ にデータを保存) - 自動バックアップ:
自動バックアップを有効化にチェックが入ったまま(AWS Backup による日次バックアップ。不要なら外しても構いません) - ライフサイクル管理: IA への移行
最後のアクセスから 30 日、アーカイブへの移行最後のアクセスから 90 日(デフォルト) - 暗号化:
保管時のデータの暗号化を有効にするにチェックが入ったまま - スループットモード:
拡張→伸縮自在 (推奨)(デフォルト) - 「追加の設定」を開くと、パフォーマンスモードが
汎用 (推奨)になっていることが確認できます - 「次へ」をクリックします


マウントターゲットを設定する
「ステップ 2: ネットワークアクセス」で、マウントターゲットの構成を行います。
- Virtual Private Cloud (VPC): EC2 インスタンスと同じ VPC を選択します
- VPC を選ぶと、「マウントターゲット」に VPC 内のアベイラビリティーゾーンごとの行が自動で追加されます。各行について以下を確認・設定します
- サブネット ID: 自動で選ばれたサブネットが EC2 インスタンスの配置先と同じか確認します(違う場合は選び直します)
- セキュリティグループ: 自動で入っている
defaultの「×」で削除し、「セキュリティグループを選択」から先ほど作成したefs-sgを選択します - 「次へ」をクリックします


- 「ステップ 3: ファイルシステムポリシー」はデフォルト(ポリシーなし)のまま「次へ」をクリックします
- 「ステップ 4: 確認して作成する」で設定内容を確認し、「作成」をクリックします
ファイルシステムが正常に作成されたことを確認します。ステータスが「利用可能」になるまで待ちます。


EC2 インスタンスに EFS をマウントする
1台目の EC2 インスタンスに SSH 接続し、以下のコマンドを実行します。
EFS マウントヘルパーをインストールします(Amazon Linux 2023 の場合)。
sudo yum install -y amazon-efs-utils
マウントポイントを作成します。
sudo mkdir /mnt/efs
EFS ファイルシステムをマウントします。ファイルシステム ID は EFS コンソールで確認した値に置き換えてください。
sudo mount -t efs <ファイルシステムID>:/ /mnt/efs
マウントされたことを確認します。
df -h /mnt/efs
/mnt/efs の行にサイズ 8.0E(エクサバイト)と表示されればマウントは成功です。EFS は容量を事前に確保しないため、事実上無制限の値が表示されます。
mount -t efsはファイルシステムの DNS 名で接続します。VPC の DNS ホスト名が無効で名前解決に失敗する場合は、EFS コンソールの「ネットワーク」タブでマウントターゲットの IP アドレスを確認し、-o mounttargetip=<IPアドレス>オプションを付けてマウントできます。
ファイルの共有を確認する
1台目のインスタンスでファイルを作成します。
sudo sh -c 'echo "Hello from Instance 1" > /mnt/efs/test.txt'
2台目の EC2 インスタンスに SSH 接続し、同様に EFS をマウントします。
sudo yum install -y amazon-efs-utils
sudo mkdir /mnt/efs
sudo mount -t efs <ファイルシステムID>:/ /mnt/efs
1台目で作成したファイルが参照できることを確認します。
cat /mnt/efs/test.txt
Hello from Instance 1 と表示されれば、複数インスタンス間でのファイル共有が正常に動作しています。
2台目のインスタンスからもファイルを追加します。
sudo sh -c 'echo "Hello from Instance 2" > /mnt/efs/test2.txt'
1台目のインスタンスに戻り、2台目で作成したファイルが参照できることを確認します。
cat /mnt/efs/test2.txt
Hello from Instance 2 と表示されれば、双方向のファイル共有が確認できます。
まとめ
- Amazon EFS は NFS 互換のフルマネージドファイルシステムであり、複数の EC2 インスタンスから同時にアクセスできる
- ファイルの追加・削除に応じて容量が自動的にスケーリングされ、事前のプロビジョニングが不要である
- マウントターゲットを各 AZ に作成することで高可用性を確保できる
- パフォーマンスモード(汎用 / 最大 I/O)とスループットモード(バースト / プロビジョンド / エラスティック)でワークロードに合わせた設定が可能である
- EFS 用のセキュリティグループで NFS 通信(TCP 2049)を許可する必要がある
- amazon-efs-utils を使用することで簡単にマウントできる










