Amazon RDS Proxy の使用 - Amazon Relational Database Service

Amazon RDS Proxy の使用

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

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

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

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

RDS Proxy には、RDS Proxy でサポートされているエンジンバージョンとの完全な互換性があります。ほとんどのアプリケーションでは、コードを変更せずに RDS Proxy を有効にすることができます。

リージョンとバージョンの可用性

機能の可用性とサポートは、各データベースエンジンの特定のバージョン、および AWS リージョン によって異なります。RDS Proxy に関する Amazon RDS のバージョンとリージョンの可用性の詳細については、「Amazon RDS Proxy でサポートされているリージョンと DB エンジン」を参照してください。

RDS Proxy のクォータと制限事項

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

  • 各 AWS アカウント ID は 20 個のプロキシに制限されています。アプリケーションがさらに多くのプロキシを必要とする場合、AWS Management Console 内の Service Quotas ページから引き上げをリクエストします。Service Quotas ページで、Amazon Relational Database Service (Amazon RDS) を選択し、Proxies を見つけてクォータの引き上げをリクエストします。AWS は、クォータを自動的に引き上げたり、AWS Support によるリクエストのレビューを保留したりできます。

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

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

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

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

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

  • IAM 認証が有効になっている RDS DB インスタンスで RDS プロキシを使用する場合、ユーザー認証を確認してください。プロキシ経由で接続するユーザーは、サインイン認証情報で認証する必要があります。RDS Proxy の Secrets Manager および IAM サポートの詳細については、「RDS Proxy の AWS Secrets Manager でのデータベース認証情報の設定」と「RDS Proxy の AWS Identity and Access Management (IAM) ポリシーの設定」を参照してください 。

  • SSL ホスト名の検証を使用するときは、カスタム DNS で RDS Proxy を使用することができません。

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

  • ステートメントのテキストサイズが 16 KB を超える場合、プロキシはセッションを現在の接続に固定します。

  • 特定のリージョンには、プロキシを作成する際に考慮すべきアベイラビリティーゾーン (AZ) の制限があります。米国東部 (バージニア北部) リージョンは、use1-az3 アベイラビリティーゾーンで RDS Proxy サポートしていません。米国西部 (北カリフォルニア) リージョンは、usw1-az2 アベイラビリティーゾーンで RDS プロキシをサポートしていません。プロキシの作成時にサブネットを選択するときは、上記のアベイラビリティーゾーンのサブネットを選択しないようにしてください。

  • 現在、RDS プロキシはグローバル条件コンテキストキーをサポートしていません。

    グローバル条件コンテキストキーの詳細については、「IAM ユーザーガイド」の「AWS グローバル条件コンテキストキー」を参照してください。

以下のセクションに各 DB エンジンに関するその他の制限事項については、以下のセクションを参照してください。

RDS for MariaDB の追加の制限事項

RDS for MariaDB データベースを使用した RDS Proxy には、以下の追加制限が適用されます。

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

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

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

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

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

  • RDS Proxy では、MariaDB auth_ed25519 プラグインはサポートされていません。

  • RDS Proxy では、MariaDB データベースの Transport Layer Security (TLS) バージョン 1.3 はサポートされていません。

  • RDS Proxy が同じデータベース接続を再利用して別のクエリを実行すると、GET DIAGNOSTIC コマンドを処理するデータベース接続が不正確な情報を返すことがあります。これは、RDS プロキシがデータベース接続を多重化する場合に発生する可能性があります。詳細については、「RDS Proxy の概念」を参照してください。

重要

MariaDB データベースに関連付けられているプロキシの場合、初期化クエリで設定パラメータ sql_auto_is_nulltrue または 0 以外の値に設定しないでください。その場合、アプリケーションの動作が正常でなくなる場合があります。

RDS for Microsoft SQL Server の追加の制限事項

