はじめに
以前、【AWS初心者向け】Amazon S3のストレージクラスとは?コストを抑えるための使い分けを解説 という記事で、S3 Standard・Intelligent-Tiering・Glacier系など各ストレージクラスの特徴と、ライフサイクルルールを使った自動移行の仕組みについて整理しました。
ただ、前回は「Glacierは安いけど取り出しに時間がかかる」くらいの説明で終わっていて、「じゃあGlacierに移した直後に消したらどうなるの?」「小さいファイルをたくさんGlacierに入れても大丈夫?」といった、実際に運用する上で気になる細かいルールまでは書けていませんでした。今回は公式ドキュメントの比較表を見ながら、そのあたりをもう一歩深掘りして調べてみました。
この記事はこんな方におすすめ
- 前回の記事でS3ストレージクラスの種類と用途は理解した方
- Glacierに移行したデータを早めに消して想定外の課金を受けた(受けそうな)方
- 小さいファイルが大量にあるバケットのコストを最適化したい方
- 最近登場したS3 Express One Zoneがどんなものか気になる方
まず前回のおさらい
前回の記事のポイントを簡単に振り返ります。
- ストレージクラスは「データの利用頻度に応じて保存方法(=料金)を変える仕組み」
- S3 Standardは頻繁にアクセスするデータ向け、Intelligent-Tieringは利用頻度が分からないデータ向け
- Glacier系(Instant Retrieval/Flexible Retrieval/Deep Archive)は、取り出しに時間がかかるほど安くなる
- ライフサイクルルールを使うと、経過日数に応じて自動でストレージクラスを移行できる
前回のイメージはこんな感じでした。
アップロード
│
▼ 30日後
Standard-IA
│
▼ 90日後
Glacier
│
▼ 365日後
Deep Archive
この基本を踏まえて、今回は「最低保存期間」「最小課金サイズ」「取り出しの仕組み」「新しいストレージクラス」を中心に深掘りしていきます。
「最低保存期間」と「最小課金サイズ」を正確に理解する
前回「Glacierは早期削除すると追加料金が発生する場合がある」とだけ書きましたが、公式ドキュメントの比較表で、クラスごとの具体的な日数・サイズが定義されていることが分かりました。
| ストレージクラス | 最低保存期間 | 最小課金オブジェクトサイズ |
|---|---|---|
| S3 Standard | なし | なし |
| S3 Intelligent-Tiering | なし | なし(128KB未満は常にFrequent Accessに保存) |
| S3 Standard-IA | 30日 | 128KB |
| S3 One Zone-IA | 30日 | 128KB |
| S3 Glacier Instant Retrieval | 90日 | 128KB |
| S3 Glacier Flexible Retrieval | 90日 | ※メタデータとして40KB相当が別途課金 |
| S3 Glacier Deep Archive | 180日 | ※メタデータとして40KB相当が別途課金 |
ポイントは2つあります。
1つ目は「最小課金オブジェクトサイズ」です。例えばS3 Standard-IAでは、実際のファイルサイズが128KB未満でも、課金上は128KBとして計算されます。つまり、数KB程度の小さいファイルを大量にStandard-IAへ移すと、実サイズよりもかなり割高になる可能性がある、ということです。
2つ目は「最低保存期間」です。30日・90日・180日という期間より前にオブジェクトを削除・上書き・別クラスへ移行すると、残りの期間分の保存料金が日割りで追加課金されます。前回「早期削除すると追加料金が発生する場合がある」と書いた内容の、具体的な日数がここで明確になりました。
Deep Archiveへ移行(180日ルール開始)
│
▼ 50日で削除した場合
実際の課金 = 50日分の通常課金 + 残り130日分の日割り追加課金
小さいログファイルをそのままライフサイクルルールでGlacierへ大量に移す、といった運用は、最小課金サイズの影響でむしろコストが増える可能性があるため、「まとめてアーカイブしてから移行する」といった工夫が必要になりそうだと感じました。
Glacier系は「取り出す前にRestoreが必要」で追加のメタデータ課金もある
前回はGlacier系について「取得に数分〜12時間以上かかる」というスピード感だけを書いていましたが、実はS3 Glacier Flexible RetrievalとS3 Glacier Deep Archiveのオブジェクトは、そのままでは読み出せない「アーカイブ状態」になっている、という仕組みまでは説明できていませんでした。
これらのクラスのオブジェクトを読み出すには、まずRestoreObjectというAPIでリストア(復元)をリクエストし、指定した取り出し階層(Expedited/Standard/Bulkなど)に応じた時間だけ待ってから、ようやくアクセスできるようになります。S3 Glacier Instant Retrievalだけは例外で、アーカイブ状態にならずミリ秒単位でそのままアクセスできる、という違いも今回整理できました。
S3 Glacier Instant Retrieval
→ そのままミリ秒アクセス可能
S3 Glacier Flexible Retrieval / Deep Archive
→ RestoreObjectでリストア要求
│
▼ 取り出し階層に応じて待機
→ 一時的にアクセス可能な状態になる
さらに、S3 Glacier Flexible RetrievalとDeep Archiveでは、オブジェクトごとに40KB相当のメタデータオーバーヘッドが発生し、そのうち32KBはそのストレージクラスの単価で、8KBはS3 Standardの単価で別途課金される、という点も前回はまったく触れていませんでした。オブジェクト自体が小さい場合、この40KBのメタデータ課金が無視できない割合を占めることになりそうです。
S3 Intelligent-Tieringのアーカイブ階層と監視課金
前回「個人的に最もおすすめ」と紹介したIntelligent-Tieringについても、実は5段階のアクセス階層で構成されていることが分かりました。
| 階層 | 移行条件 | 特徴 |
|---|---|---|
| Frequent Access | アップロード直後のデフォルト | 通常のStandard相当 |
| Infrequent Access | 30日連続でアクセスなし | Standard-IA相当のコスト |
| Archive Instant Access | 90日連続でアクセスなし | Glacier Instant Retrieval相当(自動・常時有効) |
| Archive Access(オプション) | 90日連続でアクセスなし(有効化した場合) | Glacier Flexible Retrieval相当。手動での有効化が必要 |
| Deep Archive Access(オプション) | 180日連続でアクセスなし(有効化した場合) | Glacier Deep Archive相当。手動での有効化が必要 |
前回「AWSが自動で最適な階層へ移動してくれる」と書いた部分は、Frequent/Infrequent/Archive Instant Accessの3階層までは自動で有効になっていますが、さらに安いArchive AccessとDeep Archive Accessの2階層は、バケット側で明示的に有効化しないと使われない、というオプトイン方式になっている点は今回新たに分かった部分でした。またこの2つのオプション階層を有効にすると、取り出し時にRestoreが必要になる点もGlacier系と同様です。
なお、Intelligent-Tieringには「オブジェクトごとの月額監視・自動化料金」がかかりますが、128KB未満の小さいオブジェクトは監視対象外で常にFrequent Accessに保存される、という仕様もあり、ここでも「小さいファイルの扱い」が他のクラスと同様に特別ルールになっていることが分かりました。
新顔のS3 Express One Zoneも調べてみた
前回の記事を書いた時点ではなかった(または触れていなかった)ストレージクラスとして、「S3 Express One Zone」という選択肢があることも今回知りました。
これは、単一のアベイラビリティゾーンに特化して1桁ミリ秒(シングルディジットミリ秒)のアクセス速度を実現する、高性能向けのストレージクラスです。公式情報によると、データアクセス速度はS3 Standardと比べて最大10倍速く、リクエストコストは最大80%低いとされています。
| 項目 | S3 Standard | S3 Express One Zone |
|---|---|---|
| アクセス速度 | ミリ秒単位 | 1桁ミリ秒単位(より高速) |
| 保存先AZ | 3つ以上のAZに分散 | 単一AZ |
| 主な用途 | 汎用的な頻繁アクセス | レイテンシに厳しいアプリケーション |
前回紹介した7つのクラスはいずれも「コストを下げるために低頻度アクセス・アーカイブへ寄せていく」という方向性でしたが、S3 Express One Zoneは逆に「速度を最優先する」という毛色の違うクラスです。機械学習の学習データ読み込みや、リアルタイム性の高い分析基盤など、コストよりも速度が重要なワークロード向けの選択肢として、今後使う機会があれば試してみたいと思いました。
ライフサイクルルールを組む時の注意点
前回紹介したライフサイクルルールの例(30日でStandard-IA→90日でGlacier→365日でDeep Archive)を、今回調べた最低保存期間のルールと照らし合わせてみると、実はこの日数設定自体は各クラスの最低保存期間(30日・90日・180日)を満たしているため問題ない移行パターンだと確認できました。一方で、次のような組み合わせは避けた方が良さそうです。
- Standard-IA(最低30日)へ移行してから30日未満でGlacierへ再移行する設定
- 小さいファイル(128KB未満)が大量にあるバケットに対して、一律でIA系・Glacier系への移行ルールを適用する設定
前者は移行そのものが「早期の削除・変更」とみなされて日割り課金の対象になり、後者は最小課金サイズの影響でコストが増える可能性があります。ライフサイクルルールを設計する際は、日数だけでなく「対象オブジェクトの典型的なサイズ」も合わせて確認した方が良い、というのが今回の実務上の学びでした。
実際のライフサイクルルールはS3コンソールからも設定できますが、JSONで書くとこんなイメージです。最低保存期間を満たすように、各移行先の日数に余裕を持たせています。
{
"Rules": [
{
"ID": "archive-old-logs",
"Filter": { "Prefix": "logs/" },
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 120, "StorageClass": "GLACIER" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
],
"Expiration": { "Days": 1825 }
}
]
}
ポイントは、Standard-IAへの移行(30日)からGlacierへの移行(120日)まで90日以上の間隔を空けている点です。前回紹介した「90日後にGlacierへ」という設定でも問題はありませんが、Standard-IAの最低保存期間(30日)ぎりぎりで次のクラスへ移行するような詰め込んだ設定にすると、意図せず日割り課金が発生するケースがあるため、余裕を持たせた日数設計にしておくと安心そうです。
実務で気をつけたいポイント
ここまで調べてきて、実務で意識しておきたいと感じたポイントを整理します。
- Standard-IA/One Zone-IAは128KB未満のオブジェクトでも128KB分課金される
- Glacier Flexible RetrievalとDeep Archiveは、オブジェクトごとに40KB相当のメタデータ課金が別途発生する
- 最低保存期間(30日/90日/180日)より前に削除・移行すると、残り期間分が日割りで追加課金される
- Intelligent-TieringのArchive Access・Deep Archive Access階層は自動ではなく明示的な有効化が必要
- 小さいファイルが多いバケットは、個々にIA系・Glacier系へ移行するより、まとめてアーカイブしてから移行する方がコスト効率が良い場合がある
個人的に調べてみて思ったこと
前回は「安いクラスに移せば移すほどお得」という単純な理解でしたが、今回調べてみて、最低保存期間や最小課金サイズといった「細かいルール」を無視すると、かえってコストが増えるケースがあることがよく分かりました。特に小さいファイルを大量に扱うようなワークロードでは、単純にライフサイクルルールを設定するだけでなく、事前にオブジェクトサイズの分布を把握しておく必要がありそうです。
また、S3 Express One Zoneのような「コストではなく速度に振り切ったクラス」の存在を知れたのも収穫でした。ストレージクラス選びは「安さの順番に並べて選ぶ」だけでなく、「速度が必要な場面では専用のクラスを検討する」という視点も持っておきたいと感じました。
まとめ
今回はAmazon S3のストレージクラスについて、前回踏み込めていなかった「最低保存期間」「最小課金サイズ」「Glacierの取り出しの仕組み」「新しいストレージクラス」を中心にもう一歩深掘りしてみました。
- Standard-IA/One Zone-IAは30日、Glacier Instant Retrieval/Flexible Retrievalは90日、Deep Archiveは180日の最低保存期間があり、それより前に削除・移行すると日割りで追加課金される
- IA系・Glacier系は128KB未満のオブジェクトでも128KB分課金される最小課金サイズのルールがある
- Glacier Flexible RetrievalとDeep Archiveは、取り出し前にRestoreが必要で、40KB相当のメタデータ課金も発生する
- Intelligent-Tieringのアーカイブ階層は自動3段階+オプトインの2段階で構成されている
- S3 Express One Zoneは速度優先の新しいストレージクラスで、他のクラスとは方向性が異なる
ストレージクラスは「何を選ぶか」だけでなく「どう運用するか」まで含めて設計する必要がある、というのが今回の一番の学びでした。実際にオブジェクトサイズの分布を確認しながら、ライフサイクルルールを見直してみようと思います。
最後まで読んでいただき、ありがとうございました!
参考
- Understanding Amazon S3 storage classes(最低保存期間・最小課金サイズの比較表)
- Understanding S3 Glacier storage classes for long-term data storage(Restoreの要否、Instant Retrievalの特性)
- Restoring archived objects(RestoreObjectと取り出し階層)
- S3 Intelligent-Tiering overview(5階層の移行日数とオプトインの仕組み)
- Amazon S3 Express One Zone(アクセス速度・コストの比較)
- Managing your storage lifecycle(ライフサイクルルールの設定方法)