はじめに
2026年4月7日、S3バケットをそのままNFSマウントしてファイルシステムとして使える ようになりました。
この記事では、S3 Filesの仕組み、既存サービス(EFS / Mountpoint for S3)との違い、実際にEC2へマウントする手順まで、初心者〜中級者向けに噛み砕いて紹介します。
忙しい人のために要約
- S3バケットをNFS v4.1+でマウントできる新サービス「Amazon S3 Files」 が2026年4月7日にGA
- 裏側は Amazon EFSベース、アクティブデータへのレイテンシは 約1ms、集約読み取りスループットは 最大数TB/秒
- EC2 / ECS(Fargate含む)/ EKS / Lambda から ネイティブなNFSとしてアクセス、POSIX権限にも対応
- ファイルシステム側での変更は 数分以内にS3へ同期、S3側オブジェクトも 数秒〜数分でファイルシステムに反映
- 料金は ストレージ容量 + 小規模読み取り/全書き込み操作 + S3同期リクエスト の3軸構成
Amazon S3 Filesとは
Amazon S3 Files とは、「S3バケットをNFSファイルシステムとしてマウントできる」 サービスです。そのままですね。
これまでもS3のデータをファイルシステムっぽく扱う方法はいくつかありました(Mountpoint for Amazon S3、s3fs、Storage Gatewayなど)。しかし、POSIX完全対応だったり、複数クライアントからの同時書き込みだったり、低レイテンシだったりを 全部同時に満たすもの はありませんでした。
S3 Filesは、Amazon EFSの技術を基盤に据える ことでこれらの問題を解決するようです。S3オブジェクトをEFSのファイルシステムセマンティクスで操作できる、つまり 「S3にデータを置いたまま、EFSみたいに使える」 わけです。
アーキテクチャのざっくり図
Before / After
S3をファイルシステム的に使いたいときの選択肢がどう変わるのかを整理すると、こうなります。
ステージング不要、というのが最大のポイントですね。
既存サービスとの使い分け
「EFSやMountpoint for S3とどう違うの?」という疑問が当然浮かぶと思いますが、ざっくり整理します。
| 項目 | S3 Files | Mountpoint for S3 | EFS | FSx for Lustre |
|---|---|---|---|---|
| バックエンド | S3 | S3 | EFS専用 | Lustre専用 |
| プロトコル | NFS v4.1+ | FUSE | NFS v4.1 | Lustre / NFS |
| POSIX対応 | ◯(フル) | △(制限あり) | ◯ | ◯ |
| 同時アクセス書き込み | ◯ | △ | ◯ | ◯ |
| データ永続先 | S3バケット | S3バケット | EFS | FSx(S3連携あり) |
| 追加のデータ複製 | 不要 | 不要 | 必要 | 必要 |
| レイテンシ | 約1ms(キャッシュ層) | 通常のS3 | 約1ms | サブms |
S3にデータを置いたままフルPOSIX・同時書き込みしたい なら、S3 Filesがハマりそうです。
やってみた
ここからはAWSマネジメントコンソールから実際にS3 Filesをセットアップし、EC2インスタンスからマウントしてファイルを読み書きするところまでを通しでやってみます。
前提条件
- S3バケット: バージョニングが有効化されていること(S3 Filesの必須要件)
- VPC: S3 Filesのマウントターゲットを配置するVPC / サブネットが作成済み(デフォルトVPCでもOK)
- EC2: Amazon Linux 2023 インスタンスを起動済み、セキュリティグループでNFS(TCP 2049)のインバウンドを許可
-
EC2のIAMロール: 後述(AWS管理ポリシー
AmazonS3FilesClientFullAccess+ S3読み取り用のインラインポリシー) -
パッケージ: EC2に
amazon-efs-utilsの最新版がインストールされていること
手順1: バージョニング有効のS3バケットを用意する
S3コンソールでバケットを作成する際、「バケットのバージョニング」を「有効にする」 にチェックを入れます。
既存のバケットを使う場合は:
- S3コンソールの 「General purpose buckets」 から対象のバケットを開く
- 「プロパティ」タブ を選択
- 「バケットのバージョニング」 セクションの 「編集」 をクリック
- 「有効にする」 を選択して 「変更の保存」
手順2: ファイルシステムを作成する
ここがS3 Filesの本体です。S3コンソールから操作します。
- S3コンソール(
https://console.aws.amazon.com/s3/)を開く - 左のナビゲーションペインから 「File systems」 を選択
- 「Create file system」 をクリック
- 作成画面で以下を設定
-
Source: マウント元となるバケットまたはプレフィックスを指定(例:
s3://s3files-handson-20260417/)。「Browse S3」 から選ぶこともできます - VPC: デフォルトVPCが自動選択されます。別のVPCを使いたい場合はここで変更
-
Source: マウント元となるバケットまたはプレフィックスを指定(例:
- 確認画面で 「Create file system」 をクリック
作成が完了すると、fs-xxxxxxxxxxxxxxxxx 形式の File system ID が発行されます。コピーしておきましょう。
手順3: マウントターゲットを確認する(必要なら追加)
手順2で各AZに自動作成されたマウントターゲットを確認します。
- S3コンソール → 左ナビ 「General purpose buckets」 → 対象バケットを開く
- 「File systems」タブ を選択し、作成したファイルシステムをクリック
- 「Mount targets」タブ を開く
追加のサブネットにマウントターゲットを置きたい場合は、このタブから 「Create mount targets」 で追加できます。
マウントターゲットの作成は 最大15分 かかります。「作ってすぐマウント」は失敗するので焦らず待ちましょう。
手順4: EC2にIAMロールをアタッチする
EC2から S3 Files をマウントするには、EC2インスタンスのIAMロールに以下の2つが必要です。
-
AWS管理ポリシー:
AmazonS3FilesClientFullAccess(クライアント接続用) -
インラインポリシー: 対象バケットへの読み取り権限(
s3:GetObject,s3:ListBucketなど)
コンソールでの手順:
- IAMコンソール → 「ロール」 から対象のEC2インスタンスプロファイル用ロールを開く
-
「許可を追加」→「ポリシーをアタッチ」 で
AmazonS3FilesClientFullAccessを検索してアタッチ - 「許可を追加」→「インラインポリシーを作成」 で対象バケットへのS3読み取り権限を作成してアタッチ
面倒だったのですいません、AmazonS3FullAccess をアタッチしてます。
手順5: EC2インスタンスからマウントする
EC2にログインして、マウントポイントを作って mount コマンドを実行します。
# amazon-efs-utils が最新か確認(未インストールなら更新)
sudo dnf install -y amazon-efs-utils
# マウント先ディレクトリを作成
sudo mkdir -p /mnt/s3files
# マウント実行(File system ID を指定)
sudo mount -t s3files fs-01f749ba532e7cdae:/ /mnt/s3files
# マウント確認
df -h /mnt/s3files
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/s3files
アクセスポイント経由でマウントしたい場合は -o accesspoint=... を付けます。
sudo mount -t s3files -o accesspoint=<access-point-id> fs-01f749ba532e7cdae:/ /mnt/s3files
再起動時に自動マウントしたい場合は /etc/fstab に以下を追記します。
fs-01f749ba532e7cdae:/ /mnt/s3files s3files _netdev 0 0
手順6: 読み書きしてみる
ファイルシステムとして普通に使えます。
# ファイル作成
echo "Hello S3 Files" | sudo tee /mnt/s3files/hello.txt
# ディレクトリも作れる
sudo mkdir /mnt/s3files/logs
echo "log entry" | sudo tee /mnt/s3files/logs/app.log
# 一覧表示
ls -la /mnt/s3files/
結果確認:S3側からも見える
ここが一番のポイントです。S3コンソールで対象バケットを開くと、普通のオブジェクトとして表示 されます。
hello.txtlogs/app.log
逆向きも確認してみます。
# S3側から直接オブジェクトを投入(別の端末やCloudShellから)
echo "from s3 api" | aws s3 cp - s3://s3files-handson-20260417/from-s3.txt
# 数秒〜数分待ってからEC2側で確認
cat /mnt/s3files/from-s3.txt
# from s3 api
双方向に自動同期 されているのがわかりますね。
気をつけるポイント・注意点
1. 料金
S3 Filesの料金は以下の3つで構成されます。
- ストレージ: ファイルシステム内のデータ容量(基本はS3料金と同じ体系)
- オペレーション: 小規模ファイルの読み取りと、すべての書き込みオペレーション
- S3同期リクエスト: ファイルシステムとS3間の同期に発生するS3リクエスト
「S3と同じつもりで使ったら意外と課金があった」 を避けるためにも、S3料金ページ を必ず確認すると良いでしょう。
2. NFS close-to-open一貫性の理解
ファイルが閉じられるまで他ノードには見えません。データベースファイルや共有ログのような 「書きかけを他ノードが読む」想定のワークロード は向きません。そういう用途は素直にEFS / FSxを選びましょう。
3. UID/GIDのマッピング
POSIX権限はS3オブジェクトの メタデータに保存されたUID/GID で管理されます。複数のコンピューティングから同じファイルシステムを触るときは、UID/GIDが揃うように設計しないと、権限エラーでファイルが開けない 事故が起きがちです。
4. S3バケットのバージョニング有効化が必須
S3 Filesはファイルシステムとバケット間の同期にS3のバージョニング機能を利用します。バージョニングが無効だとファイルシステム自体が作成できません。既存バケットを使う場合は有効化を忘れずに。
まとめ
改めてS3 Filesのうれしいポイントを整理すると、こうですね。
- S3バケットがそのままNFSファイルシステムになる
- EC2 / ECS / EKS / Lambda から共通の作業領域として使える
- POSIX権限・同時アクセス・close-to-open一貫性 と現代的なファイルシステム機能を網羅
- AIエージェントの状態共有 や MLデータ準備 に特に効く
- Mountpoint for S3とEFSのいいとこ取り 的なポジション




