開発環境用 DB の作成

稼働中のサービスに対して同じデータを利用して開発環境の構築や分析業務を行いたい、というのは一般的なニーズです。 しかし、本番サービスに影響を与えずこのようなDBの作成を行うには、工夫が必要です。 (本番用DBをそのまま開発作業に利用することは以下の理由で現実的ではありません)

  • 意図しないデータ破壊
  • 突発的なパフォーマンスへの影響
    • リードレプリカを利用している場合であっても、分析ワークロードの負荷を見込んだリードレプリカを本番環境に用意する必要があります
  • セキュリティ
    • ユーザーの個人情報が格納されている場合、一般にデータ分析チームには匿名化して渡すことが求められます

一方で、データベースのコピーを作成して開発チームやデータ分析チームに提供することは一般的ですが、次のような問題が生じます。

  • データコピーの所要時間
    • ダンプ → レストア または スナップショットから復元する必要があります。大規模データベースでは、非常に長い時間を要します。
  • 複数の同一データにそれぞれ料金がかかる
    • 複数のコピー環境が必要な場合、それぞれで独立したデータを持つ必要があります。ほぼ本番と同じデータであっても重複しているデータにもストレージ利用料金が発生します。

Aurora ではアーキテクチャに基づいた仕組み(Copy on Write)を利用し、この問題を解決する方法として「クローン」機能を提供しています。 クローン機能は、次のような特徴を持ちます:

  • 他の方法に比べ高速にDBの複製を作成できる
  • ストレージ料金は、複製先で変更を加えない限り発生しない

今回の例ではデータ分析の用途を中心に取り上げましたが、単純に 開発環境の構築 や システム変更の影響テスト にももちろん有用です。

クローンの作成

クローンを作成してみましょう。

  1. 毎秒DBに書き込むスクリプトが動いているか確認してください。
  2. 閉じてしまった方は、こちらを参考に再度動かしてください。
  3. RDSのコンソールから、作成したDBクラスターを選択します
  4. 上部の「アクション」から「クローンの作成」をクリックします。
  • DB インスタンス識別子: db-clone と入力します
  1. 設定が完了したら「クローンの作成」をクリックして作成します。
  2. 10分ほど待つと、書き込み可能なインスタンスが作成されます。

データの確認

  • 作成されたクローンの Writerエンドポイント に対して以下のクエリを実行して下さい。
select * from data where id = 1;
  • このレコードは1秒ごとに更新されていましたが、クローン作成時刻が記録されています。
  • このように、スナップショットからの復元より高速に、かつ簡単に直近のデータを利用した複製が作成できました。
  • このクローンされたデータベースエンドポイントをデータ分析チームに提供することで、本番環境への負荷を気にせず、自由に分析してもらうことが可能になります。

参考資料

Aurora DB クラスターボリュームのクローン作成