Microsoft SQL Server データベースを使用した RDS Proxy には、以下の追加制限が適用されます。

  • プロキシ用に作成する必要がある Secrets Manager シークレットの数は、DB インスタンスが使用する照合順序によって異なります。例えば、DB インスタンスが大文字と小文字を区別する照合順序を使用しているとします。アプリケーションが「Admin」と「admin」の両方を受け入れる場合、プロキシには 2 つの別々のシークレットが必要です。SQL Server Agent の詳細については、Microsoft SQL Server のドキュメントを参照してください。

  • RDS Proxy は、Active Directory を使用する接続をサポートしていません。

  • トークンプロパティをサポートしていないクライアントでは IAM 認証を使用できません。詳細については、「Microsoft SQL Server でプロキシに接続する際の考慮事項」を参照してください。

  • @@IDENTITY@@ROWCOUNT、および SCOPE_IDENTITY の結果は必ずしも正確ではありません。回避策として、同じセッションステートメントでそれらの値を取得して、正しい情報が返されることを確認します。

  • 接続で複数のアクティブな結果セット (MARS) が使用されている場合、RDS プロキシは初期化クエリを実行しません。MARS の詳細については、 Microsoft SQL Server のドキュメントを参照してください。

  • 現在、RDS Proxy は、メジャーバージョンの SQL Server 2022 で実行する RDS for SQL Server DB インスタンスをサポートしていません。

  • RDS Proxy は、メジャーバージョンの SQL Server 2014 で実行される RDS for SQL Server DB インスタンスをサポートしていません。

  • RDS Proxy は、1 つの TLS レコードで複数のレスポンスメッセージを処理できないクライアントアプリケーションをサポートしていません。

RDS for MySQL の追加の制限事項

RDS for MySQL データベースを使用した RDS Proxy には、以下の追加制限が適用されます。

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

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

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

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

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

  • RDS プロキシが同じデータベース接続を再利用して別のクエリを実行すると、GET DIAGNOSTIC コマンドを処理するデータベース接続が不正確な情報を返すことがあります。これは、RDS プロキシがデータベース接続を多重化する場合に発生する可能性があります。

  • SET LOCAL など、一部の SQL ステートメントと関数は、ピニングを起こさずに接続状態を変更できます。固定の最新の動作については、「RDS Proxy の固定の回避」を参照してください。

  • マルチステートメントクエリでの ROW_COUNT() 関数の使用はサポートされていません。

  • RDS Proxy は、1 つの TLS レコードで複数のレスポンスメッセージを処理できないクライアントアプリケーションをサポートしていません。

重要

MySQL データベースに関連付けられているプロキシの場合、初期化クエリで設定パラメータ sql_auto_is_nulltrue または 0 以外の値に設定しないでください。その場合、アプリケーションの動作が正常でなくなる場合があります。

RDS for PostgreSQL の追加の制限事項

RDS for PostgreSQL データベースを使用した RDS Proxy には、以下の追加制限が適用されます。

  • RDS Proxy は PostgreSQL のセッション固定フィルターをサポートしていません。

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

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

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

  • RDS Proxy は現在、ストリーミングレプリケーションモードをサポートしていません。

  • RDS for PostgreSQL 16 では、scram_iterations 値の変更は、プロキシとデータベース間の認証プロセスにのみ影響します。具体的には、ClientPasswordAuthTypescram-sha-256 に設定した場合、scram_iterations 値に加えられたカスタマイズは、クライアントとプロキシ間のパスワード認証に影響しません。代わりに、クライアントとプロキシ間のパスワード認証の反復値は 4096 に固定されます。

重要

PostgreSQL データベースを使用する既存のプロキシでは、SCRAM のみを使用するようにデータベース認証を変更すると、プロキシが最大 60 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。

  • データベースが SCRAMMD5 認証の両方を許可していることを確認します。

  • SCRAM 認証のみを使用するには、新しいプロキシを作成し、アプリケーショントラフィックを新しいプロキシに移行してから、以前にデータベースに関連付けられていたプロキシを削除します。