Amazon Aurora 接続管理 - Amazon Aurora

Amazon Aurora 接続管理

通常、Amazon Aurora は単一の DB インスタンスではなく、DB インスタンスのクラスターを必要とします。各接続は特定の DB インスタンスで処理されます。Aurora クラスターに接続すると、指定したホスト名とポートがエンドポイントと呼ばれる中間ハンドラーをポイントします。Aurora は、エンドポイントメカニズムを使用してこれらの接続を抽象化します。したがって、一部の DB インスタンスが使用できないときに、すべてのホスト名をハードコードしたり、接続のロードバランシングやルート再設定を行うために独自のロジックを記述したりする必要はありません。

Aurora の特定のタスクでは、インスタンスやインスタンスグループごとに異なるロールを実行します。例えば、プライマリインスタンスはすべてのデータ定義言語 (DDL) とデータ操作言語 (DML) のステートメントを処理します。最大 15 の Aurora レプリカで読み取り専用のクエリトラフィックを処理します。

エンドポイントを使用すると、ユースケースに基づいて各接続を対応するインスタンスまたはインスタンスグループにマッピングできます。例えば、DDL ステートメントを実行するには、プライマリインスタンスであるいずれのインスタンスにも接続できます。クエリを実行するには、リーダーエンドポイントに接続できます。Aurora はすべての Aurora レプリカ間で自動的にロードバランシングを実行します。容量や設定が異なる DB インスタンスで構成されるクラスターの場合は、DB インスタンスのサブセット別に関連付けたカスタムエンドポイントに接続できます。診断またはチューニングの場合は、特定のインスタンスエンドポイントに接続して、特定の DB インスタンスに関する詳細を調査できます。

Aurora エンドポイントのタイプ

エンドポイントは、ホストアドレスとポートを含む Aurora 固有の URL として表されます。Aurora DB クラスターでは、以下のタイプのエンドポイントを使用できます。

クラスターエンドポイント

Aurora DB クラスターのクラスターエンドポイント (またはライターエンドポイント) は、その DB クラスターの現在のプライマリ DB インスタンスに接続します。このエンドポイントは、DDL ステートメントなどの書き込みオペレーションを実行できる唯一のエンドポイントです。このため、初期にクラスターを設定する場合や、クラスターに含まれている DB インスタンスが 1 つのみである場合は、クラスターエンドポイントに接続します。

Aurora DB クラスターごとに 1 つのクラスターエンドポイントと 1 つのプライマリ DB インスタンスがあります。

クラスターエンドポイントは、DB クラスターに対するすべての書き込みオペレーション (挿入、更新、削除、DDL の変更など) で使用します。クラスターエンドポイントは、クエリなどの読み取りオペレーションでも使用できます。

クラスターエンドポイントは、DB クラスターへの読み取り/書き込み接続のフェイルオーバーサポートを提供します。DB クラスターの現在のプライマリ DB インスタンスが失敗した場合、Aurora は新しいプライマリ DB インスタンスに自動的にフェイルオーバーします。フェイルオーバー中、DB クラスターは、新しいプライマリ DB インスタンスからクラスターエンドポイントへの接続リクエストに継続して対応し、サービスの中断は最小限に抑えられます。

次の例では、Aurora MySQL DB クラスターのエンドポイントを示します。

mydbcluster.cluster-c7tj4example.us-east-1.rds.amazonaws.com:3306

リーダーエンドポイント

Aurora DB クラスターのリーダーエンドポイントは、その DB クラスターへの読み取り専用接続を負荷分散します。リーダーエンドポイントは、クエリなどの読み取りオペレーションで使用します。これらのステートメントを読み取り専用の Aurora レプリカで処理することにより、このエンドポイントはプライマリインスタンスのオーバーヘッドを削減します。また、クラスター内の Aurora レプリカの数に合わせて、同時 SELECT クエリを処理する容量をスケールすることもできます。Aurora DB クラスターごとに 1 つのリーダーエンドポイントがあります。

クラスターに 1 つ以上の Aurora レプリカが含まれている場合、リーダーエンドポイントは Aurora レプリカ間で各接続リクエストを負荷分散します。その場合、そのセッションでは SELECT などの読み取り専用ステートメントのみを実行できます。クラスターにプライマリインスタンスのみが含まれていて、Aurora レプリカが含まれていない場合、リーダーエンドポイントはプライマリインスタンスに接続します。その場合は、エンドポイントを介して書き込みオペレ―ションを実行できます。

次の例では、Aurora MySQL DB クラスターのリーダーエンドポイントを示します。

mydbcluster.cluster-ro-c7tj4example.us-east-1.rds.amazonaws.com:3306

カスタムエンドポイント

Aurora クラスターのカスタムエンドポイントは、選択した DB インスタンスのセットを表します。カスタムエンドポイントに接続すると、Aurora は負荷分散を行い、グループ内のいずれかのインスタンスを選択して接続を処理します。ユーザーは、このエンドポイントで参照するインスタンスを定義し、エンドポイントの用途を決めます。

