本文へ移動

ホーム / SRE / 第4部 データとアプリケーション

第4部 データとアプリケーション・第8章

ストレージ

★★☆ 重要3トピック・面接 2問

ストレージの種類、性能を表すIOPS・スループット・レイテンシ、オブジェクトストレージ(S3)をまとめます。

ひとことで

データを「ディスクのブロック」で扱うか、「ファイル」で扱うか、「丸ごとの箱(オブジェクト)」で扱うかの違い。用途で使い分ける。

ブロックストレージは、OSからは普通のディスクに見えます。データを決まった大きさのブロックに分けて読み書きし、その上にOSがファイルシステム(ext4やXFS)を作ります。一部だけを素早く書き換えられ、レイテンシが低いので、DBのデータ置き場やOSの起動ディスクに向いています。AWSではEBSで、基本は1台のインスタンスに接続し、同じAZの中で使います。

ファイルストレージは、ネットワーク越しの共有フォルダです。NFSなどで複数のサーバーが同じディレクトリを同時に読み書きできます。複数台のサーバーで共有したいアップロードファイルや設定に使います。AWSではEFS(Linux向け)やFSxです。便利ですが、ブロックストレージより遅く高めです。

オブジェクトストレージは、HTTPのAPIで、キー(名前)を指定してデータを丸ごと出し入れする箱です。フォルダのように見えるのはキーに「/」が入っているだけで、実際には階層がありません。容量は事実上無制限で安く、耐久性も非常に高い一方、ファイルの一部だけを書き換えることはできず、全体を置き換えます。AWSではS3で、静的ファイル、ログ、バックアップ、データ分析の置き場に使います。

ブロック(EBS)ファイル(EFS)オブジェクト(S3)
アクセス方法OSのディスクとしてNFSでマウントHTTPのAPI
同時接続基本は1台多数のサーバー制限なし(どこからでも)
レイテンシ最も低い(ミリ秒未満〜)やや高い高め(数十ミリ秒〜)
一部の書き換えできるできるできない(丸ごと置き換え)
容量作るときに決める自動で伸びる事実上無制限
向く用途DB、起動ディスク共有ファイル、コンテナの永続領域静的ファイル、ログ、バックアップ、データレイク

補足:インスタンスストアは、EC2のホストに物理的についている高速なディスクですが、インスタンスを停止すると中身が消えます。一時的なキャッシュや作業領域にだけ使います。

どの単位でデータを扱うかで、ブロック・ファイル・オブジェクトに分かれるブロック「ディスク」として見える・OSがファイルシステムを作る・低レイテンシ・DBのデータ向け・基本は1台のサーバーに接続・同じAZ内で使うAmazon EBSファイル「共有フォルダ」として見える・ディレクトリとファイル・NFSなどで複数台が同時に使う・共有のアップロード置き場など・ブロックより遅め・高めAmazon EFS・FSx/shared/img/docsオブジェクト「HTTPで出し入れする箱」・キーで1つずつ丸ごと出し入れ・容量は事実上無制限・安い・部分的な書き換えはできない・静的ファイル・ログ・バックアップAmazon S3画像ログバックアップ
3種類のストレージ

「DBのデータをS3に置く」「ログをEBSに貯め続ける」など、性質に合わない使い方が障害やコストの原因になる。

面接ではこう答える

ブロックストレージはOSからディスクとして見え、低レイテンシで一部の書き換えができるのでDBに向きます。ファイルストレージはNFSなどで複数台から共有できます。オブジェクトストレージはHTTPのAPIでキーを指定して丸ごと出し入れし、容量が事実上無制限で安く、静的ファイルやログ、バックアップに向きます。AWSではそれぞれEBS、EFS、S3です。

ひとことで

ディスクの速さは3つの数字で表す。1秒に何回読み書きできるか(IOPS)、1秒に何MB運べるか(スループット)、1回にどれだけ待つか(レイテンシ)。

IOPS(I/O Operations Per Second)は、1秒間に何回の読み書きができるかです。DBのように小さなデータをあちこち読み書きする処理では、IOPSが性能を決めます。スループットは1秒間に運べるデータ量(MB/s)で、ログやバックアップ、動画のように大きなデータを順番に読み書きする処理で効きます。2つは「スループット = IOPS × 1回あたりのサイズ」の関係にあり、処理の種類によって、どちらの上限に先に当たるかが変わります。

