Amazon RDS Proxy の使用 - Amazon Relational Database Service

Amazon RDS Proxy の使用

Amazon RDS Proxy を使用すると、アプリケーションでデータベース接続をプールおよび共有して、アプリケーションのスケーリング能力を向上させることができます。RDS Proxy は、アプリケーション接続を維持しながらスタンバイ DB インスタンスに自動的に接続することで、データベースの障害に対するアプリケーションの耐障害性を高めます。RDS プロキシを使用することで、データベースに AWS Identity and Access Management (IAM) 認証を適用し、クレデンシャルをに安全に保存することもできますAWS Secrets Manager。

注記

RDS Proxy には、MySQL および PostgreSQL との完全な互換性があります。ほとんどのアプリケーションでは、コードを変更せずに RDS Proxy を有効にすることができます。

RDS Proxy を使用すると、データベーストラフィックの予測不可能なサージを処理できます。このようなサージを処理しないと、接続のオーバーサブスクリプションや新しい接続の急速な作成に伴って発生し、問題の原因となることがあります。RDS Proxy は、データベース接続プールを確立し、このプール内の接続を再利用するため、毎回新しいデータベース接続を開くためのメモリや CPU オーバーヘッドは不要です。オーバーサブスクリプションからデータベースを保護するために、データベース接続の作成数を制御できます。

RDS Proxy は、接続プールからアプリケーション接続をすぐに提供できない場合に、これらの接続の処理順番を決めたり、スロットリングを行ったりします。レイテンシーは増加する場合がありますが、データベースの障害や過負荷が突然発生することはなく、アプリケーションは継続してスケーリングされます。接続リクエスト数が指定した制限を超えると、RDS Proxy はアプリケーション接続を拒否 (負荷を削除) します。同時に、使用可能な容量で対応できる負荷に対して、予測可能なパフォーマンスを維持します。

認証情報を処理するオーバーヘッドを減らし、新しい接続ごとに安全な接続を確立できます。RDS Proxy は、この作業の一部をデータベースに代わって処理できます。

RDS プロキシでサポートされているエンジンとリージョンの可用性

RDS プロキシは、次のデータベースエンジンのバージョンをサポートしています。

  • RDS for MySQL - MySQL 5.6、5.7、および 8.0

  • RDS for PostgreSQL - バージョン 10.10 およびそれ以降のマイナーバージョン、バージョン 11.5 およびそれ以降のマイナーバージョン、バージョン 12.5 およびそれ以降のマイナーバージョン、バージョン 13.1 およびそれ以降のマイナーバージョン

RDS Proxy は以下の AWS リージョンでのみ利用できます。

  • 米国東部(オハイオ)

  • 米国東部(バージニア北部)

  • 米国西部(北カリフォルニア)

  • 米国西部(オレゴン)

  • アフリカ(ケープタウン)

  • アジアパシフィック(香港)

  • アジアパシフィック(ムンバイ)

  • アジアパシフィック(大阪)

  • アジアパシフィック(ソウル)

  • アジアパシフィック(シンガポール)

  • アジアパシフィック(シドニー)

  • アジアパシフィック(東京)

  • カナダ(中部)

  • 欧州(フランクフルト)

  • 欧州(アイルランド)

  • 欧州(ロンドン)

  • ヨーロッパ(ミラノ)

  • 欧州(パリ)

  • 欧州(ストックホルム)

  • 中東(バーレーン)

  • 南米(サンパウロ)

RDS プロキシのクォータと制限事項

