

# Amazon RDS Proxy for Aurora
<a name="rds-proxy"></a>

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

![\[アプリケーションが RDS Proxy に接続する方法の概要\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/Proxy-Overview.png)


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

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

![\[アプリケーションが RDS Proxy に接続する方法と、関連する接続のタイプの詳細ビュー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/Proxy-detail.png)


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

 RDS Proxy には、RDS Proxy でサポートされているエンジンバージョンとの完全な互換性があります。ほとんどのアプリケーションでは、コードを変更せずに RDS Proxy を有効にすることができます。サポートされているエンジンバージョンのリストについては、「[Amazon RDS Proxy でサポートされているリージョンと Aurora DB エンジン](Concepts.Aurora_Fea_Regions_DB-eng.Feature.RDS_Proxy.md)」を参照してください。

**Topics**
+ [リージョンとバージョンの可用性](#rds-proxy.RegionVersionAvailability)
+ [RDS Proxy のクォータと制限事項](#rds-proxy.limitations)
+ [RDS Proxy の使用場所の計画](rds-proxy-planning.md)
+ [RDS Proxy の概念と用語](rds-proxy.howitworks.md)
+ [RDS Proxy のスタート方法](rds-proxy-setup.md)
+ [RDS Proxy の管理](rds-proxy-managing.md)
+ [Amazon RDS Proxy エンドポイントの操作](rds-proxy-endpoints.md)
+ [Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリング](rds-proxy.monitoring.md)
+ [RDS Proxy イベントの使用](rds-proxy.events.md)
+ [RDS Proxy コマンドラインの例](rds-proxy.examples.md)
+ [RDS Proxy のトラブルシューティング](rds-proxy.troubleshooting.md)
+ [RDS Proxy の AWS CloudFormation での使用](rds-proxy-cfn.md)
+ [Aurora グローバルデータベースで RDS Proxy を使用する](rds-proxy-gdb.md)

## リージョンとバージョンの可用性
<a name="rds-proxy.RegionVersionAvailability"></a>

 特定の AWS リージョン での RDS Proxy のデータベースエンジンのバージョンサポートおよび可用性については、「[Amazon RDS Proxy でサポートされているリージョンと Aurora DB エンジン](Concepts.Aurora_Fea_Regions_DB-eng.Feature.RDS_Proxy.md)」を参照してください。

## RDS Proxy のクォータと制限事項
<a name="rds-proxy.limitations"></a>

 RDS Proxy には以下のクォータと制限が適用されます。
+  各 AWS アカウント ID は 20 個のプロキシに制限されています。アプリケーションがさらに多くのプロキシを必要とする場合、AWS マネジメントコンソール 内の **Service Quotas** ページから引き上げをリクエストします。**Service Quotas** ページで、**Amazon Relational Database Service (Amazon RDS)** を選択し、**Proxies** を見つけてクォータの引き上げをリクエストします。AWS は、クォータを自動的に引き上げたり、サポート によるリクエストのレビューを保留したりできます。
+ 各プロキシには最大 200 個の Secrets Manager シークレットを関連付けることができるため、シークレットを使用するときに接続を最大 200 個の異なるユーザーアカウントに制限できます。
+  各プロキシにはデフォルトのエンドポイントがあり、プロキシの設定済みサブネットから選択された 2 つのアベイラビリティーゾーンにのみプロビジョニングされます。複数の AZ にサブネットが設定されている場合、そのうちの 2 つが選択されます。
+  プロキシごとに最大 20 のその他のプロキシエンドポイントを追加できます。これらの追加のエンドポイントは、作成時に指定されたすべてのアベイラビリティーゾーンにプロビジョニングされます。これらのエンドポイントを作成、表示、変更、および削除できます。
+  Aurora クラスターでは、デフォルトのプロキシエンドポイントを使用するすべての接続が Aurora ライターインスタンスによって処理されます。読み取り負荷の高いワークロードの負荷分散を実行するには、プロキシの読み取り専用エンドポイントを作成できます。そのエンドポイントは、クラスターのリーダーエンドポイントに接続を渡します。そうすれば、プロキシ接続で Aurora 読み取りのスケーラビリティを利用できます。詳細については、「[プロキシエンドポイントの概要](rds-proxy-endpoints.md#rds-proxy-endpoints-overview)」を参照してください。
+ RDS Proxy は Aurora Serverless v2 クラスターでは使用できますが、Aurora Serverless v1 クラスターでは使用できません。
+ RDS Proxy は、データベースと同じ仮想プライベートクラウド (VPC) 内に存在する必要があります。プロキシにはパブリックにアクセスできませんが、データベースにはパブリックにアクセスできます。例えば、ローカルホストでデータベースをプロトタイプ化する場合、プロキシへの接続を許可するために必要なネットワーク要件を設定しない限り、プロキシに接続することはできません。これは、ローカルホストがプロキシの VPC の外側にあるためです。
**注記**  
Aurora DB クラスターでは、クロス VPC アクセスを有効にできます。これを行うには、プロキシ用に追加のエンドポイントを作成し、そのエンドポイントで別の VPC、サブネット、およびセキュリティグループを指定します。詳細については、「[VPC 間の Aurora データベースへのアクセス](rds-proxy-endpoints.md#rds-proxy-cross-vpc)」を参照してください。
+  `dedicated` に設定されたテナンシーを含む VPC では、RDS Proxy を使用できません。
+  `Enforce Mode` が有効になっている暗号化コントロールを持つ VPC では RDS Proxy を使用できません。
+ IPv6 エンドポイントネットワークタイプの場合は、IPv6 のみをサポートするように VPC とサブネットを設定します。IPv4 と IPv6 の両方のターゲット接続ネットワークタイプで、デュアルスタックモードをサポートするように VPC とサブネットを設定します。
+ IAM 認証が有効になっている Aurora DB クラスターで RDS Proxy を使用する場合、プロキシは、IAM 認証または Secrets Manager に保存されている認証情報を使用してデータベースに接続できます。プロキシに接続するクライアントは、IAM 認証情報を使用して認証する必要があります。設定手順の詳細については、「[RDS Proxy のデータベース認証情報の設定](rds-proxy-secrets-arns.md)」および「[RDS Proxy の IAM 認証の設定](rds-proxy-iam-setup.md)」を参照してください。
+  SSL ホスト名の検証を使用するときは、カスタム DNS で RDS Proxy を使用することができません。
+  各プロキシは、1 つのターゲット DB クラスターに関連付けることができます。ただし、同じ DB クラスターに複数のプロキシを関連付けることができます。
+ ステートメントのテキストサイズが 16 KB を超える場合、プロキシはセッションを現在の接続に固定します。
+ 特定のリージョンには、プロキシを作成する際に考慮すべきアベイラビリティーゾーン (AZ) の制限があります。米国東部 (バージニア北部) リージョンは、`use1-az3` アベイラビリティーゾーンで RDS Proxy サポートしていません。米国西部 (北カリフォルニア) リージョンは、`usw1-az2` アベイラビリティーゾーンで RDS プロキシをサポートしていません。プロキシの作成時にサブネットを選択するときは、上記のアベイラビリティーゾーンのサブネットを選択しないようにしてください。
+ 現在、RDS プロキシはグローバル条件コンテキストキーをサポートしていません。

  グローバル条件コンテキストキーの詳細については、「IAM ユーザーガイド**」の「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。
+ RDS Custom for SQL Server で RDS Proxy を使用することはできません。
+ データベースパラメータグループの変更をプロキシに反映するには、変更をすぐに適用することを選択した場合でも、インスタンスの再起動が必要です。クラスターレベルのパラメータには、クラスター全体の再起動が必要です。
+ プロキシターゲットを登録すると、プロキシによって `rdsproxyadmin` DB ユーザーが自動的に作成されます。これは、プロキシ機能に不可欠な保護されたユーザーです。`rdsproxyadmin` ユーザーの改ざんは、いかなる権限においても、避けてください。`rdsproxyadmin` ユーザーやそのアクセス許可を削除または変更すると、アプリケーションへのプロキシが完全に利用できなくなる可能性があります。

以下のセクションに各 DB エンジンに関するその他の制限事項については、以下のセクションを参照してください。
+ [Aurora MySQL のその他の制限事項](#rds-proxy.limitations-my)
+ [Aurora PostgreSQL の追加の制限事項](#rds-proxy.limitations-pg)

### Aurora MySQL のその他の制限事項
<a name="rds-proxy.limitations-my"></a>

 Aurora MySQL データベースを使用した RDS Proxy には、以下の追加の制限事項が適用されます。
+ RDS Proxy の `caching_sha2_password` 認証のサポートには、安全な (TLS) 接続が必要です。
+ RDS Proxy の`caching_sha2_password` のサポートには、特定の go-sql ドライバーバージョンとの互換性の問題があることが知られています。
+ MySQL 8.4 C ドライバーを使用した場合、パラメータ数がプリペアドステートメントのプレースホルダー数を超えると、`mysql_stmt_bind_named_param` API が不正な形式のパケットを生成する可能性があります。これにより、誤ったレスポンスが生じます。MySQL リードレプリカの詳細については、[MySQL バグレポート](https://bugs.mysql.com/bug.php?id=116860&thanks=4)を参照してください。
+ 現在、すべてのプロキシはポート 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 の固定の回避](rds-proxy-pinning.md)」を参照してください。
+ マルチステートメントクエリでの `ROW_COUNT()` 関数の使用はサポートされていません。
+ RDS Proxy は、1 つの TLS レコードで複数のレスポンスメッセージを処理できないクライアントアプリケーションをサポートしていません。
+ RDS Proxy は MySQL デュアルパスワードをサポートしていません。
+ セッション状態変数を設定するように RDS DB パラメータグループの `init_connect` パラメータを設定すると、RDS Proxy が期待どおりに動作しない場合があります。代わりに、プロキシを使用してデータベースに接続する際に、セッション初期化ステートメントを実行するように、プロキシの初期化クエリを設定します。

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

### Aurora PostgreSQL の追加の制限事項
<a name="rds-proxy.limitations-pg"></a>

 Aurora PostgreSQL データベースを使用した RDS Proxy には、以下の追加の制限事項が適用されます。
+ RDS Proxy は PostgreSQL のセッション固定フィルターをサポートしていません。
+  現在、すべてのプロキシはポート 5432 で PostgreSQL をリッスンします。
+ PostgreSQL の場合、RDS Proxy は現在、`CancelRequest` を発行してクライアントからのクエリのキャンセルをサポートしていません。これは例えば、インタラクティブな psql セッションで長時間実行されるクエリを、Ctrl\$1C を使用してキャンセルする場合に相当します。
+  PostgreSQL 関数 [lastval](https://www.postgresql.org/docs/current/functions-sequence.html) の結果は必ずしも正確ではありません。回避策としては、[INSERT](https://www.postgresql.org/docs/current/sql-insert.html) ステートメントを `RETURNING` 句と共に使用します。
+ RDS Proxy は現在、ストリーミングレプリケーションモードをサポートしていません。
+ RDS Proxy が機能するには、デフォルトの `postgres` データベースが RDS for PostgreSQL インスタンスに存在する必要があります。アプリケーションが異なるデータベースを使用している場合でも、このデータベースを削除しないでください。
+ `ALTER ROLE` を使用して `SET ROLE` でユーザーロールを変更した場合、そのユーザーによるプロキシへの後続の接続で固定が発生した場合に、このロール設定は使用されないことがあります。これを防ぐには、プロキシを使用するときにプロキシの初期化クエリで `SET ROLE` を使用します。詳細については、「[Amazon Aurora のプロキシの作成](rds-proxy-creating.md)」の「**初期化クエリ**」を参照してください。

**重要**  
PostgreSQL データベースを使用する既存のプロキシでは、`SCRAM` のみを使用するようにデータベース認証を変更すると、プロキシが最大 60 秒間使用できなくなります。この問題を回避するには、以下のいずれかの方法で対応します。  
データベースが `SCRAM` と `MD5` 認証の両方を許可していることを確認します。
`SCRAM` 認証のみを使用するには、新しいプロキシを作成し、アプリケーショントラフィックを新しいプロキシに移行してから、以前にデータベースに関連付けられていたプロキシを削除します。