Aurora DB クラスターには、ユーザーが作成するまで、カスタムエンドポイントは存在しません。Aurora のプロビジョニングされたクラスターまたは Aurora Serverless v2 クラスターごとに最大 5 つのカスタムエンドポイントを作成できます。Aurora Serverless v1 クラスターにカスタムエンドポイントを使用することはできません。

カスタムエンドポイントでは、DB インスタンスの読み取り専用機能や読み取り/書き込み機能とは異なる基準に従ってデータベース接続を負荷分散できます。例えば、特定の AWS インスタンスクラスや特定の DB パラメータグループを使用するインスタンスに接続するカスタムエンドポイントを定義できます。次に、このカスタムエンドポイントを特定のユーザーグループに知らせることができます。例えば、社内ユーザーをレポート生成やアドホック (1 回だけの) クエリ実行用の低容量インスタンスに振り向けたり、本番稼働用トラフィックを高容量インスタンスに振り向けたりすることができます。

カスタムエンドポイントが関連付けられているいずれの DB インスタンスも接続先となるため、グループ内のすべての DB インスタンス間で同様の特性を共有することをお勧めします。これにより、このエンドポイントに接続するすべてのユーザー間で、パフォーマンス、メモリ容量などが一貫したものになります。

この機能は、クラスター内のすべての Aurora レプリカを同一に保つことが現実的ではない特種なワークロードを扱う上級ユーザー向けです。カスタムエンドポイントを使用すると、各接続に使用される DB インスタンスの容量を予測できます。カスタムエンドポイントを使用する場合は、通常、そのクラスターのリーダーエンドポイントは使用しません。

次の例は、Aurora MySQL DB クラスター内の DB インスタンスのカスタムエンドポイントを示しています。

myendpoint.cluster-custom-c7tj4example.us-east-1.rds.amazonaws.com:3306

インスタンスエンドポイント

インスタンスエンドポイントは、Aurora クラスター内の特定の DB インスタンスに接続します。DB クラスターの各 DB インスタンスには、独自のインスタンスエンドポイントがあります。したがって、DB クラスター内の現在のプライマリ DB インスタンスに 1 つのインスタンスエンドポイントがあり、DB クラスター内の Aurora レプリカごとに 1 つのインスタンスエンドポイントがあります。

インスタンスエンドポイントは、クラスターエンドポイントやリーダーエンドポイントの使用が適切でないシナリオ向けに、DB クラスターへの接続の直接制御を提供します。例えば、ワークロードタイプに基づき、さらにきめ細かいロードバランシングがアプリケーションに必要になる場合があります。この場合、DB クラスター内の別の Aurora レプリカに接続するように複数のクライアントを設定して、読み取りワークロードを分散させることができます。Aurora PostgreSQL のフェイルオーバー後に接続速度を向上させるインスタンスエンドポイントを使用する例については、「Amazon Aurora PostgreSQL による高速フェイルオーバー」を参照してください。Aurora MySQL のフェイルオーバー後にインスタンスエンドポイントを使用して接続速度を向上させる例については、「MariaDB Connector/J failover support - case Amazon Aurora」を参照してください。

次の例では、Aurora MySQL DB クラスターの DB インスタンスのインスタンスエンドポイントを示します。

mydbinstance.c7tj4example.us-east-1.rds.amazonaws.com:3306

Aurora クラスターのエンドポイントの表示

AWS Management Console では、クラスターエンドポイント、リーダーエンドポイント、およびカスタムエンドポイントが、各クラスターの詳細ページに表示されます。インスタンスエンドポイントは、各インスタンスの詳細ページに表示されます。接続する場合、この詳細ページに表示されているエンドポイント名の後にコロン (:) および該当するポート番号を付加する必要があります。

AWS CLI では、ライターエンドポイント、リーダーエンドポイント、およびカスタムエンドポイントが describe-db-clusters コマンドの出力に表示されます。例えば、次のコマンドは、現在の AWS リージョンにあるすべてのクラスターのエンドポイント属性を表示します。

aws rds describe-db-clusters --query '*[].{Endpoint:Endpoint,ReaderEndpoint:ReaderEndpoint,CustomEndpoints:CustomEndpoints}'

Amazon RDS API では、DescribeDBClusterEndpoints 関数を呼び出してエンドポイントを取得します。

クラスターエンドポイントの使用

Aurora クラスターごとに組み込まれている単一のクラスターエンドポイントの名前と他の属性は Aurora で管理されるため、この種のエンドポイントをユーザーが作成、削除、または変更することはできません。

クラスターエンドポイントは、クラスターの管理、抽出/変換/ロード (ETL) オペレーションの実行、またはアプリケーションの開発やテストに使用します。クラスターエンドポイントはクラスターのプライマリインスタンスに接続します。プライマリインスタンスは、テーブルとインデックスを作成し、INSERT ステートメントや他の DDL/DML オペレーションを実行できる唯一の DB インスタンスです。

