EBS スナップショットは増分なのに全復元できる仕組み - ブロックレベルの差分管理の裏側

EBS スナップショットが増分バックアップでありながら任意のスナップショットから完全なボリュームを復元できる仕組みを、ブロックレベルの差分管理、S3 への保存構造、高速スナップショット復元の内部動作から解説します。

増分バックアップの基本概念

EBS スナップショットは増分バックアップです。最初のスナップショットはボリューム全体のコピーですが、2 回目以降のスナップショットは前回のスナップショットから変更されたブロックだけを保存します。100GB のボリュームで、スナップショット間に 5GB のデータが変更された場合、2 回目のスナップショットは 5GB 分のストレージしか消費しません。この増分方式により、スナップショットの作成時間とストレージコストが大幅に削減されます。しかし、ここで疑問が生じます。増分バックアップなら、復元時には最初のフルバックアップ + すべての増分を順番に適用する必要があるのではないか。従来のテープバックアップではそのとおりですが、EBS スナップショットは異なる仕組みで動作します。

ブロックレベルの参照構造

EBS スナップショットの内部構造は、ブロック (通常 512KB) 単位のポインタテーブルです。各スナップショットは、ボリュームのすべてのブロックに対するポインタを持っています。変更されたブロックは新しいデータとして保存され、変更されていないブロックは前のスナップショットのデータを参照します。具体例で説明します。ボリュームが 100 個のブロックで構成されているとします。スナップショット A は 100 個すべてのブロックのデータを保存します。スナップショット B は、ブロック 5 と 10 が変更されたため、この 2 つの新しいデータを保存し、残りの 98 個はスナップショット A のデータを参照します。スナップショット C は、ブロック 3 と 5 が変更されたため、この 2 つの新しいデータを保存し、残りはスナップショット B (またはその参照先の A) のデータを参照します。この構造により、どのスナップショットからでも、すべてのブロックのデータを辿ることができます。スナップショット C から復元する場合、ブロック 3 と 5 は C のデータ、ブロック 10 は B のデータ、残りは A のデータが使用されます。この参照の解決は EBS が内部で自動的に行うため、ユーザーは増分の順序を意識する必要がありません。

スナップショットの削除と参照の再構成

増分バックアップで最も混乱しやすいのが、中間のスナップショットを削除した場合の挙動です。スナップショット A → B → C がある状態で、B を削除するとどうなるでしょうか。従来の増分バックアップでは、B を削除すると C が復元不能になります。しかし、EBS スナップショットでは B を安全に削除できます。B を削除する際、B だけが保持しているブロック (B で変更され、C では変更されていないブロック) のデータが C に統合されます。つまり、C のポインタテーブルが更新され、B を参照していたポインタが A のデータまたは統合されたデータを直接参照するように変更されます。この統合処理は EBS が内部で自動的に行います。結果として、どのスナップショットを削除しても、残りのスナップショットからの復元に影響はありません。最初のスナップショット A を削除しても、B と C は正常に復元できます。A だけが保持していたブロックのデータが B に統合されるためです。

スナップショットの保存先と復元のレイテンシ

EBS スナップショットのデータは S3 に保存されます。ただし、ユーザーの S3 バケットではなく、AWS が管理する内部の S3 インフラに保存されるため、S3 コンソールからスナップショットのデータを直接見ることはできません。スナップショットからボリュームを復元する際、データは S3 から EBS のストレージインフラに転送されます。ここで重要なのは、復元は「遅延ロード」(Lazy Loading) で行われるという点です。ボリュームの作成は即座に完了しますが、すべてのブロックが S3 から転送されるまでには時間がかかります。まだ転送されていないブロックにアクセスすると、その時点で S3 からオンデマンドで取得されます。この遅延ロードにより、最初のアクセス時にレイテンシが増加する「ファーストタッチペナルティ」が発生します。本番環境でこのペナルティを回避するには、Fast Snapshot Restore (FSR) を有効にします。FSR は、スナップショットのデータを事前に EBS のストレージインフラにプリロードし、復元直後からフルパフォーマンスでアクセスできるようにします。FSR の料金は、有効化した AZ ごとに 1 時間あたり 0.75 USD です。

EBS Snapshots Archive - コスト削減の選択肢

2021 年に導入された EBS Snapshots Archive は、アクセス頻度の低いスナップショットを最大 75% 安いストレージ層に移動する機能です。通常のスナップショットは 1GB あたり月額 0.05 USD ですが、Archive 層は 0.0125 USD です。ただし、Archive 層からの復元には 24〜72 時間かかります。Archive は、コンプライアンス要件で長期保持が必要だが、頻繁にアクセスする必要がないスナップショットに適しています。たとえば、月次のフルバックアップを 7 年間保持する規制がある場合、直近 3 ヶ月分は通常のスナップショットとして保持し、それ以前のスナップショットは Archive に移動すれば、ストレージコストを大幅に削減できます。スナップショットのライフサイクル管理は、Amazon Data Lifecycle Manager (DLM) で自動化できます。DLM は、スケジュールに従ってスナップショットを自動作成し、保持期間に従って古いスナップショットを自動削除し、Archive 層への移動も自動化できます。EBS のバックアップ設計を体系的に学ぶには、専門書籍 (Amazon)が参考になります。