はじめに
対象読者:EFSとS3の名前は知っているけれど、どちらも「ファイルを置く場所」に見えて違いを説明できない人
AWSのストレージの説明を読むと、「EFSはファイルシステム、S3はオブジェクトストレージ」と書かれています。でも、どちらもファイルを置けて、取り出せる点は同じです。この記事では、この違いが実際に何を意味するのかを、アプリがファイルを読み書きする場面に絞って整理します。
この記事で扱わないこと
- EFSやS3の細かい設定と料金
参考文献
EFSの全体像と、ファイルロックなどの機能の説明です。
EFSの待ち時間など、パフォーマンスの仕様です。
S3の「フォルダ」の正体と、条件付き書き込みの説明です。
ブロック・ファイル・オブジェクトの3種類のストレージの違いは、以前書いたこちらの記事で整理しています。
ファイルシステムは「どこに何があるか」を覚えている係
パソコンでフォルダを開き、中のExcelをダブルクリックする。この「フォルダの中にファイルがある」という見え方を作っているのが、ファイルシステムです。WindowsのNTFSやMacのAPFSがそれにあたります。
ディスクの中身は、本当はただの0と1の並びです。どこからどこまでが 請求書/9月.xlsx なのかを、ディスク自体は知りません。それを覚えていて、名前を言われたら中身の場所を案内するのがファイルシステムの仕事です。
ファイルシステムがやっていることは、大きく次の4つです。
| やること | 例 |
|---|---|
| 名前と場所の対応を覚える |
請求書/9月.xlsx の中身はディスクのこの辺り |
| フォルダの階層を作る | フォルダの中にフォルダを作れる。名前の変更や移動もすぐ終わる |
| 一部だけ書き換える | 大きなファイルの途中の数バイトだけを上書きできる |
| 同時に書く処理の順番を調整する | ロックを取って、ほかの処理に待ってもらう |
EFSとS3の違いは、この表のうちどれができて、どれができないかでほぼ説明できます。
EFSは「ネットの向こうにある共有フォルダ」
EFSは、ファイルシステムをネットワーク越しに使えるようにしたサービスです。Linuxのサーバーから「マウント」すると、/mnt/efs のような普通のディレクトリとして見えます。
サーバーとEFSの間は、NFSというファイル共有の約束事で話します。複数のサーバーから同時にマウントできるので、「何台ものサーバーで同じファイルを使う」ことができます。
大事なのは、アプリから見るとEFSは手元のフォルダとほぼ同じに扱えることです。ファイルを開く、途中を書き換える、名前を変える、ロックを取る、といった操作がそのまま使えます。さきほどの表の4つを、EFSは全部持っています。
なお、EFSはWindowsのサーバーからは使えません。Windowsで共有フォルダが欲しいときは、FSx for Windows File Serverという別のサービスを選びます。
S3は「名前を付けて丸ごと預ける倉庫」
S3は、ファイル(S3ではオブジェクトと呼びます)に名前を付けて預けるサービスです。使うときは、HTTPのAPIで「この名前でこれを置いて」「この名前のものを返して」と頼みます。
S3のコンソールを開くと、フォルダがあるように見えます。でも実際には、photos/2026/09/cat.jpg という長い名前のオブジェクトが1個あるだけです。
S3の汎用バケットは、フォルダの階層を持たない平らな作りになっています。名前が / で区切られているので、コンソールがフォルダのように並べて見せているだけなんです。コンソールで空のフォルダを作ると、中身が0バイトの photos/ という名前のオブジェクトが1個できます。
つまりS3が扱う単位は、いつも「オブジェクト丸ごと」です。この性質が、次の節の違いにつながります。
違いが出るのは「作業しながら読み書き」するとき
写真を1枚置いて、あとで1枚取り出す。これだけなら、EFSでもS3でも困りません。
違いが出るのは、アプリが作業しながら同じファイルを何度も読み書きするときです。S3の汎用バケットには、ここで苦手なことが4つあります。
途中の一部だけ書き換えられない
アプリの作業には、「少しだけ直す」の繰り返しがよく出てきます。ファイルの最後にデータを足す、途中の数バイトを書き換える、といった操作です。
ファイルシステムなら、ファイルの途中の位置を指定して、その部分だけを上書きできます。S3の汎用バケットでは、オブジェクトの一部だけを書き換えられません。大きなファイルの途中を少し直すだけでも、直したファイルを新しいオブジェクトとして丸ごと置き直すことになります。
ただし、ファイルシステムが知っているのは「何バイト目から何バイト」という位置だけです。行という単位は知りません。テキストの1行の長さが変わる編集や、Excelのような形式のファイルでは、アプリ側が後ろの部分やファイル全体を書き直すこともあります。実際にどれだけ書き込むかは、ファイルの形式とアプリの作り次第です。
読むほうは、S3でもRange指定でオブジェクトの一部だけを取り出せます。苦手なのは書くほうです。
1回ごとの待ち時間が長め
EFSもS3も、ネットワークの向こうにあるストレージです。どちらも操作のたびにリクエストを送って返事を待つ点は同じです。違うのは、その1回ごとの返事の速さです。
EFSはファイル操作のためのNFSで話し、細かい読み書きが速く返るように作られています。S3はHTTPのAPIでオブジェクトを出し入れする形で、丸ごとの出し入れを大量にさばくことに向いた作りです。
| 置き場所 | 公式が示している待ち時間の目安 |
|---|---|
| EFS(Standard) | 最良の条件で、読み取りの操作が約1ms・書き込みの操作が約2.7ms |
| S3 Express One Zone | データの読み書きが1桁ミリ秒。公式に「S3 Standard の最大10倍速い」とある |
| S3 Standard | S3 Express One Zone より遅い |
EFSは「1回の操作」、S3は「オブジェクトのデータを読み書きする1回」について示された値で、測っているものが完全に同じではありません。実際の速さも、ファイルの大きさやクライアントの環境で変わります。大まかな目安として見てください。
1回だけなら気にならない差です。ただ、アプリが小さな読み書きを何千回も繰り返すと、この差が積み重なります。S3はリクエストの回数にも料金がかかるので、小さな書き込みの繰り返しはコストの面でも不利です。
ロックがない
ファイルシステムにはロックの仕組みがあります。EFSはNFS v4のファイルロックに対応していて、ファイル全体でも、一部のバイト範囲だけでもロックできます。
ただし、EFSのロックはアドバイザリロック(紳士協定のようなロック)です。ロックを取っていない処理の読み書きは、そのまま通ってしまいます。同時書き込みを防ぐには、書き込む側のアプリがみんなロックを取ってから書く作りになっている必要があります。
それでも、アプリ同士で順番を守るための仕組みがファイルシステム側に用意されているのは大きな違いです。S3にはこの仕組みがありません。2つの処理が同じオブジェクトを同時に書くと、基本的には後に処理されたほうが残ります。
2024年から、S3にも条件付き書き込みが入りました。If-None-Match を付けると「同じ名前のオブジェクトがまだ無いときだけ書く」、If-Match を付けると「自分が読んだときから変わっていないときだけ書く」にできます。ただし、条件に合わずに失敗したときのやり直しは、アプリの側で作る必要があります。
名前の変更やフォルダの移動が重い
ファイルシステムでは、ファイルの名前を変えても、フォルダを丸ごと別の場所へ移しても、一瞬で終わります。中身は動かさず、「どこに何があるか」の記録を書き換えるだけだからです。
S3の汎用バケットでは、名前がオブジェクトそのものの識別子です。名前を変えるには、新しい名前でコピーしてから元を消します。フォルダに見えているものを移すなら、その名前で始まるオブジェクトの数だけ、コピーと削除を繰り返すことになります。
4つをまとめると
| アプリがやりたいこと | EFS(ファイルシステム) | S3(汎用バケット) |
|---|---|---|
| 途中の一部だけ書き換える | できる | 丸ごと置き直す |
| 小さい読み書きを何度もする | 1回ごとの待ち時間が短い | 1回ごとの待ち時間が長め |
| 同時に書く処理を調整する | アドバイザリロックを使える | 条件付き書き込みで、アプリ側が工夫する |
| 名前を変える・フォルダを移す | すぐ終わる | コピーしてから元を消す |
S3が上書きや削除に弱いわけではありません。オブジェクト丸ごとの上書きや削除なら、S3でも大量にこなせます。分かれ目は、ファイルの途中を書き換えたり、ロックで順番を守ったり、フォルダの操作をしたりといった、ファイルシステムの操作が要るかどうかです。
どっちを選べばいいか
| データの使われ方 | 向いているもの |
|---|---|
| 複数のLinuxサーバーが、同じファイルを作業しながら読み書きする | EFS |
| 写真・動画・ログ・バックアップ・分析用データのように、ファイル丸ごとを置いて取り出す | S3 |
| Windowsのサーバーで共有フォルダを使う | FSx for Windows File Server |
迷ったら、「アプリはこのファイルの途中を書き換えるか」を考えてみてください。書き換えるならファイルシステム、丸ごと置いて丸ごと取り出すだけならS3です。
まとめ
EFSとS3は、どちらもファイルを置く場所に見えます。違いは、ファイルの途中を「少しずつ直しながら使う」前提か、「丸ごと預けて丸ごと受け取る」前提かにあります。
その前提の違いが、途中の書き換え、1回ごとの待ち時間、ロック、名前の変更という4つの差になって表れます。どちらが優れているかではなく、アプリがファイルをどう扱うかで選ぶものです。

