Amazon Auroraのグローバルデータベース化でハマった話

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

はじめに

クロスインダストリー第1本部 CC2課の京極です。

皆さん、Amazon Aurora のGlobal Databaseは使っていますか? これを使えば、リージョンをまたいでAmazon Auroraを展開することができます。

先日、この機能を有効化しようとして失敗してしまったので、注意喚起も兼ねてどういう失敗だったのかをご紹介したいと思います!

前提条件

環境として、以下のような構成をとっていました。

  • データベースエンジンは、Amazon Aurora (MySQL互換)
  • インスタンスタイプはライター/リーダー共に、db.t3.medium

何が起きたのか?

シングルリージョン構成だったAmazon Auroraをマルチリージョン構成とするために、 Amazon Auroraの機能である「グローバルデータベース」への設定変更を試みたところ、これに失敗しました。

グローバルデータベースの有効化

グローバルデータベースの有効化自体は簡単で、本番稼働中でも影響を及ぼさないように作られています。

AWSの管理コンソールにログイン > Amazon RDSの管理画面から対象のデータベースを選択 > アクションから「AWSリージョンを追加」を選択します。

本来であれば、このようにグローバルデータベースの設定画面が出てグローバルデータベースの設定を進めることができます。

ところが、今回は以下のようなダイアログが出て設定画面にすら進むことができませんでした。

文章としては、「このインスタンスタイプじゃ互換性がないかサイズが小さいからダメ!」と怒られていますね。

グローバルデータベースの要件

さて、グローバルデータベースの要件は、AWSが公開してくれています。 docs.aws.amazon.com

この中の一文には以下のような記載があります、

DB instance class requirements – An Aurora global database requires DB instance classes that are optimized for memory-intensive applications. For information about the memory optimized DB instance classes, see DB instance class types. We recommend that you use a db.r5 or higher instance class.

訳:DBインスタンスクラスの要件 – Auroraグローバルデータベースには、メモリを大量に消費するアプリケーション向けに最適化されたDBインスタンスクラスが必要です。メモリ最適化DBインスタンスクラスの詳細については、「DBインスタンスクラスの種類」を参照してください。db.r5以上のインスタンスクラスの使用を推奨します。

グローバルデータベースでは、db.r5以上のインスタンスクラスを推奨するという記載です。 ただ、エラーが出てしまうということは、実際は「推奨」ではなく「決められた要件」のようですね。

インスタンスのリソース容量が大きければ問題がないのか?

さて、

An Aurora global database requires DB instance classes that are optimized for memory-intensive applications. 訳:メモリを大量に消費するアプリケーション向けに最適化されたDBインスタンスクラスが必要

この一文を読んだときふと「メモリ容量が大きいものであれば問題ないのか?」という疑問が沸き上がってきました。

今回使ったdb.t3.mediumは、2vCPU 4GBメモリという非常に小さなリソースタイプです。 では、メモリリソースが強化されたdb.t3.large(2vCPU 8GBメモリ)にすれば問題ないのでしょうか?

結果は・・・ 変わらず同じエラーがでますね。単純にメモリの容量が問題ということもなさそうです。

少し癖のある挙動

db.t3インスタンスではメモリを増やそうがダメなようですね。 では、同じバーストクラスであるt4gならどうでしょうか?

なんと…設定画面に進めてしまいましたね! ひょっとしてt4gは例外なのかな・・・?

ただ、設定画面を注意深く見てみると・・・

グローバルデータベースの設定として、 対向リージョンに展開するDBインスタンスタイプを選択する項目には、バーストクラスの選択肢がありません。 ひとまず、設定を進めてみますが…

最後に失敗して上記のようなメッセージが表示されます。 db.t3の時と違い、少し変則的な挙動を見せましたが、「バーストタイプ(t系)」のインスタンスは、グローバルデータベースでは一切使用ができない造りになっています。

解決方法

DBのインスタンスサイズとして、「バーストタイプ」を避ける必要があるということがわかりましたので、インスタンスタイプを変更します。 ここでは、メモリ最適化タイプであるdb.r6gで作成しています。

こちらのインスタンスタイプでは、問題なくグローバルデータベースの作成が行えました。

結論

Amazon Auroraのグローバルデータベースを使用するには、ライター/リーダーインスタンス問わず、すべてのインスタンスタイプが、 メモリ最適化タイプ(db.r)を選択しておく必要があります。(もしくは、Serverless)

バーストクラスは、検証や開発で使用されるケースが多く、本番稼働で使用されるケースは少ないと思いますが、注意が必要な点です。

(補足)インスタンスタイプ以外の重要な要件

グローバルデータベースの利用に際して、 もう一つ、非常に重要な要件がありますので、そちらもご紹介しておきます。

それが、「AWS Secrets Manager」を使ったパスワード管理をしていないことです。

作成しているAmazon Auroraへの接続に使用するパスワードの管理には、

  • AWS Secrets Managerによる管理
  • セルフマネージド

の2種類があります。↓

ここでもし、左の「AWS Secrets Managerで管理」を選択してDBを作成していた場合は、 グローバルデータベース設定を行おうとした際に、以下のようなダイアログが出て設定画面へ進めません。

その場合は、AWS Secrets Managerでのパスワード管理をAmazon Auroraの設定画面からセルフマネージドへ変更する必要があります。

まとめ

今回、グローバルデータベース化で起きてしまった問題について共有致しました。

バーストクラスを使っている状態でグローバルデータベースを使用したいのであれば、DBのインスタンスタイプをメモリ最適化クラスに変更する必要があります。 また、AWS Secrets Managerを使用していないこともグローバルデータベース化において求められる要件となります

DBに対する変更作業には、多少のダウンタイムが出てしまうので、グローバルデータベースの利用を後々見込むのであれば、 インスタンスタイプやパスワード管理などに気を配っておく必要がありそうです。

京極 泰久 (記事一覧)

クロスインダストリー第1本部 クラウドコンサルティング2課

バイクと工具をこよなく愛する元仮想化基盤担当