Amazon Aurora のバックアップ 周りの機能を調べてみた
概要
タイトルの通り、Amazon Aurora を本番環境で運用していく可能性がでてきたのでバックアップまわりの機能について調査してみました。
前提
Amazon Aurora とは?
- Amazon RDS を使ったデータベースエンジンです。
- RDS を使ってクラウド上にデータベースを作る際に、MySQL, PostgreSQL などと同じように Aurora の DB エンジンを選択することで使用できます。
- 本記事では触れませんが、他のデータベースエンジンとはアーキテクチャが違ったり Aurora にしかない特徴などがあったりするのでそれらは事前に知っておく必要があります。
バックアップ、バックトラック、Snapshot Export の 3 つを説明と料金体系にそれぞれまとめてみました。
バックアップ
説明
- 個々のデータベースだけでなく、 DB クラスター全体に対してバックアップが適応されるようです。増分バックアップを継続的に行うのですばやく復元できるというメリットがあります。
- デフォルトのバックアップ保持期間は 1 日で、1 ~ 35 日の任意の保持期間を設定できます。
- バックアップ保持期間を超えたバックアップを保持する場合は、クラスターボリュームの中にデータのスナップショットを作成する必要があります。
- ちなみに Aurora の自動バックアップを無効にはできません。
料金体系
最近変更になったようです。
Aurora DB クラスターの Aurora データベースストレージ合計の 100% を超えるまで、バックアップストレージに対する追加料金は発生しません。バックアップ保持期間が 1 日で、保持期間を超えたスナップショットがない場合は、バックアップストレージに対する追加料金もかかりません。
バックアップストレージとは、リージョン毎に割り当てられており、その合計容量は該当するリージョン全てのバックアップに対するストレージの合計を指します。
注意点としては DB クラスターの削除後に保存するバックアップストレージ、およびスナップショットには、GB あたり月額 0.021USD の料金がかかります。
バックトラック
説明
- Aurora 独自の機能 1 つです。
- バックアップすることなく、最大で 24 時間前まで DB クラスターを巻き戻すことができる機能です。
- 間違えて
DROP table users;
やDELETE from users;
をしてしまった際に戻すことが可能です。 - また、戻すだけでなく 3 時間戻して 2 時間進めるということも可能です。
- 間違えて
AWS は公式でバックアップよりバックトラックの方が優れていると謳っており、その理由は下記のような利点が挙げられます。
簡単にエラーを取り消すことができます。WHERE 句なしの DELETE などの破壊的なアクションを間違えて実行した場合、サ>ービスの中断を最小限に抑えながら、破壊的なアクション以前の時点まで DB クラスターをバックトラックできます。
DB クラスターのバックトラックは迅速に実行できます。DB クラスターを特定の時点の状態に復元するには、新しい DB クラスターを起動し、これに対してバックアップデータや DB クラスターのスナップショットから復元する必要があり、時間がかかります。DB クラスターのバックトラックでは、新しい DB クラスターを作成することなく、DB クラスターを数分で巻き戻します。
以前のデータの変更を調べることができます。DB クラスターを前後に繰り返しバックトラックして、特定のデータの変更がどの時点で発生したかを確認できます。たとえば、DB クラスターを 3 時間前までバックトラックし、そこから 1 時間後まで戻すことができます。この場合、バックトラック時間は元の時間の 2 時間前となります。
料金体系
時間あたり変更レコード 0.014USD/100 万件の変更レコード。
Snapshot Export
説明
- RDS または Aurora スナップショット内のデータを Amazon S3 に Parquet 形式で自動エクスポートできる機能です。
- Aurora DB → S3 → Athena or EMR or SageMaker などのビッグデータとして分析に使う際活躍する機能なのではないかと勝手ながら解釈しています。
- MySQL dump よりもかなり容量は小さくできるので、コスト的には優秀ですが用途は分析向きな気がします。
料金体系
スナップショットサイズ 1 GB あたりの料金: 0.012USD。
まとめ
本番運用経験のない初心者としての結論を以下にまとめました。
- 運用での手違いや影響の大きい障害が発生した場合は、バックトラックを使用します。
- それ以外は、定期的に取得している dump ファイルよりデータを復旧します。
- 新しいクラスタにスナップショットから復旧するのでは時間がかかるためです。
上記のように結論つけてしまいましたが、正直分からないことだらけなので運用をしていく中で、よりベターな方法を見つけていくつもりです。
参考にさせていただいたサイト
Discussion