導入
同じS3でも、「よくアクセスするデータ」と「ほとんど開かない古いログ」を同じ料金で保存するのはもったいない話です。S3には、アクセス頻度に応じて料金を最適化できるストレージクラスが用意されています。
説明
S3には主に次のストレージクラスがあります。アクセス頻度が低い(=取り出す機会が少ない)ものほど、保存コストは安くなります。
| ストレージクラス | 特徴 | 向いている用途 |
|---|---|---|
| S3 Standard | 標準。高い可用性・耐久性、取り出しも高速 | 頻繁にアクセスするデータ |
| S3 Standard-IA | 低頻度アクセス用。保存コストは安いが取り出し時に料金 | たまにしか見ないが、すぐ取り出したいデータ |
| S3 One Zone-IA | Standard-IAと似るが単一AZにのみ保存し、さらに割安 | 再作成可能な低頻度データ |
| S3 Intelligent-Tiering | アクセスパターンをAWSが監視し、自動で最適な階層へ移動 | アクセス頻度が読めないデータ |
| S3 Glacier Instant Retrieval | アーカイブ用。ミリ秒単位で取り出し可能 | ほぼ使わないが、たまに即座に見たいデータ |
| S3 Glacier Flexible Retrieval | アーカイブ用。取り出しに数分〜数時間 | 年に数回程度しか使わないデータ |
| S3 Glacier Deep Archive | 最安のアーカイブ。取り出しに約12時間 | 法令保存など、長期間ほぼ開かないデータ |
これらを手動で移動させるのは大変なので、ライフサイクルルールを設定して自動化します。「作成から30日経過したオブジェクトはStandard-IAへ」「180日経過したらGlacierへ」「1年経過したら削除」といったルールを決めておけば、S3が自動的にオブジェクトを安いクラスへ移動・削除してくれます。
graph LR a["S3 Standard\n(作成直後)"] -- 30日後 --> b["S3 Standard-IA"] b -- 180日後 --> c["S3 Glacier\nFlexible Retrieval"] c -- 365日後 --> d["削除"]
{
"Rules": [
{
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 180, "StorageClass": "GLACIER" }
],
"Expiration": { "Days": 365 }
}
]
}
具体例
サーバーのアクセスログを考えます。ログは「作られた直後はよく調べるが、時間が経つほど開かなくなる」典型的なデータです。
ある会社では、毎日大量に溜まるログをすべて S3 Standard に置き続けた結果、保存料金がじわじわ膨らんでいました。そこで、ログの“寿命”に合わせたライフサイクルルールを設定しました。
- 0〜30日 … 障害調査でよく見るので S3 Standard(取り出し高速)
- 30〜180日 … たまにしか見ないので Standard-IA へ自動移動(保存料が安い)
- 180日〜1年 … ほぼ見ないので Glacier へ(さらに安い)
- 1年経過 … 保存義務が切れるので自動削除
人手で移動させる必要はなく、ルールに沿ってS3が勝手に安いクラスへ落としていきます。「よく使う今は高速なクラス、古くなったら安いクラス、不要になったら削除」——データの一生に合わせて置き場所を変えるのがコツです。
読んでみよう
「アクセス頻度が低いクラスほど保存料金は安いが、取り出しには時間や料金がかかる」というトレードオフと、それを自動化するライフサイクルルールの役割をセットで覚えましょう。