RDS プロキシには以下のクォータと制限が適用されます。

  • AWS アカウント ID ごとに設定できるプロキシは最大 20 個です。アプリケーションでさらなるプロキシが必要な場合は、AWS サポート組織でチケットを開いて、追加のプロキシをリクエストできます。

  • 各プロキシには、最大 200 個の Secrets Manager シークレットを関連付けることができます。したがって、各プロキシは、任意の時点で最大 200 の異なるユーザーアカウントに接続できます。

  • プロキシごとに最大 20 のエンドポイントを作成、表示、変更、および削除できます。これらのエンドポイントは、プロキシごとに自動的に作成されるデフォルトのエンドポイントに追加されます。

  • Aurora クラスターでは、デフォルトのプロキシエンドポイントを使用するすべての接続が Aurora ライターインスタンスによって処理されます。読み取り負荷の高いワークロードの負荷分散を実行するには、プロキシの読み取り専用エンドポイントを作成できます。そのエンドポイントは、クラスターのリーダーエンドポイントに接続を渡します。そうすれば、プロキシ接続で Aurora 読み取りのスケーラビリティを利用できます。詳細については、「プロキシエンドポイントの概要」を参照してください。

    レプリケーション設定の RDS DB インスタンスの場合、リードレプリカではなく、ライター DB インスタンスにのみプロキシを関連付けることができます。

  • Aurora サーバーレスクラスターでは RDS Proxy を使用できません。

  • Aurora Global Database の一部である Aurora クラスターで RDS Proxy を使用することは現在サポートされていません。

  • RDS プロキシは、データベースと同じ仮想プライベートクラウド (VPC) 内に存在する必要があります。プロキシにはパブリックにアクセスできませんが、データベースにはパブリックにアクセスできます。例えば、ローカルホストでプロトタイプを作成している場合、専用ネットワークを設定しない限り、RDS Proxy に接続できません。これは、ローカルホストがプロキシの VPC の外側にあるためです。

    注記

    Aurora DB クラスターでは、クロス VPC アクセスを有効にできます。これを行うには、プロキシ用に追加のエンドポイントを作成し、そのエンドポイントで別の VPC、サブネット、およびセキュリティグループを指定します。詳細については、「Aurora へのアクセスと VPC 間の RDS データベース」を参照してください。

  • dedicatedに設定されたテナンシーを含む VPC では、RDS Proxy を使用できません。

  • IAM 認証が有効になっている RDS DB インスタンスまたは Aurora DB クラスターで RDS Proxy を使用する場合、プロキシ経由で接続するすべてのユーザーがユーザー名とパスワードで認証されていることを確認してください。RDS Proxy の IAM サポートの詳細については、「AWS Identity and Access Management (IAM) ポリシーの設定」を参照してください 。

  • カスタム DNS で RDS Proxy を使用することはできません。

  • RDS Proxy は MySQL エンジンファミリーおよび PostgreSQL エンジンファミリーで使用できます。

  • 各プロキシは、1 つのターゲット DB インスタンスまたはクラスターに関連付けることができます。ただし、同じ DB インスタンスまたはクラスターに複数のプロキシを関連付けることができます。

MySQL には以下の RDS プロキシ制限が適用されます。

  • RDS プロキシは MySQL sha256_passwordおよびcaching_sha2_password認証プラグインをサポートしていません。これらのプラグインは、ユーザーアカウントパスワードに SHA-256 ハッシュを実装しています。

  • 現在、すべてのプロキシはポート 3306 で MySQL をリッスンします。プロキシは引き続き、データベース設定で指定したポートを使用してデータベースに接続します。

  • RDS Proxy は、EC2 インスタンスのセルフマネージド MySQL データベースでは使用できません。

  • DB パラメータグループが 1 に設定された read_only パラメータを含む RDS for MySQL DB インスタンスでは、RDS Proxy を使用できません。

  • プロキシは MySQL の圧縮モードをサポートしていません。例えば、--compress コマンドの -C オプションや mysql オプションで使用される圧縮はサポートされていません。

  • 一部の SQL ステートメントと関数は、ピン留めを発生させずに接続状態を変更できます。ピン留めの最新の動作については、「ピン留めを回避する」を参照してください。

以下の RDS プロキシ制限が PostgreSQL に適用されます。

  • RDS プロキシは PostgreSQL SCRAM-SHA-256 認証をサポートしていません。

  • 現在、すべてのプロキシはポート 5432 で PostgreSQL をリッスンします。

  • PostgreSQL の場合、RDS プロキシは現在、CancelRequest を発行してクライアントからのクエリのキャンセルをサポートしていません。これは例えば、インタラクティブな psql セッションで長時間実行されるクエリを、Ctrl+C を使用してキャンセルする場合に相当します。

  • PostgreSQL 関数 lastval の結果は必ずしも正確ではありません。回避策としては、INSERT ステートメントを RETURNING 句と共に使用します。

  • クライアントアプリケーションドライバが PostgreSQL 拡張クエリプロトコルを使用している場合、RDS プロキシは接続を多重化しません。