フェイルオーバー機構によって別の DB インスタンスがクラスターの読み取り/書き込みのプライマリインスタンスに昇格されると、クラスターエンドポイントがポイントする物理 IP アドレスは変わります。何らかの形式の接続プールや他の多重化を使用している場合は、キャッシュされた DNS 情報の有効時間をフラッシュまたは削減する必要があります。これにより、フェイルオーバー後に使用不可または読み取り専用になった DB インスタンスに読み取り/書き込み接続を試行できないようにします。

リーダーエンドポイントの使用

リーダーエンドポイントは、Aurora クラスターの読み取り専用接続に使用します。このエンドポイントでは、ロードバランシング機構を使用して、クラスターによるクエリが集中的に行われるワークロードの処理を促進します。リーダーエンドポイントは、クラスターに対してレポートや他の読み取り専用のオペレーションを実行するアプリケーションに指定します。

リーダーエンドポイントは、Aurora DB クラスター内の利用可能な Aurora レプリカへの接続を負荷分散します。個別のクエリは負荷分散しません。各クエリを負荷分散して DB クラスターの読み取りワークロードを配信する場合は、クエリごとにリーダーエンドポイントへの新しい接続を開きます。

Aurora クラスターごとに組み込まれている単一のリーダーエンドポイントの名前や他の属性は Aurora で管理されます。ユーザーが、この種のエンドポイントを作成、削除、または変更することはできません。

クラスターにプライマリインスタンスのみが含まれていて、Aurora レプリカが含まれていない場合、リーダーエンドポイントはプライマリインスタンスに接続します。その場合、このエンドポイントを介して書き込みオペレーションを実行できます。

ヒント

RDS Proxy を使用して、Aurora クラスターの追加の読み取り専用エンドポイントを作成できます。このようなエンドポイントは、Aurora リーダーエンドポイントと同じ種類の負荷分散を実行します。リーダーインスタンスが使用できなくなった場合、アプリケーションは Aurora リーダーエンドポイントよりもプロキシエンドポイントにすばやく再接続できます。プロキシエンドポイントは、多重化などの他のプロキシ機能を利用することもできます。詳細については、「Aurora クラスターでのリーダーエンドポイントの使用」を参照してください。

カスタムエンドポイントの使用

カスタムエンドポイントでは、容量や構成設定が異なる DB インスタンスがクラスターに含まれている場合に接続管理を簡素化します。

以前は、CNAMES 機構を使用して各自のドメインからドメインネームサービス (DNS) のエイリアスをセットアップして同様の結果を達成していました。カスタムエンドポイントを使用すると、クラスターの増大や縮小に伴って CNAME レコードを更新する必要がなくなります。カスタムエンドポイントでは、暗号化された Transport Layer Security/Secure Sockets Layer (TLS/SSL) 接続を使用することもできます。

異なる目的ごとに 1 つの DB インスタンスを使用し、そのインスタンスエンドポイントに接続する代わりに、複数の専用の DB インスタンスを持つことができます。この場合、グループごとに独自のカスタムエンドポイントを使用します。これにより、Aurora は、レポートの作成、本番稼働用クエリや内部クエリの処理など、タスク別のすべてのインスタンスをまたいでロードバランシングを実行できます。カスタムエンドポイントは、クラスター内の DB インスタンスのグループごとにロードバランシングと高可用性を提供します。グループ内のいずれかの DB インスタンスが使用不可になると、Aurora は以降のカスタムエンドポイント接続を、同じエンドポイントに関連付けられている他のいずれかの DB インスタンスに振り向けます。

カスタムエンドポイントのプロパティの指定

カスタムエンドポイント名の最大長は 63 文字です。名前の形式は次のとおりです。

endpoint_name.cluster-custom-customer_DNS_identifier.AWS_Region.rds.amazonaws.com

同じカスタムエンドポイント名を同じ AWS リージョン の複数のクラスターで再利用することはできません。顧客の DNS 識別子は、特定の AWS リージョン の AWS アカウント に関連付けられた一意識別子です。

各カスタムエンドポイントの対応するタイプにより、このエンドポイントに関連付けることができる DB インスタンスが決まります。現在、タイプは READERWRITERANY のいずれかです。カスタムエンドポイントのタイプには、以下の考慮事項が適用されます。

  • カスタムエンドポイントタイプを AWS Management Console で選択することはできません。AWS Management Console で作成するすべてのカスタムエンドポイントは ANY タイプになります。

    AWS CLI または Amazon RDS API を使用してカスタムエンドポイントタイプを設定および変更できます。

  • リーダー DB インスタンスのみが、READER カスタムエンドポイントの一部となることができます。

  • リーダー DB インスタンスとライター DB インスタンスの両方が、ANY カスタムエンドポイントの一部となることができます。Aurora はクラスターエンドポイントに接続を指示し、ANY のタイプを関連付けられた DB インスタンスのいずれかに同じ確率で割り当てます。ANY タイプは、任意のレプリケーショントポロジを使用するクラスターに適用されます。

  • 作成しようとしているカスタムエンドポイントのタイプがクラスターのレプリケーション設定に適切なものではない場合、Aurora はエラーを返します。