レイテンシは1回の読み書きにかかる時間です。IOPSとレイテンシは、同時に出している要求の数(キュー深度)でつながっていて、「IOPS = キュー深度 ÷ レイテンシ」の関係があります(リトルの法則)。1回1msのディスクに1つずつ順番に要求を出すと、最大でも1,000 IOPSしか出ません。逆に、キューが長く溜まっているのにIOPSが上がらないなら、ディスク側が上限に達しています。

EBSの種類特徴性能の目安
gp3(汎用SSD)標準。容量とは別に性能を指定できる基本3,000 IOPS・125MiB/s。2025年9月の引き上げで最大80,000 IOPS・2,000MiB/sまで追加購入できる
gp2(旧世代の汎用SSD)容量に比例して性能が決まる1GiBあたり3 IOPS。小さいボリュームはバーストで一時的に3,000 IOPSまで出るが、クレジットを使い切ると基本性能に落ちる
io2 Block Express高性能・高耐久。重要なDB向け最大256,000 IOPS・4,000MiB/s
st1・sc1(HDD)大きなデータを順番に読み書きする用途スループット重視で安い。IOPSは低い

性能はボリュームだけでは決まりません。インスタンスのサイズごとにEBSとの間の帯域やIOPSの上限があり、小さいインスタンスでは高性能なボリュームを使い切れません。また、gp2やT系インスタンスのバーストは、普段は余裕があっても、クレジットを使い切った瞬間に急に遅くなるので、「昨日まで速かったのに急に遅い」障害の原因になります。

症状見るもの考えられる原因
await(待ち時間)が長い・%utilが100%近いiostat -xIOPSかスループットの上限に達している
VolumeQueueLength が高止まりCloudWatch(EBS)要求がディスクの処理能力を超えている
急に遅くなったBurstBalance、EBSIOBalance%gp2のクレジットやインスタンスのEBS帯域のバーストを使い切った
RDSのWriteLatencyが高いPerformance Insights、ストレージの種類IOPS不足。gp3の性能を上げる、io2を検討する
スループット = IOPS × 1回あたりのサイズ。どちらの上限に先に当たるかが大事gp3の基本性能(3,000 IOPS・125MB/s)で考えた場合(目安)スループット上限 125MB/s を100%とした割合DB(小さいランダム)16KB × 3,000 IOPS= 約48MB/s先にIOPSの上限に当たるログ・バックアップ1MB × 125 IOPS= 約125MB/s先にスループットの上限に当たるレイテンシとの関係(リトルの法則)同時に出せる要求の数(キュー深度)÷ 1回の待ち時間 = 出せるIOPS例:1回1msなら、1つずつ順番に出すと最大1,000 IOPS。並列に出さないとIOPSの上限まで使えない
IOPSとスループットの関係

小さいデータの読み書きはIOPSの上限に、大きいデータはスループットの上限に先に当たる。

一番細いところで性能が決まる。ボリュームだけ上げても速くならないことがあるアプリ・OS並列度・キューインスタンスのEBS帯域サイズごとに上限ありEBSボリュームIOPS・スループット上限バースト・クレジットgp2やT系は使い切ると低下CloudWatchのVolumeQueueLengthやEBSIOBalance%などで、どこで詰まっているかを切り分ける
ストレージ性能を決める複数の上限

ボリュームの性能を上げても、インスタンス側の上限が低ければ速くならない。

面接ではこう答える

IOPSは1秒あたりの読み書きの回数、スループットは1秒あたりのデータ量で、スループットはIOPSに1回のサイズを掛けたものです。DBのような小さなランダムアクセスはIOPSが、ログやバックアップのような大きな順番の読み書きはスループットが効きます。レイテンシとキュー深度からIOPSが決まるので、並列に要求を出さないと上限まで使えません。EBSではボリュームだけでなくインスタンス側の帯域上限やバーストのクレジットも確認します。

ひとことで

S3は「バケット」という入れ物に、キーで識別するオブジェクトを置くサービス。安く丈夫だが、公開設定やコストの事故が起きやすい。

S3では、バケットの中に、キー(例:logs/2026/11/app.log)で識別するオブジェクトを保存します。オブジェクトはデータ本体とメタデータからなります。2020年12月以降、書き込み直後の読み取りでも最新のデータが返る強い整合性になっています。データは複数のAZに保存され、非常に高い耐久性(イレブンナイン、99.999999999%)があります。

