Auroraクローン機能を使ってコピーDBを作成する方法

この記事は弥生 Advent Calendar 2024の14日目の記事です。

qiita.com

はじめに

こんにちは。弥生でエンジニアをしている田邊です。

システムを運用するために本番環境のコピーDBを用意する場合、これまではスナップショットから復元する方法を利用していました。
あるタイミングでAuroraクローンの機能を知り、実際に業務目的で使ってみたところ、スナップショットから復元するより便利なポイントがあると感じました。

本記事では、Auroraクローンのメリットや作成手順について書いていきます(本記事に記載の内容は2024年12月現在の情報です)。
Auroraクローンについて気になっていた、使ってみたいが手順が分からないという方はぜひ参考にしてもらえればと思います。

※本記事ではAuroraクローンの機能にフォーカスして記載します。本番環境のコピーDB作成時に行うマスク処理等の個人情報管理上の作業は省略しています。

Auroraクローンとは

Auroraクローンとは、AWSのAmazon Auroraの機能の一つで、あるクラスターと同じデータページを共有する新しいクラスターを作成できる機能です。
要はクラスターをコピーすることができるものになります。
運用用のコピーDBを作成したり、データの分析等のクエリを本番環境に影響を与えずに実行したりする用途で使うことができます

Auroraクローンの大きな特徴はコピーオンライトプロトコルです。これはコスト効率良くクラスターのコピーを作る手法です。

Aurora DB クラスターでは、通常では以下のようにAuroraストレージボリュームのページにデータが格納されています。

Aurora クローン機能を使うと、新たにクラスターを作った上で、データページは共有された状態になります
これによって、同じデータを持つクラスターを複製することができます。

クローン作成後にクローン元のデータが変更された場合、その差分だけデータページが更新され、共有されなくなります。
クローン先のデータには影響がありません。

逆にクローン先のデータが変更された場合も、その差分だけデータページが更新され、共有されなくなります。
クローン元のデータには影響がありません。

このような形で、データページを共有した上で、クローン元、クローン先でお互いに影響しない状態でクラスターを複製することができるのが特徴です。

クローンのメリット

上記のようにスナップショット的に同じデータを持つDBクラスターを作成できるのがクローンの機能ですが、それであればRDSのスナップショットを復元するのとあまり変わらないように思えます。
スナップショットと比較して、クローンのメリットは以下の2つが挙げられます。

  • コスト効率が良い
  • 素早く作成が可能

コスト効率について、スナップショットを作成した場合、複製元と複製先は全く別のクラスターとなるため、複製先のクラスターでもインスタンスのコストとデータベースストレージのコスト両方が発生します。
一方で、クローンであれば上記のコピーオンライトプロトコルの仕組みのように、初期状態ではデータページを共有した状態となるため、その分ストレージのコストを抑えることができます。もちろんデータ更新が多くなると共有しないストレージが増えるため、抑えられるコスト幅は小さくなります。
また、クラスターを作成するまでの時間についても、スナップショットの場合、スナップショット作成とスナップショット復元によるクラスター作成のそれぞれにかなり時間がかかりますが、クローンの場合、DBクラスターの作成のみの時間で済むため、複製までの時間を短くすることが可能です

クローン作成手順

まずは複製元となるクラスターを用意します。

複製元のクラスターを選択し、アクション>クローンの作成を選択します。

クローン作成画面では、複製先のDBインスタンス名を指定します。

その他の設定はAurora作成時と同様です。設定が全て完了したら「クローンの作成」を選択します。

選択後、クローンが作成中になります。クローンのクラスター名は指定したDBインスタンス名から自動で命名されますが、後から変更も可能です。

しばらく経つとクローンのクラスター、インスタンスが利用可能に変わります。利用可能に変わるまでの時間はストレージの量によって変わります。

これでDBの複製が完了します。複製後のDBへのアクセス、操作が可能になります。

アカウントをまたがるクローンの作成

本番環境のコピーDBの場合、開発環境などの別アカウントにクローンを作成したいケースが多いと思います。
別アカウントにクローンを作成する場合も手順はあまり変わりませんが、以下の追加作業が必要になります。

  • Resource Access Managerによるリソースの共有
  • 暗号化キーの使用許可付与

Resource Access Managerについて、複製元のDBクラスターのあるアカウントから複製先のDBクラスターを配置したいアカウントにリソースを共有することで、クローンが可能になります。
複製元のDBクラスターのあるアカウントでResource Access Managerにアクセスし、「リソース共有を作成」を選択します。

リソースで「Aurora DB クラスター」を選択し、共有したいDB識別子を選択します。

プリンシパルで複製先のDBクラスターを配置したいアカウントIDを入力し、「追加」を選択します。

「追加」を選択することで、「選択されたプリンシパル」に共有先のアカウントIDが追加されます。この状態でRAMを作成することで共有先のアカウントでDBクラスターを参照することができるようになります
その後、共有先のアカウントで、クローン作成を行うことで、DBを複製することができます。

暗号化キーについて、DBクラスターを作成する際に暗号化キーを指定することができますが、クローンの作成の際にその暗号化キーを使用する必要があります。
そのため、DBクラスターのあるアカウントと異なるアカウントでクローンを行う場合、暗号化キーの使用を複製先のアカウントに許可する必要があります。
もし暗号化キーにAWSのマネージドキーを利用すると、別アカウントに使用を許可できないため、別アカウントでのクローン作成ができません。

マネージドキーを使うとアカウントをまたがるクローンができない

別アカウントでクローンする場合、複製元であるDBの暗号化にはカスタマー管理型キーを作成して使用する必要があります。キーの作成時に「別のAWSアカウント」を指定することで、別アカウントに該当のキーを使用するポリシーを付与することができます。

アカウントIDは仮の値

指定することで、キーポリシーに別アカウントへの使用許可が追加されます。

このように作成したキーを暗号化キーに指定することで、別アカウントでクローン作成することが可能になります。

おわりに

以上が、Auroraクローン機能の紹介になります。今後Auroraクローン機能を使用する人の参考になれば幸いです。


弥生では一緒に働く仲間を募集しています。
開発生産性を追求しているチームにご興味のある方、ぜひエントリーお待ちしております。
herp.careers