カスタムエンドポイントのメンバーシップルール

DB インスタンスをカスタムエンドポイントに追加したり、カスタムエンドポイントから削除したりすると、この DB インスタンスへの既存の接続はアクティブのまま残ります。

カスタムエンドポイントに含めたり、カスタムエンドポイントから除外したりする DB インスタンスのリストを定義できます。これらのリストは、それぞれ静的リストおよび除外リストと呼ばれます。包含/除外機構を使用して、さらに DB インスタンスのグループを細分化したり、カスタムエンドポイントのセットがクラスターのすべての DB インスタンスをカバーしていることを確認したりできます。各カスタムエンドポイントには、これらのリストタイプの 1 つのみを含めることができます。

AWS Management Console で次の操作を行います。

  • 選択は、[Attach future instances added to this cluster] (今後追加されるインスタンスをこのクラスターにアタッチする) チェックボックスによって表されます。このチェックボックスをオフのままにすると、カスタムエンドポイントはページで指定された DB インスタンスのみを含む静的リストを使用します。このチェックボックスをオンにすると、カスタムエンドポイントは除外リストを使用します。この場合、カスタムエンドポイントは、ページで選択されなかったものを除いて、クラスター内のすべての DB インスタンス (今後追加するものも含む) を表します。

  • コンソールではエンドポイントタイプを指定できません。コンソールを使用して作成されたカスタムエンドポイントは、すべて ANY タイプです。

    そのため、フェイルオーバーやプロモーションにより DB インスタンスのロールがライターとリーダーの間で変更されても、Aurora はカスタムエンドポイントのメンバーシップを変更しません。

AWS CLI および Amazon RDS API では:

  • エンドポイントタイプを指定できます。そのため、エンドポイントタイプを READER または WRITER に設定すると、フェイルオーバーやプロモーション時にエンドポイントのメンバーシップが自動的に調整されます。

    例えば、タイプ READER のカスタムエンドポイントに Aurora レプリカが含まれ、その後、ライターインスタンスに昇格されたとします。新しいライターインスタンスは、カスタムエンドポイントの一部ではなくなります。

  • ロールを変更した後に、個々のメンバーをリストに追加したり、リストから削除したりできます。modify-db-cluster-endpoint AWS CLI コマンドまたは ModifyDBClusterEndpoint API オペレーションを使用してください。

DB インスタンスは、複数のカスタムエンドポイントに関連付けることができます。例えば、ユーザーが新しい DB インスタンスをクラスターに追加するか、Aurora が Autoscaling 機構を通じて DB インスタンスを自動的に追加するとします。このような場合、DB インスタンスは該当するすべてのカスタムエンドポイントに追加されます。どのエンドポイントに DB インスタンスが追加されるかは、カスタムエンドポイントのタイプである READERWRITER、または ANY と、各エンドポイントに定義されている静的リストや除外リストに基づきます。例えば、エンドポイントに DB インスタンスの静的リストが含まれている場合、新しく追加された Aurora レプリカはこのエンドポイントに追加されません。逆に、エンドポイントに除外リストが含まれている場合、新しく追加された Aurora レプリカは、この除外リストに名前が存在せず、ロールがカスタムエンドポイントのタイプと一致すれば、エンドポイントに追加されます。

Aurora レプリカは、使用不可になっても、カスタムエンドポイントに関連付けられたままになります。例えば、異常、停止、再起動などに伴って、カスタムエンドポイントの一部として残ります。ただし、レプリカが再度使用可能になるまでは、これらのエンドポイントを通じてレプリカに接続することはできません。

カスタムエンドポイントの管理

新しく作成された Aurora クラスターにはカスタムエンドポイントがないため、これらのオブジェクトを自分で作成して管理する必要があります。これを行うには、AWS Management Console、AWS CLI、または Amazon RDS API を使用します。

注記

スナップショットから復元した Aurora クラスターのカスタムエンドポイントも作成して管理する必要があります。カスタムエンドポイントはスナップショットに含まれていません。カスタムエンドポイントは、復元後に再度作成します。復元したクラスターが元のクラスターと同じリージョン内にある場合は、新しいエンドポイント名を選択します。

AWS Management Console からカスタムエンドポイントを使用するには、Aurora クラスターの詳細ページに移動し、[カスタムエンドポイント] セクションの制御を使用します。

AWS CLI からカスタムエンドポイントを使用するには、以下のオペレーションを使用できます。

Amazon RDS API からカスタムエンドポイントを使用するには、以下の関数を使用できます。

カスタムエンドポイントの作成

