EBS スナップショットのアーカイブが料金削減に繋がらない
状況
スナップショット ①:EBS ボリューム A のフルスナップショット
スナップショット ②:スナップショット ① の後に作成された、EBS ボリューム A の後続スナップショット
確認したいこと
月の途中で 1 つの EBS スナップショット ① をアーカイブに変更したところ、そのスナップショット ① の料金は削減されましたが、別のスナップショット ② の料金が急激に上昇しました。
スナップショットは作成時点でボリュームに書き込まれていたデータをコピーするものであり、スナップショット作成後に単一のスナップショット ID においてデータ量が変わることはないため、料金が増加するケースは一般的ではないと考えています。
この料金増加の原因を教えてください。
回答
スナップショット ② は、フルスナップショット ① の未変更データを参照していましたが、① をアーカイブ化したため、② が独立して全データを保持する必要が生じ、その結果スナップショット ② のコストが増加しました。
前提知識
EBS スナップショットは、初回にフルスナップショットとしてバックアップが作成されます。
その後続のスナップショットは、変更があったブロックのみを増分スナップショットとして作成します。
そのため、増分スナップショットにおいて変更が無かった部分は、初回のフルスナップショットを参照している状態となります。[1]
今回のケース
フルスナップショットである ① をアーカイブに変更したため、② が参照していたスナップショットにアクセスできなくなり、スナップショット ② に ① で参照していたデータがすべて引き継がれた結果、月の途中でスナップショット ② のコストが増加しました。
図で表すと以下のとおりです。
【アーカイブ前】
┌─────────────┐
│スナップ ① │ ← 100GB のデータ
│(最初の完全版) │
└─────────────┘
↑ 参照
┌─────────────┐
│スナップ② │ ← 10GB の変更分のみ保存
│(増分版) │ (変更の無い 90GB は ① を参照)
└─────────────┘
料金: ①(100GB) + ②(10GB) = 合計 110GB 分に標準階層の料金が発生
【アーカイブ後】
┌─────────────┐
│スナップ① │ ← 100GB のデータをアーカイブ階層に移動
│(アーカイブ) │
└─────────────┘
✗ 参照不可 (② から参照できなくなる)
┌──────────────┐
│スナップ② │ ← 増分 10GB に加えて ① の 100GB 全体を保持する必要が発生
│(増分 → 完全版) │
└──────────────┘
料金:① (100GB) にはアーカイブ階層の料金が発生
② (110GB) には標準階層の料金が発生
まとめ
AWS ドキュメント [2] に記載されているとおり、最初のスナップショットをアーカイブに変更した場合、そのデータは後続のスナップショットに引き継がれる仕様となっています。
そのため、ストレージコストの削減に繋がらず、かえってコストが増加する可能性があることをご留意いただければと思います。
参考情報
[1] Amazon EBSスナップショットの課金対象ブロックサイズの求め方 ~ EBS direct APIへの誘い ~ | DevelopersIO
「状態1(State 1)」 のように、初回のフルスナップショットでは、EBSボリューム単位ではなく、利用しているデータ全体がバックアップされます。
この時点で、フルスナップショット(Snap A)の10GiB分が課金対象であり、EBSボリュームの未使用分の5GiBは課金されません。
「状態2(State 2)」 のように、利用しているブロックで変更された後でスナップショットを取ると、変更のなかったブロックについてはフルスナップショットで取得したものを参照し、変更のあったブロックを追加でバックアップします。
この時点で、フルスナップショット(Snap A)取得時から変更のなかった6GiB分と2回目のスナップショット(Snap B)で変更の発生した4GiB分が課金対象です。
[2] 単一ボリュームの増分スナップショットをアーカイブする
ーー
標準階層のストレージコストを削減するためにスナップショットをアーカイブする場合は、増分スナップショットのセットに最初のスナップショットをアーカイブしないでください。これらのスナップショットは、スナップショット系統内の後続のスナップショットによって参照されます。ほとんどの場合、これらのスナップショットをアーカイブしても、ストレージコストは削減されません。
ーー
後続のスナップショットで参照されるデータを含むスナップショットを系統でアーカイブすると、参照されるデータに関連付けられているデータストレージコストとストレージコストは、系統内の後続のスナップショットに割り当てられます。この場合、スナップショットをアーカイブしても、データストレージやストレージのコストは削減されません。例えば、上の図でスナップ B をアーカイブする場合、その 4 GiB のデータはスナップ C に帰属しています。この場合、アーカイブ階層のスナップ B のフルバージョンのストレージコストが発生し、標準階層のストレージコストは変わらないため、全体のストレージコストが増加します。
ーー
[3] ハイパフォーマンスブロックストレージの料金 – Amazon EBS の料金 – Amazon Web Services