Amazon Auroraをバックアップから復元した時にIaCとの矛盾が起きる現象への対策

記事タイトルとURLをコピーする

こんにちは。
アプリケーションサービス部、DevOps担当の兼安です。
今回は、バックアップからの復元でIaCとの矛盾が起きた場合の対策の紹介です。

はじめに

AWSにおいてデータベースのバックアップからの復元とは、復旧ポイントから元のクラスターとは別のものを作るところから始まります。

この時、復元したクラスターは最初にIaCで作ったクラスターとは別のものなので、IaCとの矛盾が発生します。
このまま矛盾を放置すると、その後IaCやCI/CDが回らなくなります。
対策方法はいくつか考えられますが、今回はそのうち2つについて述べます。

本記事のターゲット

本記事はAWSにおけるデータベース、バックアップと復元運用、IaCなどの基礎知識をすでにお持ちの方を対象としています。

復元によりできたIaCとの矛盾を解消する2つの方法

今回の記事ではAmazon Aurora Serverless v2を例にし、バックアップはAWS Backupで取得、IaCはAWS CloudFormationとAWS CDKの2種類として紹介します。
本記事では以降、Amazon Aurora Serverless v2をAurora、AWS CloudFormationをCloudFormation、AWS CDKをCDKと記載します。
復元の理由はデータの不整合と仮定します。

復元によりできたIaCとの矛盾を解消する方法はいくつかありますが、私が有力と考えるのは以下の2つです。

  • 方法1: 元のAuroraクラスターをそのまま使用。復元でできた新しいAuroraクラスターから元のAuroraクラスターにデータを入れ直す
  • 方法2: バックアップからAuroraクラスターを作り直し。その後IaCとの矛盾を解消して整合性を取る

方法1

flowchart TD
    A1[バックアップから新しいAuroraクラスターを作成] --> A2[新しいAuroraクラスターから元のAuroraクラスターにデータを入れ直す]
    A2 --> A3[新しいAuroraクラスターを削除]
    A3 --> A4[完了]

方法2

flowchart TD
    B1[元のAuroraクラスターを削除] --> B2[バックアップからAuroraクラスターを作り直し]
    B2 --> B3[ドリフトの検出]
    B3 --> B4[変更セットでドリフト解消]
    B4 --> B5[完了]

方法1はデータの入れ直し作業が発生しますが、確実です。
方法2はデータの入れ直し作業は発生しませんが、ドリフトの検出や変更セットの作成などの手順が必要になります。

方法1はデータの入れ直しが完了するまで復旧できないのは厳しいので、実際には接続先を一旦新しいAuroraクラスターに切り替えてから、後日データの入れ直しを行って接続先を元のAuroraクラスターに戻すという形になると思います。

flowchart TD
    A1[バックアップから新しいAuroraクラスターを作成] --> A2[接続先を新しいAuroraクラスターに切り替える]
    A2 --> A2a[暫定運用]
    A2a --> A3[新しいAuroraクラスターから元のAuroraクラスターにデータを入れ直す]
    A3 --> A4[接続先を元のAuroraクラスターに切り替える]
    A4 --> A5[新しいAuroraクラスターを削除]
    A5 --> A6[完了]

方法1は比較的わかりやすい方法なので、方法2について述べていきます。

バックアップからAuroraクラスターを作り直し。その後IaCとの矛盾を解消して整合性を取る

元のAuroraクラスターを削除

まず既存のAuroraクラスターを削除します。
削除保護がある場合は、それを解除することを忘れないでください。
念のため、Auroraクラスターとインスタンスの識別子を控えておいてください。

バックアップからAuroraクラスターを作り直し

AWS Backupの画面で復旧ポイントを開きます。
開き方は以下の通りです。

  • AWSマネジメントコンソールのAWS Backup
    • ナビゲーションペイン(左側メニュー)の「ジョブ」
      • ジョブ一覧からAuroraのバックアップジョブのIDをクリック
        • バックアップジョブ詳細の「復旧ポイント ARN」をクリック

復旧ポイントの画面の「復元」をクリックします。

復旧ポイントの画面の「復元」をクリック

まず、キャパシティタイプを選択します。
私の場合、Aurora Serverless v2を選択したかったのですが、ここでは選択できませんでした。
一旦プロビジョニング済設定で復元し、復元後にドリフトの検出→変更セットの実行でAurora Serverless v2に戻しました。

キャパシティタイプの選択

識別子に控えておいた元のAuroraクラスターの識別子を入力します。

控えておいた元のAuroraクラスターの識別子を入力

この他、VPCやセキュリティグループの設定情報などを入力して「バックアップを復元」をクリックすると、一定時間後にAuroraクラスターが復元します。

