はじめに
AWSの各種DBサービスには接続用のエンドポイントを複数持つものがあります。
本記事で一番にお伝えしたいのは、適切なエンドポイントを接続先に指定しないと、サービス停止などのリスクがあるということです。
例えば書き込みオペレーションが発生するアプリケーションの接続先を "プライマリインスタンスのインスタンスエンドポイント" に指定した場合、何が起こるでしょう。
指定した当初はアプリケーションからの書き込み処理はプライマリインスタンスにルーティングされるため正常に実行されます。
しかし、なんらかの理由でフェールオーバーが発生しプライマリとレプリカが入れ替わった場合、アプリケーションは書き込み処理をレプリカインスタンスにリクエストしてしまうことになります。
その結果、書き込み処理は失敗しアプリケーションエラーが発生、サービス停止といった事態になりかねません。
どのDBにどのようなエンドポイントがあるか、よく確認しておくようにしましょう。
各DBサービスのエンドポイントタイプ
※インスタンス、ノードが1台のスタンドアロン構成の場合は省略します
Aurora
タイプ | 説明 |
---|---|
クラスターエンドポイント | DB クラスターの現在のプライマリ DB インスタンスに接続します。 書き込み処理を行うアプリケーションの接続先は基本的にこちらを指定してください。 |
リーダーエンドポイント | DB クラスターへの読み取り専用接続を負荷分散します。 読み取り処理のみを行う場合はこちらを指定することでプライマリインスタンスの負荷を軽減できます。 |
カスタムエンドポイント | 選択した DB インスタンスのセットを表します。 ユーザーが用途に応じたインスタンスのグループを定義し、グループ内で負荷分散します。 |
インスタンスエンドポイント | クラスター内の特定の DB インスタンスに接続します。 特定のきめ細かい負荷分散が必要なケースなどを除いて、これをアプリケーションの接続先に指定することは非推奨です。 |
ElastiCache
クラスターモードの有効無効でエンドポイントの種類が変わります。
■クラスターモード有効の場合
書き込み処理、読み取り処理ともに 設定エンドポイント を指定します。
■クラスターモード無効の場合
タイプ | 説明 |
---|---|
プライマリエンドポイント | 常にクラスターのプライマリノードに解決される DNS 名であり、書き込み処理はこちらに接続します。 |
読み込みエンドポイント | ラウンドロビン方式でレプリカノードの 1 つの IP アドレスに解決される DNS 名です。読み込み処理はこちらに接続します。 |
ノードエンドポイント | 特定のノードに解決される DNS 名です。レプリカの追加削除などがあると都度アプリケーションの接続先を更新する必要があります。 |
DocumentDB
タイプ | 説明 |
---|---|
クラスターエンドポイント | クラスターの現在のプライマリインスタンスに接続するエンドポイントです。 |
リーダーエンドポイント | そのクラスターで利用できるレプリカの 1 つに接続するエンドポイントです。 |
インスタンスエンドポイント | 特定のインスタンスに接続するエンドポイントです。 これをアプリケーションの接続先に指定することは非推奨です。 |
RDS
RDSのDBインスタンスはそれぞれ一意のエンドポイントを持ち、明示的に接続先インスタンスを指定する形になります。
ただし、マルチAZクラスター構成でデプロイした場合はAuroraなどと同様クラスター、リーダー、インスタンスエンドポイントを持ちます。注意点もAuroraと同様です。
DynamoDB
DynamoDBはサーバレスサービスであるためクラスターやインスタンスといったものを意識する必要はありません。
そのためリージョンごとのDynamoDBエンドポイントに対してAPIリクエストを送信する形で操作を行います。
ただし、DynamoDB Accelerator(DAX)を使用する場合は独自のクラスターエンドポイント、ノードエンドポイントを持つことになります。
この場合は他のDBサービスと同様なるべくクラスターエンドポイントを使用するよう注意しましょう。