機能内容使いどころ
ストレージクラスStandard、Standard-IA、Glacier系など。安いほど取り出しが遅く・高く、最低保存期間があるアクセス頻度に合わせてコストを下げる
ライフサイクルルール日数に応じて自動でクラスを移したり削除したりするログやバックアップの保持期間管理
Intelligent-Tieringアクセス状況を見て自動でクラスを移すアクセスパターンが読めないデータ
バージョニング上書き・削除しても過去の版を残す誤削除やランサムウェアからの復旧
Object Lock一定期間、削除や上書きを禁止するバックアップや監査ログの改ざん防止
署名付きURL期限つきで特定のオブジェクトの読み書きを許可するURL非公開のままアップロード・ダウンロードさせる
ブロックパブリックアクセスバケットやアカウント全体で公開設定を禁止意図しない公開の防止(必ず有効に)
暗号化既定でS3管理の鍵で暗号化。KMSの鍵も選べる鍵の利用を監査したい場合はKMS
よくある事故防ぎ方
バケットを公開して情報漏えいアカウント全体でブロックパブリックアクセス。公開が必要な配信はCloudFront経由に
ログが溜まり続けて費用が膨らむライフサイクルルールで移動・削除。バージョニング時は古い版の削除も設定
大量の小さいファイルで料金が高いリクエスト数に料金がかかる。まとめて保存する
誤ってバケットごと削除バージョニング、MFA Delete、権限の最小化、別アカウントへの複製
アクセスが減るほど安いクラスへ。ライフサイクルルールで自動で移す日数は例。取り出しの速さと費用、最低保存期間を確認して決めるS3 Standardよく使うデータ即時に取り出せるStandard-IAたまに使う取り出しに料金がかかるGlacier系ほぼ使わない取り出しに時間がかかる削除保持期限を過ぎたら自動で消す
ストレージクラスとライフサイクル

安いクラスほど取り出しに時間と料金がかかる。「本当に取り出せるか」まで確認しておく。

署名付きURLで、アプリを通さずに利用者とS3が直接やりとりする利用者のブラウザアプリ(API)S3アップロードしたいアプリが「このキーに5分間だけPUTしてよい」URLを署名して作る署名付きURLファイルを直接PUT200 OKアプリのサーバーに大きなファイルが流れず、バケットは非公開のままにできる
署名付きURLによる直接アップロード

バケットを公開せずに、利用者に一時的な権限だけを渡せる。

面接ではこう答える

S3はバケットにキーでオブジェクトを保存するサービスで、複数AZに保存され耐久性が非常に高く、今は書き込み直後も最新が読める強い整合性です。アクセス頻度に応じてストレージクラスを選び、ライフサイクルルールで移動や削除を自動化します。運用ではブロックパブリックアクセスを必ず有効にし、配信はCloudFront経由、アップロードは署名付きURLにして、バケット自体は非公開に保ちます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • ブロック・ファイル・オブジェクトの違いと、IOPS・スループット・レイテンシの関係を説明できるようにする

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1IOPSとスループットの違いは?DBの性能が出ないとき、どちらを疑いますか?

模範回答

IOPSは1秒あたりの読み書きの回数、スループットは1秒あたりのデータ量で、スループットはIOPSに1回のサイズを掛けたものです。DBは小さなデータをランダムに読み書きするので、多くの場合IOPSの上限に先に当たります。iostatのawaitや%util、CloudWatchのVolumeQueueLengthを見て上限に達しているかを確認し、gp3ならIOPSを追加購入するか、io2を検討します。あわせてインスタンス側のEBS帯域の上限や、gp2のバーストクレジット切れも確認します。

深掘りされたら

  • キュー深度とは何ですか?
  • 昨日まで速かったのに急に遅くなった理由として何を疑いますか?

見られているポイント2つの指標の関係と、上限が複数あること

Q2ブロック・ファイル・オブジェクトストレージの違いと使い分けは?

模範回答

ブロックはOSからディスクとして見え、低レイテンシで一部を書き換えられるのでDBや起動ディスクに使います。ファイルはNFSなどで複数台から共有でき、共有のアップロード置き場などに使います。オブジェクトはHTTPのAPIでキー単位に丸ごと出し入れし、容量が事実上無制限で安いので、静的ファイル、ログ、バックアップに使います。AWSではEBS、EFS、S3です。

深掘りされたら

  • コンテナで永続データを持ちたい場合はどれを使いますか?

見られているポイント性質と用途の対応