Restore to Point in Timeとは?
特定の時点への DB インスタンスの復元
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PIT.html
勘違いとは?
これでDBぶっ飛ばしちゃってもすぐ戻せるから安心だ、とか思ってた。
指定した時間にDBを一瞬で戻せるとか思ってた。
障害発生
本番運用中のものでなんかデータの整合性が合わない。
そもそものバグを除去するのも重要だが、とりあえずサービスを復旧したい
Restore to Point in Time を使えば元に戻せるよ
「RDSにはですねー、Restore to Point in Timeっていう便利なものがあるんですよー」とかドヤ顔で言ってた。
よし、じゃあ30分前に戻してくれって言われたので戻そうと思ったが、実際に今まで戻したことがなかったので初めて触った。
その時、頭をよぎったこと
- DBのdead timeはあるか
- 復元時間はどれぐらいなのか
- 復元中に実行されたINSERTとかはどうなるか
Restore to Point in Timeを実行する勇気がなかった。
実際の機能
翌日冷静になって機能を検証してみた。
Restore to Point in TimeはDBを復元して、新しいインスタンスとして立てれる機能であった。
つまり、インスタンスもEndpointも変わる。
直近のSnapshotを常に取ってくれる機能だった。
- DBのdead timeはあるか
- 別のインスタンスを立ち上げるので死なない
- 復元時間はどれぐらいなのか
- 普通にRDSを立てるのと同じなので20分ぐらい?
- 復元中に実行されたINSERTとかはどうなるか
- 元のDBに書き込まれ続ける
復旧するために対応すること
-
サービスのEndpointを変更する
- Route53のPrivate DNSで向き先変えたり、ソースコード変更したりが必要
-
復元中に書き込まれたデータを新しいDBに反映する
まとめ
障害時の復旧機能はちゃんとテストしておくこと
よく言われることだが、復旧手順は動作確認しなければ意味がない、ぶっつけ本番と同じ
障害時は冷静な判断がしにくいので思わぬミスに繋がる可能性がある