はじめに
Amazon RDS のスナップショット一覧に、スナップショットの中身が実際に何バイトあるかを示す「フルスナップショットサイズ」が表示されるようになりました。
これまで表示されていたのは各スナップショットで新しく変わったブロックのサイズ(増分)だけでした。
今回、スナップショット全体のサイズがコンソールと DescribeDBSnapshots API で見られるようになっているというちょっとした小ネタです。
忙しい方に向けてAIで図解理解
フルスナップショットサイズとは
RDS のスナップショットは増分で保存されます。
2 回目以降は前回から変わったブロックだけを保存し、変わっていない部分は過去のスナップショットを参照します。
フルスナップショットサイズは、そのスナップショットが保存したブロックと、過去のスナップショットから参照しているブロックの合計です。
つまり「そのスナップショット単体で見たときのデータ量」で、何回目のスナップショットでも同じ基準で比べられます。
確認してみた
東京リージョンに最小で MySQL の DB インスタンス(db.t4g.micro、gp3 20 GiB、データ投入なし)を作り、変更を加えずに手動スナップショットを 2 回取ってから確認してみます。
コンソールで確認する
RDS コンソール の「スナップショット」の一覧で、一番右端の「フルスナップショットサイズ」列に表示されます。
CLI で確認する
describe-db-snapshots の出力に FullSnapshotSizeInBytes が追加されています。
割り当てストレージと並べて表示してみます。
aws rds describe-db-snapshots \
--query 'DBSnapshots[].{id:DBSnapshotIdentifier,alloc:AllocatedStorage,full:FullSnapshotSizeInBytes}' \
--output table
結果は次のとおりです。
割り当ての 20 GiB ではなく、実際に書き込まれた約 660 MiB が表示されました。 差分がほぼない 2 回目も 1 回目と同じ値なので、増分ではなく全体の量が表示されていることが分かります。
気をつけるポイント
- 増分サイズではない: 変更なしの 2 回目も同じ値でした(API リファレンス)。足し合わせても合計の保存量にはなりません
- 空でも 0 にはならない: データを入れていない MySQL でも約 630 MiB でした
- 復元時に容量は減らせない: フルスナップショットサイズが小さくても、復元先のストレージは元の割り当て(今回なら 20 GiB)より小さくできません(復元のドキュメント)
まとめ
- スナップショットに実際に入っているデータ量が、コンソールと API で確認できるようになりました
- 割り当てが大きすぎてストレージを縮小したいとき(Blue/Green デプロイなどで小さいインスタンスへ移す)に、実際の書き込み量を DB に接続せず確認できる最初の目安になりそうです