AWS Management Console でカスタムエンドポイントを作成するには、クラスターの詳細ページに移動し、[エンドポイント] セクションの [Create custom endpoint] アクションを選択します。カスタムエンドポイントの名前を選択します。名前はユーザー ID およびリージョンで一意なものを使用します。クラスターが拡張しても変更されない DB インスタンスのリストを選択するには、[Attach future instances added to this cluster (今後追加されるインスタンスをこのクラスターにアタッチ)] をオフのままにします。このチェックボックスをオンにすると、カスタムエンドポイントは、クラスターに新しく追加されたインスタンスを動的に追加します。

カスタムエンドポイントタイプの ANY または READER を AWS Management Console で選択することはできません。AWS Management Console で作成するすべてのカスタムエンドポイントは ANY タイプになります。

AWS CLI でカスタムエンドポイントを作成するには、create-db-cluster-endpoint コマンドを実行します。

次のコマンドは、特定のクラスターにアタッチされるカスタムエンドポイントを作成します。当初、エンドポイントはクラスター内のすべての Aurora レプリカインスタンスに関連付けられます。後続のコマンドで、エンドポイントをクラスター内の特定の DB インスタンスのセットに関連付けます。

Linux、macOS、Unix の場合:

aws rds create-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample \ --endpoint-type reader \ --db-cluster-identifier cluster_id aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample \ --static-members instance_name_1 instance_name_2

Windows の場合:

aws rds create-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample ^ --endpoint-type reader ^ --db-cluster-identifier cluster_id aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier custom-endpoint-doc-sample ^ --static-members instance_name_1 instance_name_2

RDS API でカスタムエンドポイントを作成するには、CreateDBClusterEndpoint オペレーションを実行します。

カスタムエンドポイントの表示

AWS Management Console でカスタムエンドポイントを表示するには、クラスターの詳細ページに移動し、[エンドポイント] セクションを参照します。このセクションには、カスタムエンドポイントに関する情報のみが表示されます。組み込みエンドポイントに関する詳細は、メインの [詳細] セクションに表示されます。特定のカスタムエンドポイントに関する詳細を表示するには、その名前を選択してエンドポイントの詳細ページを表示します。

次のスクリーンショットは、Aurora クラスターのカスタムエンドポイントのリストが当初は空であることを示しています。

クラスターのカスタムエンドポイントを作成すると、[Endpoints (エンドポイント)] セクションに表示されます。

クリックを繰り返して詳細ページまで移動すると、エンドポイントに現在関連付けられている DB インスタンスが表示されます。

クラスターに追加された新しい DB インスタンスがエンドポイントにも自動的に追加されるかどうかの詳細を表示するには、エンドポイントの [Edit] (編集) ページを開きます。

AWS CLI でカスタムエンドポイントを表示するには、describe-db-cluster-endpoints コマンドを実行します。

次のコマンドは、特定のリージョンの特定のクラスターに関連付けられているカスタムエンドポイントを表示します。出力には、組み込みエンドポイントとカスタムエンドポイントの両方が含まれています。

Linux、macOS、Unix の場合:

aws rds describe-db-cluster-endpoints --region region_name \ --db-cluster-identifier cluster_id

Windows の場合:

aws rds describe-db-cluster-endpoints --region region_name ^ --db-cluster-identifier cluster_id

describe-db-cluster-endpoints コマンドの出力例は以下のとおりです。EndpointTypeWRITER または READER は、クラスターの組み込みの読み取り/書き込みエンドポイントと読み取り専用エンドポイントを示します。EndpointTypeCUSTOM は、ユーザーが作成し、関連する DB インスタンスを選択した、エンドポイントを示します。エンドポイントの 1 つに含まれている空ではない StaticMembers フィールドは、エンドポイントが DB インスタンスの厳密なセットに関連付けられることを示します。他のエンドポイントの空ではない ExcludedMembers フィールドは、ExcludedMembers にリストアップされているものを除いたすべての DB インスタンスにエンドポイントが関連付けられることを示します。この 2 番目の種類のカスタムエンドポイントは、クラスターに追加された新しいインスタンスを包含して増大します。

