2019の4日目の記事です。Divisionに所属している東口(@hgsgtk)です。・Pythonなどサーバーサイド言語を用いた話や、テストやコード設計の話が多いのですが、せっかくの年に一回のアドベントカレンダーなので、普段はあまりしないクラウドインフラのレイヤーの話をしたいと思います。BANK(エールバンク)」というサービスの開発・運用をしています。Auroraを利用しています。endpointを使用しています。endpointにおいて、フェールオーバーを想定した場合に必要な、設定のちょっとした注意点を紹介してみます。ケーススタディ次のように、1台の書き込みロールのインスタンスと、2台の読み込みロールのインスタンスの計3台のインスタンスがぶら下がるクラスターを想定してみます。RDSのマネジメントコンソール画面このクラスターにおいて、アプリケーションからはtest-database-1-analysisという読み込みロールのインスタンスは参照せず、分析用として使うという構成だとします。Auroraには4つのエンドポイントが存在します。docs.aws.amazon.comまず、現在のプライマリDBインスタンスに接続するクラスターエンドポイント、DBクラスターの使用可能なAuroraレプリカのいずれかに接続する読み取りエンドポイント、Auroraクラスター内の特定のDBインスタンスに接続するインスタンスエンドポイント、そして今回の記事のタイトルでもあるカスタムエンドポイントです。カスタムエンドポイントは、選択したDBインスタンスのセットを表し、選択したグループ内で負荷分散を行い接続します。今回のケースでは、読み取りエンドポイントの一部をアプリケーションから使いたいことが要求です。その要求をカスタムエンドポイントであれば叶えられそうです。カスタムエンドポイントタイプ実際にカスタムエンドポイントを設定します。フェールオーバーが起きてインスタンスのロールが入れ替わった際の考慮は忘れてはいけません。いった場合に知っておくべきはカスタムエンドポイントタイプです。このカスタムエンドポイントタイプによって、当該エンドポイントに関連づけることができるDBインスタンスが決まります。具体的には、READER・WRITER・ANYの三種類があります。読み取り専用のAuroraレプリカと、読み取り/書き込みのプライマリインスタンスの両方がこれの一部になれるカスタムエンドポイントタイプは、マネジメントコンソール上で見る限りは、表示されていないので、気がつきにくいですが、マネジメントコンソールで作成した場合には、ANYになります。選択することはできません。https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Custom.Propertiesマネジメントコンソールから作ってみると例えば、マネジメントコンソールで作成したカスタムエンドポイントに、設定時点で読み込みロールのインスタンスを選択してみます。マネジメントコンソール画面からカスタムエンドポイントを作成するこの状態でマネジメントコンソールからフェールオーバーさせてみます。すると、カスタムエンドポイントに設定したインスタンスは次のように変化します。フェールオーバー後のエンドポイントメンバーロールが書き込みになってしまいました。これでは、レプリカのみを参照したいエンドポイントにしたい意図を満たすことができません。すればいいか先ほどお伝えした通り、現時点(2019年12月4日)で、マネジメントコンソールから、カスタムエンドポイントタイプを設定する方法はなく、デフォルトでANYとなります。CLIからはカスタムエンドポイントタイプを指定できるので、そちらで作っていきましょう。CLIでカスタムエンドポイントを作成する場合、create-db-cluster-endpointを使用します。test-database-1-instance-1オプションendpoint-typeにてREADERを指定することで、カスタムエンドポイントタイプがREADERになります。この時の設定方法として、設定したい読み込み専用DBインスタンスと、現在のプライマリDBインスタンスの両方を設定しておきます。するとマネージメントコンソールからは次のように見えます。CLIから作成したカスタムエンドポイント現在、読み込みロールとなっているtest-database-1-instance-1-ap-northeast-1cのみがエンドポイントメンバーとなっており、プライマリDBインスタンスは読み込み専用ではないのでメンバーにはなっていません。しておくと、フェールオーバーが起きて、書き込み・読み込みが入れ替わった場合においても、読み込み専用のインスタンスに対して解決するようになります。BANKの運用のためのインフラ構成管理は、基本的にTerraformで行なっていますそのため、Terraformのtfファイルにて次のように設定しました。Auroraのちょっとした小ネタの紹介でした。この他にも、サービスの新規開発時や運用していく中で、クラウドインフラのレイヤーの経験もたまっていっているものがあるので、2020年も小出しにでもみなさまにお届けできればと思います。)の開発チームによるブログです。Groupの大木です。Developerをしている東口です。Groupのマネージャーをしている山田です。12/1から始まっ...Archiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。