kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

RDS Auroraの自動バックアップ、スナップショットのおぼえがき

自動バックアップとスナップショットの違い

  • スナップショット: フルバックアップ。手動のみ。保存期間無限
  • 自動バックアップ: 差分バックアップ。1日1回自動。保存期間は1〜35日。任意の日時で復元が可能(PITR)

どちらもクラスタ単位。復元では新しいクラスタが生成される

自動バックアップ

概要

  • Auroraの場合は必ず適用される
  • バックアップウィンドウの時間に1日1回バックアップが取られる
  • クラスタ単位でバックアップが取られる
  • 保持期間は 1〜35 日の間で設定可能。それ以上はバックアップできない
    • その場合はスナップショットを使え、ということらしい
  • AWS Backupでの「継続的なバックアップ」をAuroraでは「自動バックアップ」と読んでいる(らしい

仕組み

  • トランザクションログとシステムスナップショットをS3に保存する
    • このS3にはユーザはアクセスできない
    • システムスナップショットとは、おそらく、RDSの各種設定と、ベースとなるボリュームのスナップショットと思われる
  • 差分バックアップ
    • ボリュームそのものではなく、トランザクションログをバックアップしていく仕組み
    • そのため、バックアップに掛かる時間が短い
  • ポイントインタイムリカバリ(PITR)
    • トランザクションログがあるため、バックアップがあれば、任意の時間の状態に復元することが可能

料金

  • 1日分のバックアップは無料
  • 保存料金は、東京リージョンでは 2024/04/21 時点で、毎月 USD 0.023/GB
  • どれだけ使用しているかは、BackupRetentionPeriodStorageUsed の値で確認できる
    • ここには1日分のバックアップのデータ量は入っていない様子
  • 上記のように、差分でバックアップがとられるため、ボリューム量と、バックアップ量は相関が無い
    • 変更が多ければそれだけ料金が掛かる
    • ただし、 自動バックアップの合計請求使用量が、保持期間中の累積クラスターボリュームサイズを超えることはない とのこと

自動バックアップの合計請求使用量が、保持期間中の累積クラスターボリュームサイズを超えることはありません。例えば、保持期間が 7 日間で、クラスターボリュームが毎日 100 GB の場合、請求される自動バックアップの使用量は 700 GB (100 GB * 7) を超えることはありません。

docs.aws.amazon.com

復元

  • RDSの管理画面から「バックアップ -> 自動バックアップ -> アクション -> 特定の時点への復元」で復元
  • 新しいクラスタとして復元されるので、参照しているアプリのエンドポイントを変更する必要あり

マルチリージョンでのバックアップ、復元

  • AWS Backupで設定すれば、複数リージョンにPITAできるバックアップを取ることが可能
  • ただし、各リージョンへの転送料と、バックアップ保持のコストが掛かる
    • 転送量が結構高い ( USD 0.09/GB )
  • 他リージョンで復元する場合、元リージョンで使用していた、パラメータグループやオプショングループが必要
    • Terraformなどで残しておく必要あり

スナップショット

概要

  • クラスタ単位でスナップショットが取られる
  • 保持期間は特に定められていない
    • ただし、サポートされていないDBバージョンのスナップショットは復元できない。長期間保持するときは注意
  • ポイントインタイムリカバリは使えない
    • 自動バックアップの「仕組み」で書いた システムスナップショット を手動で取得するサービス。という理解
    • なので、1スナップショットで掛かるデータ量は、DBのボリュームのサイズと同一

料金

  • 保存料金は、東京リージョンでは 2024/04/21 時点で、毎月 USD 0.023/GB
  • バックアップ保持期間の間は無料。それを過ぎると課金される
    • バックアップ期間が7日あるならば、スナップショットを取ってから7日間は無料。8日目から課金される
  • どれだけ使用しているかは、SnapshotStorageUsed の値で確認できる
    • バックアップ保持期間内のスナップショットのデータ量はここに含まれないとのこと。親切!!

復元

  • RDSの管理画面から「スナップショット -> 手動スナップショット -> アクション -> スナップショットを復元」
  • バックアップと同じく、新しいクラスタとして復元されるので、参照しているアプリのエンドポイントを変更する必要あり
  • サポートされていないDBバージョンのスナップショットは復元できない

マルチリージョンでのスナップショット、復元

  • 他リージョンへのコピー機能があるので、それを使う

docs.aws.amazon.com

  • こちらも、各リージョンへの転送料と、バックアップ保持のコストが掛かる
    • 転送量が結構高い ( USD 0.09/GB )
  • こちらも、他リージョンで復元する場合、元リージョンで使用していた、パラメータグループやオプショングループが必要
    • Terraformなどで残しておく必要あり

その他

  • 長期間保存する場合、S3エクスポートを推奨している
  • ただし、 S3にエクスポートしたデータからクラスタの復元は困難
    • Apache Parquet という形式で保存される。Athenaなどで分析する時に使うフォーマットらしい
    • AWS Glueとかを使えばAuroraに復元できなくなはないらしい

tech-blog.cloud-config.jp

感想

  • 自動バックアップは、スナップショットにトランザクションログを乗せているという認識
    • 二重課金になるので、自動バックアップの期間内はスナップショットは無料なのでは?

参考

docs.aws.amazon.com

docs.aws.amazon.com

aws.amazon.com

dev.classmethod.jp

dev.classmethod.jp

docs.aws.amazon.com