Amazon EFS の使い方:EC2 からマウントして共有ストレージを構築する
複数の EC2 インスタンスや Lambda から同じファイルを参照したい場面で活躍するのが Amazon EFS(Elastic File System)です。EBS がインスタンスに 1 対 1 で紐付くブロックストレージであるのに対して、EFS はネットワーク越しに NFS マウントできるため、複数のコンピューティングリソースがファイルを共有できます。この記事では EFS の基本的な仕組みから、実際にマウントして使うまでの手順を整理します。
Amazon EFS とは
Amazon EFS は AWS が提供するフルマネージドの NFS ファイルシステムサービスです。ファイルシステムを作成すると、複数のアベイラビリティーゾーン(AZ)をまたいでデータが自動的に冗長化されます。ストレージ容量は利用量に応じて自動でスケールするため、容量の見積もりや事前プロビジョニングは不要です。
EC2・ECS・EKS・Lambda などのさまざまな AWS コンピューティングサービスからアクセスでき、通常の Linux ファイルシステムと同じコマンドでファイルを操作できます。
Amazon Elastic File System とは - Amazon Elastic File System
Amazon Elastic File System (Amazon EFS) は、ファイルデータを共有できるサーバーレスで伸縮自在なファイルストレージを提供します。すべてのファイルストレージインフラ...
ストレージクラスとライフサイクル管理
EFS には 4 つのストレージクラスがあります。アクセス頻度に合わせて適切なクラスを選ぶことでコストを最適化できます。
| ストレージクラス | 特徴 |
|---|---|
| 標準(Standard) | 高頻度アクセス向け。マルチ AZ で冗長化 |
| 標準低頻度アクセス(Standard-IA) | 低頻度アクセス向け。標準より安価だが読み取りに追加料金あり |
| 1 ゾーン(One Zone) | 単一 AZ に保存。標準より安価 |
| 1 ゾーン低頻度アクセス(One Zone-IA) | 単一 AZ の低頻度アクセス向け。最もコストが低い |
ライフサイクルポリシーを設定しておくと、一定期間アクセスされていないファイルを自動的に低頻度アクセスクラスへ移動できます。頻繁に使うファイルと使わないファイルが混在する場合に有効です。
ストレージライフサイクルを管理する - Amazon Elastic File System
ライフサイクル管理を使用して、ファイルシステムに定義したライフサイクルポリシーに従ってストレージクラス間でデータを自動的に移行します。
パフォーマンスモードとスループットモード
EFS には 2 種類のパフォーマンスモードと 3 種類のスループットモードがあります。用途に応じて組み合わせを選びましょう。
パフォーマンスモード
パフォーマンスモードはファイルシステムの作成時に選択します。後から変更できないため、用途に応じて選びましょう。
| モード | 概要 |
|---|---|
| 汎用(General Purpose) | ほとんどのワークロードに対応。推奨設定 |
| 最大 I/O(Max I/O) | 多数のクライアントが並列アクセスする大規模な分散処理向け。レイテンシーがやや高い |
スループットモード
新規で作成する場合は Elastic スループットを選ぶと、コストとパフォーマンスのバランスが取りやすいです。
| モード | 概要 |
|---|---|
| Elastic スループット | 必要なときに自動でスループットが増減。予測困難なワークロード向け |
| Provisioned スループット | 必要なスループットを事前に指定。常時一定の書き込みが必要な場合に使用 |
| Bursting スループット | ストレージサイズに連動してベーススループットが決まる |
Amazon EFS のパフォーマンス仕様 - Amazon Elastic File System
パフォーマンスモードやスループットモードなどのファイルシステムの設定は、レイテンシー、IOPS、スループットレートに影響します。推奨されるヒントに従ってパフォーマンスを最適化します。
EBS と EFS の違い
EFS を理解する上で EBS との違いを押さえておくと、どちらを選ぶかの判断がしやすくなります。同じファイルを複数のサーバーから読み書きしたい場合や、コンテナのデータを永続化して再起動後も保持したい場合は EFS が適しています。
| 比較項目 | EBS | EFS |
|---|---|---|
| アクセス方式 | EC2 に直接アタッチ(ブロックデバイス) | NFS v4 でマウント |
| 同時接続 | 基本 1 インスタンス | 複数インスタンスから同時接続 |
| AZ をまたいだ共有 | 不可 | 可能 |
| 容量管理 | 事前にサイズを決める | 自動でスケール |
| 主なユースケース | 単一 EC2 インスタンス専用ストレージ | 共有ファイル・コンテンツ管理・機械学習 |
セキュリティグループの設定
EC2 から EFS に接続するには、EC2 と EFS マウントターゲットのそれぞれに NFS ポート(TCP 2049)の通信を許可するセキュリティグループの設定が必要です。
| リソース | 方向 | プロトコル | ポート | 送信元 / 送信先 |
|---|---|---|---|---|
| EC2 のセキュリティグループ | アウトバウンド | TCP | 2049 | EFS マウントターゲットのセキュリティグループ |
| EFS マウントターゲットのセキュリティグループ | インバウンド | TCP | 2049 | EC2 のセキュリティグループ |
また、EC2 と EFS は同じ VPC 内に配置する必要があります。別の VPC からアクセスする場合は VPC ピアリングや Transit Gateway を経由する構成になります。
VPC セキュリティグループを使用する - Amazon Elastic File System
インバウンドルールとアウトバウンドルールを使用して、EC2 インスタンスと EFS マウントターゲット間のネットワークトラフィックを制御するように Amazon VPC セキュリティグループを設定しま...
AWS CLI で EFS を使ってみる
AWS CLI を使って EFS ファイルシステムの作成から EC2 へのマウントまでを実際にコマンドを実行して確認します。
EFS ファイルシステムを作成する
create-file-system コマンドでファイルシステムを作成します。パフォーマンスモードに generalPurpose、スループットモードに elastic を指定します。
❯ aws efs create-file-system \
--performance-mode generalPurpose \
--throughput-mode elastic \
--encrypted \
--tags Key=Name,Value=my-efs
実行結果
{
"OwnerId": "123456789012",
"CreationToken": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"FileSystemId": "fs-0a1b2c3d4e5f67890",
"FileSystemArn": "arn:aws:elasticfilesystem:ap-northeast-1:123456789012:file-system/fs-0a1b2c3d4e5f67890",
"CreationTime": "2026-05-06T10:00:00+09:00",
"LifeCycleState": "creating",
"Name": "my-efs",
"NumberOfMountTargets": 0,
"SizeInBytes": {
"Value": 0,
"ValueInIA": 0,
"ValueInStandard": 0,
"ValueInArchive": 0
},
"PerformanceMode": "generalPurpose",
"Encrypted": true,
"KmsKeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/b2c3d4e5-f6a7-8901-bcde-f12345678901",
"ThroughputMode": "elastic",
"Tags": [
{
"Key": "Name",
"Value": "my-efs"
}
],
"FileSystemProtection": {
"ReplicationOverwriteProtection": "ENABLED"
}
}
次に、EC2 が NFS 接続するエンドポイントとなるマウントターゲットを作成します。--security-groups には、EC2 のセキュリティグループからの TCP 2049 インバウンドを許可した EFS 用セキュリティグループの ID を事前に作成して指定します。
❯ aws efs create-mount-target \
--file-system-id fs-0a1b2c3d4e5f67890 \
--subnet-id subnet-0a1b2c3d4e5f67890 \
--security-groups sg-0a1b2c3d4e5f67890
{
"OwnerId": "123456789012",
"MountTargetId": "fsmt-0a1b2c3d4e5f67890",
"FileSystemId": "fs-0a1b2c3d4e5f67890",
"SubnetId": "subnet-0a1b2c3d4e5f67890",
"LifeCycleState": "creating",
"IpAddress": "10.0.1.123",
"NetworkInterfaceId": "eni-0a1b2c3d4e5f67890",
"AvailabilityZoneId": "apne1-az4",
"AvailabilityZoneName": "ap-northeast-1a",
"VpcId": "vpc-0a1b2c3d4e5f67890"
}
マウントターゲットが available 状態になるまでしばらく待ちます。以下のコマンドで状態を確認できます。
❯ aws efs describe-mount-targets --file-system-id fs-0a1b2c3d4e5f67890
{
"MountTargets": [
{
"OwnerId": "123456789012",
"MountTargetId": "fsmt-0a1b2c3d4e5f67890",
"FileSystemId": "fs-0a1b2c3d4e5f67890",
"SubnetId": "subnet-0a1b2c3d4e5f67890",
"LifeCycleState": "available",
"IpAddress": "10.0.1.123",
"NetworkInterfaceId": "eni-0a1b2c3d4e5f67890",
"AvailabilityZoneId": "apne1-az4",
"AvailabilityZoneName": "ap-northeast-1a",
"VpcId": "vpc-0a1b2c3d4e5f67890"
}
]
}
EC2 に EFS をマウントする
EC2 インスタンス(Amazon Linux 2023)に SSH でログインして、EFS マウントヘルパー(amazon-efs-utils)をインストールします。
❯ sudo dnf install -y amazon-efs-utils
マウント先のディレクトリを作成します。
❯ sudo mkdir /mnt/efs
EFS ファイルシステムを TLS 暗号化を有効にしてマウントします。
❯ sudo mount -t efs -o tls fs-0a1b2c3d4e5f67890:/ /mnt/efs
マウントできているか確認します。efs タイプのファイルシステムが表示されればマウント成功です。
❯ df -h /mnt/efs
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs
インスタンス再起動後も自動マウントする
インスタンスを再起動するとマウントが解除されます。再起動後も自動的にマウントされるよう /etc/fstab に設定を追記しましょう。
❯ echo "fs-0a1b2c3d4e5f67890:/ /mnt/efs efs defaults,_netdev,tls 0 0" | sudo tee -a /etc/fstab
_netdev オプションを付けることで、ネットワークが利用可能になってからマウントを実行します。起動時に EFS を利用するシステムはオプションを付けましょう。
リソースを削除する
作成したリソースを削除します。EFS ファイルシステムを削除する前に、マウントターゲットを先に削除する必要があります。
❯ aws efs delete-mount-target --mount-target-id fsmt-0a1b2c3d4e5f67890
マウントターゲットの削除が完了したら、ファイルシステムを削除します。
❯ aws efs delete-file-system --file-system-id fs-0a1b2c3d4e5f67890
まとめ
- Amazon EFS はフルマネージドの NFS ファイルシステムで、複数の EC2 インスタンスや Lambda から同じファイルを共有できる
- EBS がインスタンス専用のブロックストレージであるのに対し、EFS はネットワーク越しに複数インスタンスから同時接続できる
- EC2 から EFS に接続するには、NFS ポート(TCP 2049)を許可するセキュリティグループの設定が必要
- EFS マウントヘルパーをインストールしてマウントコマンドを実行すると、通常の Linux ファイルシステムと同じ感覚で操作できる
- 再起動後も自動マウントするには fstab に設定を追記する