RDSインスタンスをスナップショットからリストアする際に、元のインスタンスと同じエンドポイントにする方法

RDS において識別子が同じならばエンドポイントも同じとなります。 RDSインスタンスをスナップショットからリストアする際にエンドポイントを変更したくない場合、既存のインスタンスの識別子を変更し、リストア時に元のインスタンスの識別子を指定します。
2020.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

アプリケーション側で設定している、接続先エンドポイントを変更したくない要件があります。

RDS インスタンスをスナップショットからリストアする対応が必要となりました。

リストアしたインスタンスのエンドポイントを、アプリケーション側で設定しているエンドポイントに指定する方法はありますか?

前提となる知識

RDS におけるエンドポイント名は以下の形式となります。

<インスタンス識別子>.<アカウントの特定の地域の固定識別子>.<リージョン名>.rds.amazonaws.com

例:東京リージョンに、インスタンス識別子 sample を作成した場合のエンドポイント

sample.abcd1234cdef.ap-northeast-1.rds.amazonaws.com

そのため、同一アカウント内、同一リージョン、同一識別子であれば、エンドポイントは同じとなります。

どう対応すればいいの?

スナップショットからリストアをする際に、既存のインスタンス識別子を指定することはできません。

しかしながら、既存のインスタンス識別子を変更することは可能です。

以下の手順を行うことで、スナップショットからリストアした RDS インスタンスで、既存のインスタンスのエンドポイントを指定することが可能です。

1. 使用中のRDSインスタンスの識別子を変更する

2.スナップショットからリストアする。リストア時に元のインスタンスの識別子を指定する

注意:RDS インスタンス識別子を変更してから、スナップショットのリストアまでの間、ダウンタイムが発生します。

やってみた

RDS インスタンスの識別子を sample としてインスタンスを作成します。

スナップショットを取得します。

スナップショットから、識別子 sample として復元を試みますが、すでに存在する識別子を指定しているため、復元できませんでした。

sample の名前を sample-namechanged へ変更します。(この時点でアプリケーションから RDS インスタンスへの接続ができなくなります。)

インスタンスのエンドポイント名は sample-namechanged.■■■■■■■■■■■■.ap-northeast-1.rds.amazonaws.com へ変わりました。

スナップショットから、識別子 sample として復元します。

復元され、インスタンスのエンドポイントはsample.■■■■■■■■■■■■.ap-northeast-1.rds.amazonaws.comとなりました。

参考資料

20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Amazon RDS)