{ "DBClusterEndpoints": [ { "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo", "EndpointType": "WRITER" }, { "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo", "EndpointType": "READER" }, { "CustomEndpointType": "ANY", "DBClusterEndpointIdentifier": "powers-of-2", "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "available", "EndpointType": "CUSTOM", "Endpoint": "powers-of-2.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [ "custom-endpoint-demo-04", "custom-endpoint-demo-08", "custom-endpoint-demo-01", "custom-endpoint-demo-02" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:powers-of-2" }, { "CustomEndpointType": "ANY", "DBClusterEndpointIdentifier": "eight-and-higher", "ExcludedMembers": [ "custom-endpoint-demo-04", "custom-endpoint-demo-02", "custom-endpoint-demo-07", "custom-endpoint-demo-05", "custom-endpoint-demo-03", "custom-endpoint-demo-06", "custom-endpoint-demo-01" ], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "available", "EndpointType": "CUSTOM", "Endpoint": "eight-and-higher.cluster-custom-123456789012.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHYQKFU6J6NV5FHU", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:eight-and-higher" } ] }

RDS API でカスタムエンドポイントを表示するには、DescribeDBClusterEndpoints.html オペレーションを実行します。

カスタムエンドポイントの編集

カスタムエンドポイントのプロパティを編集して、エンドポイントに関連付けられている DB インスタンスを変更できます。静的リストと除外リストの間でエンドポイントを変更することもできます。これらのエンドポイントプロパティの詳細については、「カスタムエンドポイントのメンバーシップルール」を参照してください。

編集アクションによる変更の進行中も、カスタムエンドポイントへの接続やカスタムエンドポイントの使用を続行できます。

AWS Management Console でカスタムエンドポイントを編集するには、クラスターの詳細ページでエンドポイントを選択するか、エンドポイントの詳細ページを表示して、[編集] アクションを選択します。

AWS CLI でカスタムエンドポイントを編集するには、modify-db-cluster-endpoint コマンドを実行します。

以下のコマンドは、カスタムエンドポイントに適用される DB インスタンスのセットを変更し、必要に応じて静的リストまたは除外リストの動作間を切り替えます。--static-members パラメータと --excluded-members パラメータは、スペースで区切られた DB インスタンス識別子のリストを使用します。

Linux、macOS、Unix の場合:

aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint \ --static-members db-instance-id-1 db-instance-id-2 db-instance-id-3 \ --region region_name aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint \ --excluded-members db-instance-id-4 db-instance-id-5 \ --region region_name

Windows の場合:

aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint ^ --static-members db-instance-id-1 db-instance-id-2 db-instance-id-3 ^ --region region_name aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier my-custom-endpoint ^ --excluded-members db-instance-id-4 db-instance-id-5 ^ --region region_name

RDS API でカスタムエンドポイントを編集するには、ModifyDBClusterEndpoint.html オペレーションを実行します。

カスタムエンドポイントの削除

AWS Management Console でカスタムエンドポイントを削除するには、クラスターの詳細ページに移動し、該当するカスタムエンドポイントを選択して、[削除] アクションを選択します。

AWS CLI でカスタムエンドポイントを削除するには、delete-db-cluster-endpoint コマンドを実行します。

次のコマンドは、カスタムエンドポイントを削除します。関連付けられたクラスターを指定する必要はありませんが、リージョンを指定する必要があります。

Linux、macOS、Unix の場合:

aws rds delete-db-cluster-endpoint --db-cluster-endpoint-identifier custom-end-point-id \ --region region_name

Windows の場合:

aws rds delete-db-cluster-endpoint --db-cluster-endpoint-identifier custom-end-point-id ^ --region region_name

RDS API でカスタムエンドポイントを削除するには、DeleteDBClusterEndpoint オペレーションを実行します。

カスタムエンドポイントのエンドツーエンド AWS CLI の例

次のチュートリアルでは、AWS CLI による Unix シェル構文の例を使用して、いくつかの「小さい」DB インスタンスと少数の「大きい」DB インスタンスで構成されたクラスターを定義し、カスタムエンドポイントを作成して DB インスタンスの各セットに接続できることを示します。自分のシステムで同様のコマンドを実行するには、リージョン、サブネットグループ、VPC セキュリティグループなどのパラメータに独自の値を指定するために、Aurora クラスターと AWS CLI の基本的な使用法に精通している必要があります。

この例では、初期のセットアップステップである、Aurora クラスターの作成とクラスターへの DB インスタンスの追加を示します。これは異種クラスターです。つまり、すべての DB インスタンスが同じ容量を持っているわけではありません。ほとんどのインスタンスは AWS インスタンスクラス db.r4.4xlarge を使用しますが、最後の 2 つの DB インスタンスは db.r4.16xlarge を使用します。以下の各 create-db-instance コマンドでは、出力を画面に表示し、JSON のコピーをファイルに保存して後で検査できるようにします。

aws rds create-db-cluster --db-cluster-identifier custom-endpoint-demo --engine aurora-mysql \ --engine-version 8.0.mysql_aurora.3.02.0 --master-username $MASTER_USER --manage-master-user-password \ --db-subnet-group-name $SUBNET_GROUP --vpc-security-group-ids $VPC_SECURITY_GROUP \ --region $REGION for i in 01 02 03 04 05 06 07 08 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.4xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done for i in 09 10 do aws rds create-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --engine aurora --db-cluster-identifier custom-endpoint-demo --db-instance-class db.r4.16xlarge \ --region $REGION \ | tee custom-endpoint-demo-${i}.json done

より大きいインスタンスは特種なレポートクエリ用に予約されています。これらのインスタンスがプライマリインスタンスに昇格されないように、次の例では昇格階層を最低の優先度に変更します。この例では、マスターユーザーパスワードを生成して Secrets Manager で管理する --manage-master-user-password オプションを指定しています。詳細については、「Amazon Aurora および AWS Secrets Manager によるパスワード管理」を参照してください。または、--master-password オプションを使用して、自分でパスワードを指定して管理することもできます。

for i in 09 10 do aws rds modify-db-instance --db-instance-identifier custom-endpoint-demo-${i} \ --region $REGION --promotion-tier 15 done

例えば、2 つの「大きい」インスタンスを、リソースを最も集中的に使用するクエリ専用にするとします。これを行うには、初期にカスタムの読み取り専用エンドポイントを作成します。次に、このエンドポイントから上記の DB インスタンスにのみ接続するように、メンバーの静的なリストを追加できます。これらのインスタンスは、既に最低の昇格階層にあるため、いずれのインスタンスもプライマリインスタンスに昇格される可能性はありません。いずれかがプライマリインスタンスに昇格されたとしても、タイプとして READER ではなく ANY を指定しているため、このエンドポイントを通じてインスタンスに到達することはできなくなります。

次の例では、エンドポイントの作成コマンドと変更コマンドを示します。JSON 出力例は、カスタムエンドポイントの当初の状態と変更後の状態を示しています。

$ aws rds create-db-cluster-endpoint --region $REGION \ --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier big-instances --endpoint-type reader { "EndpointType": "CUSTOM", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterEndpointIdentifier": "big-instances", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "ExcludedMembers": [], "CustomEndpointType": "READER", "Status": "creating", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier big-instances \ --static-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "EndpointType": "CUSTOM", "ExcludedMembers": [], "DBClusterEndpointIdentifier": "big-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "Status": "modifying", "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "DBClusterIdentifier": "custom-endpoint-demo" }

クラスターのデフォルトの READER エンドポイントは、「小さい」DB インスタンスまたは「大きい」DB インスタンスに接続できます。クラスターがビジー状態になると、クエリのパフォーマンスとスケーラビリティは予測不可能になります。DB インスタンスのセット間でワークロードを明確に分けるには、デフォルトの READER エンドポイントを無視して、他のすべての DB インスタンスに接続する 2 番目のカスタムエンドポイントを作成できます。次の例では、これを行うために、カスタムエンドポイントを作成して除外リストを追加します。後でクラスターに追加した他の DB インスタンスは、このエンドポイントに自動的に追加されます。ANY タイプでは、このエンドポイントに合計 8 個のインスタンス (プライマリインスタンスと 7 個の Aurora レプリカ) が関連付けられます。この例で READER タイプを使用したとすると、カスタムエンドポイントは 7 個のみの Aurora レプリカに関連付けられます。

$ aws rds create-db-cluster-endpoint --region $REGION --db-cluster-identifier custom-endpoint-demo \ --db-cluster-endpoint-identifier small-instances --endpoint-type any { "Status": "creating", "DBClusterEndpointIdentifier": "small-instances", "CustomEndpointType": "ANY", "EndpointType": "CUSTOM", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "StaticMembers": [], "ExcludedMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY" } $ aws rds modify-db-cluster-endpoint --db-cluster-endpoint-identifier small-instances \ --excluded-members custom-endpoint-demo-09 custom-endpoint-demo-10 --region $REGION { "DBClusterEndpointIdentifier": "small-instances", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:c7tj4example:cluster-endpoint:small-instances", "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "CustomEndpointType": "ANY", "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "EndpointType": "CUSTOM", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "StaticMembers": [], "DBClusterIdentifier": "custom-endpoint-demo", "Status": "modifying" }

次の例では、このクラスターのエンドポイントの状態をチェックします。クラスターには、まだ元のクラスターエンドポイントがあります。EndPointTypeWRITER は、引き続き管理、ETL、その他の書き込みオペレーションに使用することにします。元の READER エンドポイントは、「小さい」DB インスタンスまたは「大きい」DB インスタンスに振り向けられる可能性があるため、使用しないことにします。カスタムエンドポイントでは、この動作が予測可能になり、指定したエンドポイントに基づいて「小さい」DB インスタンスまたは「大きい」DB インスタンスのいずれかが接続で確実に使用されます。

$ aws rds describe-db-cluster-endpoints --region $REGION { "DBClusterEndpoints": [ { "EndpointType": "WRITER", "Endpoint": "custom-endpoint-demo.cluster-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "EndpointType": "READER", "Endpoint": "custom-endpoint-demo.cluster-ro-c7tj4example.ca-central-1.rds.amazonaws.com", "Status": "available", "DBClusterIdentifier": "custom-endpoint-demo" }, { "Endpoint": "small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "ANY", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:small-instances", "ExcludedMembers": [ "custom-endpoint-demo-09", "custom-endpoint-demo-10" ], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-6RDDXQOC3AKKZT2PRD7ST37BMY", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "small-instances", "Status": "modifying" }, { "Endpoint": "big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com", "CustomEndpointType": "READER", "DBClusterEndpointArn": "arn:aws:rds:ca-central-1:111122223333:cluster-endpoint:big-instances", "ExcludedMembers": [], "DBClusterEndpointResourceIdentifier": "cluster-endpoint-W7PE3TLLFNSHXQKFU6J6NV5FHU", "DBClusterIdentifier": "custom-endpoint-demo", "StaticMembers": [ "custom-endpoint-demo-10", "custom-endpoint-demo-09" ], "EndpointType": "CUSTOM", "DBClusterEndpointIdentifier": "big-instances", "Status": "available" } ] }

最後の例では、カスタムエンドポイントへの以降のデータベース接続が Aurora クラスターのさまざまな DB インスタンスに接続されることを示します。small-instances エンドポイントは、db.r4.4xlarge DB インスタンス (このクラスターの下位数字のホスト) に常に接続します。

$ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-02 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-07 | +-------------------------+ $ mysql -h small-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-01 | +-------------------------+

big-instances エンドポイントは、db.r4.16xlarge DB インスタンス (このクラスターの最上位数字のホスト 2 つ) に常に接続します。

$ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-10 | +-------------------------+ $ mysql -h big-instances.cluster-custom-c7tj4example.ca-central-1.rds.amazonaws.com -u $MYUSER -p mysql> select @@aurora_server_id; +-------------------------+ | @@aurora_server_id | +-------------------------+ | custom-endpoint-demo-09 | +-------------------------+

インスタンスエンドポイントの使用

Aurora クラスターの DB インスタンスごとに個別に組み込まれているインスタンスエンドポイントの名前や他の属性は Aurora で管理されます。ユーザーが、この種のエンドポイントを作成、削除、または変更することはできません。Amazon RDS を使用している場合は、インスタンスエンドポイントをよく使用している可能性があります。ただし、Aurora では通常、インスタンスエンドポイントよりもライターエンドポイントとリーダーエンドポイントをよく使用します。

日常的な Aurora オペレーションでインスタンスエンドポイントを主に使用するのは、Aurora クラスター内の特定のインスタンスに影響している容量やパフォーマンスの問題を診断する場合です。特定のインスタンスに接続しているときに、そのステータス可変、メトリクスなどを調査できます。これを行うことで、クラスターの他のインスタンスとは異なり、この特定のインスタンスだけに起きている現象を判断できます。

高度なユースケースでは、一部の DB インスタンスを他のインスタンスとは異なるように設定することもできます。この場合は、インスタンスエンドポイントを使用して他のインスタンスと比べて、より小さいインスタンス、より大きいインスタンス、または特性が異なるインスタンスに直接接続します。また、この特定の DB インスタンスがプライマリインスタンスに昇格される順位が最後になるように、フェイルオーバーの優先度を設定します。このような場合は、インスタンスエンドポイントではなく、カスタムエンドポイントを使用することをお勧めします。カスタムエンドポイントを使用すると、クラスターに追加する DB インスタンスが増えたときの接続の管理と高可用性の確保が容易になります。

Aurora エンドポイントでの高可用性の使用

高可用性が重要であるクラスターでは、ライターエンドポイントを読み取り/書き込み接続や汎用接続に使用し、リーダーエンドポイントを読み取り専用接続に使用します。ライターエンドポイントとリーダーエンドポイントは、インスタンスエンドポイントよりも DB インスタンスのフェイルオーバーを適切に管理します。インスタンスエンドポイントとは異なり、ライターエンドポイントとリーダーエンドポイントは、クラスター内の DB インスタンスが利用できなくなった場合に、接続先の DB インスタンスを自動的に変更します。

DB クラスターのプライマリ DB インスタンスが失敗した場合、Aurora は新しいプライマリ DB インスタンスに自動的にフェイルオーバーします。そのために、既存の Aurora レプリカが新しいプライマリ DB インスタンスに昇格されるか、新しいプライマリ DB インスタンスが作成されます。フェイルオーバーが発生した場合、ライターエンドポイントを使用して新しく昇格させたプライマリインスタンスや新規作成したプライマリ DB インスタンスに接続するか、リーダーエンドポイントを使用して DB クラスター内のいずれかの Aurora レプリカに接続できます。フェイルオーバーの際に、Aurora レプリカが新しいプライマリ DB インスタンスに昇格されると、リーダーエンドポイントは接続を DB クラスターの新しいプライマリ DB インスタンスに短時間だけ振り向ける場合があります。

インスタンスエンドポイントへの接続を管理するように独自のアプリケーションロジックを設計する場合は、DB クラスター内の使用可能な DB インスタンスの結果セットを手動またはプログラムで検出できます。describe-db-clustersAWS CLI コマンドまたは DescribeDBClusters RDS API オペレーションを使用して、DB クラスターとリーダーエンドポイント、DB インスタンス、DB インスタンスがリーダーか、DB インスタンスの昇格階層を検索します。次に、フェイルオーバー後のインスタンスクラスを確認し、適切なインスタンスエンドポイントに接続できます。

フェイルオーバーについての詳細は、「Aurora DB クラスターの耐障害性」を参照してください。