DoiT Internationalでお客様向けに行っているクラウドアドバイザリーの現場では、コスト削減のつもりで実施した施策が、かえってS3のストレージコストを押し上げてしまう極端なケースに出会うことがあります。本記事では、そうした事態を避けるためのポイントを解説します。

S3バケットにファイル(オブジェクト)を保存する際に選択できるストレージクラスは、Standard(デフォルト)、Infrequent Access(Standard-IAとも呼ばれます)、Intelligent-Tiering、Glacier、S3 Outpostsの5種類です。
ストレージクラスはアップロード時にも、後からでも設定できます。よく使われる手法のひとつが、バケットにライフサイクルルールを設定し、オブジェクトのライフサイクルに応じてAmazon S3に実行させたい操作(例:ファイル作成から30日経過後にStandardからInfrequent Accessへクラスを変更する)を定義する方法です。
Infrequent Accessは、Standardよりも安価にファイルを保管できるストレージクラスです。ダウンロード速度、耐久性、レイテンシはStandardと同等ですが、ダウンロード時のコストはStandardより高くなります。その名のとおり、アクセス頻度の低いファイルの保管に適したクラスです。

ライフサイクルルールでファイルをStandardからIntelligent tierへ移行した例。移行コストは2,000ドル。移行から5か月後にはストレージ費用が移行前を下回ります。
S3コストでよくある落とし穴
バケットのストレージコストを押し上げる代表的な要因は、次の2つです。
- ストレージクラスの切り替えに費用がかかることは、あまり知られていません。AWSはStandardからInfrequent Accessへの移行に対し、1,000リクエストあたり0.01ドルを課金します。
- 一部のS3ストレージクラスには最小ファイルサイズが設定されています。Infrequent Accessの場合、最小ファイルサイズは128Kbです。


その結果、S3バケットに数億件もの小さなファイルを保管しているお客様では、一度きりとはいえ高額な移行費用が発生するケースがあります。
バケット内のファイル数を確認するには
バケット内のファイル数とサイズを把握する方法は、次の2つです。
- ファイル単位 — S3 Inventoryを使うと、バケット内のファイル一覧、ファイルサイズ、ストレージクラスを記載したレポートを日次で生成できます。
- バケット単位 — CloudWatchメトリクスから、ファイル数とバケットサイズを確認できます。これらのメトリクスはS3コンソールの「Management」→「Metrics」からも参照可能です。

S3バケットのサイズ

S3バケット内のファイル数
ライフサイクルルールはいつ設定すべきか
まずは、S3バケットのサイズをファイル数で割り、(加重なしの)平均ファイルサイズを算出します。
たとえば、本記事のスクリーンショットで使用しているバケットは、サイズ22.1Tb、ファイル数630万件で、平均ファイルサイズは3.42Mbとなります。
Infrequent Accessへの切り替えは、一時的に高額なコスト負担を招く可能性があります。
ライフサイクル移行コストと費用対効果を試算する
この22.1Tbのバケットでライフサイクルルールを使い、ストレージクラスをInfrequent Accessへ変更した場合、630万件のファイル移行に対する一時的な移行費用は63ドル(6,300,000ファイル ÷ 1,000 × 0.01ドル)、その後のストレージコストは月額282.88ドルとなります。
上記の試算からわかるとおり、クラス間の移行は初月からコスト削減効果をもたらします。
まとめ
AWS S3には多彩なストレージクラスが用意されており、適切に使い分けることで効率化とコスト削減を実現できます。