Auroraクラスターにインスタンスを追加

Auroraの場合、AWS Backupから復元できるのはクラスターそのもののみです。
この段階ではアプリケーションなどから接続できません。
ここから、Auroraのインスタンスを追加します。
データそのものは、復元したクラスターのストレージ部分に含まれているので、インスタンスを追加すればまた接続できるようになります。

インスタンスの追加はコマンドで行います。
以下のコマンドをCloudShellなどから実行します。

aws rds create-db-instance \
  --db-instance-identifier <元のAuroraインスタンスの識別子> \
  --db-cluster-identifier <元のAuroraクラスターの識別子> \
  --engine aurora-postgresql \
  --db-instance-class db.t4g.medium

参考:AWS Backup デベロッパーガイド Amazon Aurora クラスターの復元

この時点でAuroraにデータベース接続ができるようになります。
復旧ポイントからの復元は諸々の設定を再現するので、アプリケーションなどからの接続は問題なくできるはずですが、この時点で疎通確認を忘れないようにしましょう。

ドリフトの検出

AuroraをCloudFormationで作っている場合は、CloudFormationのスタックの画面で「スタックアクション」の「ドリフトの検出」をクリックします。

「ドリフトの検出」をクリック

AuroraをCDKで作っている場合は、CDKのコマンドから行います。

cdk drift

docs.aws.amazon.com

CDKも最終的にはCloudFormationのスタックができるので、スタックの画面で「ドリフトの検出」をクリックしてもドリフトの検出はできます。
どちらでも結果は同じです。

変更セットでドリフト解消

スタックの画面での「ドリフトの検出」、またはcdk driftを実行した後、少し経つとドリフトの検出が終わるので、CloudFormationのスタックの画面で「スタックアクション」の「ドリフト結果を表示」をクリックします。

「ドリフト結果を表示」をクリック

ドリフトステータスが表示されます。
Auroraのクラスターとインスタンスが「MODIFIED」になっているのが確認できます。
「変更セットを作成」のボタンが表示されているはずなので、これをクリックします。
「変更セットを作成」のボタンが表示されない場合は、少し時間をおいて画面を更新してみてください。

ドリフトの検出の結果

変更セット作成のためのウィザードが始まります。
特に変更せずにそのまま進めます。
途中でパラメータの指定などを問われますが、この時点では特に変更する必要はないはずです。

変更セット作成のためのウィザード

変更セットができたらこれを実行します。

変更セットの確認画面

スタックの更新が始まり、完了となったのを確認したら、もう一度「スタックアクション」の「ドリフトの検出」、それから「ドリフト結果を表示」をクリックします。
今度は全てのリソースのステータスが「IN SYNC」になっているはずです。

変更セット実行後のドリフトの検出の結果

これでドリフトは解消です。
私の場合、復元時はAurora Serverless v2ではなくプロビジョンドになってしまいましたが、この変更セットの実行でAurora Serverless v2に戻りました。

以上で同期が取れた状態になったので、以降CDKやCloudFormationテンプレートを更新してスタックの更新をかけても正しく更新できるはずです。

変更セットの作成に失敗する場合

ドリフトはドリフトの検出結果から変更セットの作成と実行をすると解消できますが、IaCと復元したAuroraクラスターの乖離が大きい場合、変更セットの作成に失敗することがあります。

復元時にDBサブネットグループをIaCの指定と別にしたり、元からIaCとAuroraクラスターに差があったりすると、この現象をよく見かけます。
この場合、ドリフトの検出の結果画面で差分を見ながら、手動による設定変更とドリフトの検出を繰り返すと、いずれは「IN SYNC」に持っていけます。
(全て手動で直さないと解消しない場合もあります)
変更セットだけがドリフトの解消方法ではありません。
手動で解消しても「IN SYNC」になれば問題はありません。

ただし、Terraformに関してはCDK・CloudFormationとは仕様が違うので、この話は適用されません。

AWS Backupの復旧ポイントからのAuroraクラスターの復元手順の補足

今回、Auroraクラスターの復元をAWS Backupの復旧ポイントから行い、クラスター復元後にインスタンス追加するという手段を取りました。
AWSマネジメントコンソールのAurora and RDSの「スナップショット」から復元する場合は、手順がこれとは異なります。

この手順の違いはこちらの記事にまとまっています。

persol-serverworks.co.jp

兼安 聡(執筆記事の一覧)

アプリケーションサービス部 DS3課所属
2025 Japan AWS Top Engineers (AI/ML Data Engineer)
2025 Japan AWS All Certifications Engineers
2025 AWS Community Builders
Certified ScrumMaster
PMP
広島在住です。今日も明日も修行中です。
X(旧Twitter)