

# RDS Proxy の管理
<a name="rds-proxy-managing"></a>

 このセクションでは、RDS Proxy の操作と設定を管理する方法について説明します。以下の手順は、アプリケーションがデータベース接続を最も効率的に使用し、接続を最大限に再利用するのに役立ちます。接続の再利用率を高めるほど、CPU とメモリのオーバーヘッドを減らすことができます。これにより、アプリケーションのレイテンシーを減らし、データベースのより多くのリソースをアプリケーションからのリクエストの処理に集中させることができます。

**Topics**
+ [RDS Proxy の変更](rds-proxy-modifying-proxy.md)
+ [RDS Proxy の使用時に新しいデータベースユーザーを追加する](rds-proxy-new-db-user.md)
+ [RDS Proxy の標準 IAM 認証からエンドツーエンドの IAM 認証への移行](rds-proxy-iam-migration.md)
+ [RDS Proxy 接続に関する考慮事項](rds-proxy-connections.md)
+ [RDS Proxy の固定の回避](rds-proxy-pinning.md)
+ [RDS Proxy の削除](rds-proxy-deleting.md)

# RDS Proxy の変更
<a name="rds-proxy-modifying-proxy"></a>

 プロキシの作成後に、プロキシに関連付けられた固有の設定を変更できます。これを行うには、プロキシ自体、プロキシに関連付けられているターゲットグループ、またはその両方を変更します。各プロキシには、ターゲットグループが関連付けられています。

## AWS マネジメントコンソール
<a name="rds-proxy-modifying-proxy.console"></a>

**重要**  
**クライアント認証タイプ**と **IAM 認証フィールド**の値は、このプロキシに関連付けられているすべての Secrets Manager シークレットに適用されます。シークレットごとに異なる値を指定するには、代わりに AWS CLI または API を使用してプロキシを変更します。

**プロキシの設定を変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1.  ナビゲーションペインで、[**プロキシ**] を選択します。

1.  プロキシのリストで、設定を変更するプロキシを選択するか、その詳細ページに移動します。

1.  [**アクション**]、[**変更**] の順に選択します。

1.  変更するプロパティを入力または選択します。次を変更できます。
   +  **プロキシ識別子** - プロキシの名前を変更するには、新しい識別子を入力します。
   +  **アイドル状態のクライアント接続のタイムアウト** - アイドル状態のクライアント接続のタイムアウトの時間を入力します。
   +  **IAM ロール** - Secrets Manager からシークレットを取得するために使用する IAM ロールを変更します。
**注記**  
**[デフォルト認証スキーム]** を **[IAM 認証]** に設定した場合、新しい IAM ロールを作成することはできません。
   +  **Secrets Manager シークレット** - Secrets Manager シークレットを追加または削除します。これらのシークレットは、データベースのユーザー名とパスワードに対応します。
   +  **クライアント認証タイプ** – プロキシへのクライアント接続の認証タイプを変更します。
   +  **IAM 認証** - プロキシへの接続に IAM 認証をすることを要求または禁止します。
   +  **デフォルト認証スキーム** – プロキシへのクライアント接続とプロキシから基になるデータベースへの接続にプロキシが使用するデフォルトの認証スキームを変更します。
   +  **Transport Layer Security が必要** - Transport Layer Security (TLS) の要件を有効または無効にします。
   +  **VPC セキュリティグループ** - プロキシで使用する VPC セキュリティグループを追加または削除します。
   +  **拡張されたログ記録を有効にする** - 拡張ログ記録を有効または無効にします。

1.  [**変更**] を選択します。

変更する設定がリストにない場合は、以下の手順を使用して、プロキシのターゲットグループを更新します。プロキシに関連付けられている*ターゲットグループ*は、物理データベース接続に関連する設定を制御します。プロキシごとに `default` という名前の 1 つのターゲットグループが関連付けられています。このターゲットグループはプロキシと共に自動的に作成されます。デフォルトのターゲットグループの名前を変更することはできません。

 ターゲットグループは、プロキシの詳細ページからのみ変更できます。[**プロキシ**] ページのリストから変更することはできません。

**プロキシのターゲットグループの設定を変更するには**

1.  [**プロキシ**] ページから、プロキシの詳細ページに移動します。

1.  [**ターゲットグループ**] で、`default` リンクを選択します。現在、すべてのプロキシには `default` という名前のターゲットグループが 1 つ あります。

1.  [**デフォルト**] ターゲットグループの詳細ページで、[**変更**] を選択します。

1.  変更できるプロパティに対して新しい設定を選択します。
   +  **データベース** - 別の RDS DB インスタンスまたはクラスター を選択します。
   +  **接続プールの最大接続数** - プロキシで使用できる最大接続数の割合 (%) を調整できます。
   +  **セッション固定フィルター** - (オプション) セッション固定フィルタを選択します。これにより、クライアント接続間でデータベース接続を多重化するというデフォルトの安全対策が回避されます。現在、設定は PostgreSQL についてはサポートされていません。唯一の選択肢は `EXCLUDE_VARIABLE_SETS` です。

     この設定を有効にすると、ある接続のセッション変数が他の接続に影響を与える可能性があります。これにより、クエリが現在のトランザクション以外に設定されたセッション変数値に依存している場合、エラーや正確性の問題が発生する可能性があります。アプリケーションがクライアント接続間でデータベース接続を共有しても安全であることを確認した後に、このオプションの使用を検討してください。

     以下のパターンは安全だと考えられます。
     + 有効なセッション変数値に変更がない、つまりセッション変数に変更がない `SET` ステートメント。
     + セッション変数の値を変更し、同じトランザクションでステートメントを実行します。

     詳細については、「[RDS Proxy の固定の回避](rds-proxy-pinning.md)」を参照してください。
   +  **接続借用タイムアウト** - 接続借用タイムアウト間隔を調整します。この設定は、プロキシで最大数の接続が既に使用されている場合に適用されます。この設定により、プロキシがタイムアウトエラーを返す前に、接続が使用可能になるまで待つ時間が決まります。
   + **初期化クエリ**。(オプション) 初期化クエリを追加するか、現在のクエリを変更します。新しい各データベース接続を開くときに実行するプロキシ用の 1 つ以上の SQL ステートメントを指定できます。設定は通常、各接続の設定が同一であることを確認するために、`SET` ステートメントとともに使用されます。追加するクエリが有効であることを確認します。1 つの `SET` ステートメントに複数の変数を含めるには、カンマ区切りを使用します。例:

     ```
     SET variable1=value1, variable2=value2
     ```

     複数のステートメントの場合は、セミコロンをセパレータとして使用します。

    ターゲットグループ識別子やデータベースエンジンなどの特定のプロパティは変更できません。

1.  [**Modify target group (ターゲットグループの変更)**] を選択します。

## AWS CLI
<a name="rds-proxy-modifying-proxy.cli"></a>

 AWS CLI を使用してプロキシを変更するには、[modify-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy.html)、[modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html)、[deregister-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/deregister-db-proxy-targets.html)、[register-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/register-db-proxy-targets.html) の各コマンドを使用します。

 `modify-db-proxy` コマンドを使用すると、次のようなプロパティを変更できます。
+  プロキシで使用する一連の Secrets Manager シークレット。
+  TLS が必要かどうか。
+  アイドルクライアントのタイムアウト。
+  デバッグ用に SQL ステートメントからの追加情報をログに記録するかどうか。
+  Secrets Manager シークレットの取得に使用する IAM ロール。
+  プロキシで使用するセキュリティグループ。
+ プロキシに関連付けられたデフォルトの認証スキーム。

 次の例は、既存のプロキシの名前を変更する方法を示しています。

```
aws rds modify-db-proxy --db-proxy-name the-proxy --new-db-proxy-name the_new_name
```

接続関連の設定を変更したり、ターゲットグループの名前を変更したりするには、`modify-db-proxy-target-group` コマンドを使用します。現在、すべてのプロキシには `default` という名前のターゲットグループが 1 つ あります。このターゲットグループを使用する場合、プロキシの名前とターゲットグループ名 (`default`) を指定します。デフォルトのターゲットグループの名前を変更することはできません。

 次の例は、初期にプロキシの `MaxIdleConnectionsPercent` 設定をチェックし、次にターゲットグループを使用して設定を変更する方法を示しています。

```
aws rds describe-db-proxy-target-groups --db-proxy-name the-proxy

{
    "TargetGroups": [
        {
            "Status": "available",
            "UpdatedDate": "2019-11-30T16:49:30.342Z",
            "ConnectionPoolConfig": {
                "MaxIdleConnectionsPercent": 50,
                "ConnectionBorrowTimeout": 120,
                "MaxConnectionsPercent": 100,
                "SessionPinningFilters": []
            },
            "TargetGroupName": "default",
            "CreatedDate": "2019-11-30T16:49:27.940Z",
            "DBProxyName": "the-proxy",
            "IsDefault": true
        }
    ]
}

aws rds modify-db-proxy-target-group --db-proxy-name the-proxy --target-group-name default --connection-pool-config '
{ "MaxIdleConnectionsPercent": 75 }'

{
    "DBProxyTargetGroup": {
        "Status": "available",
        "UpdatedDate": "2019-12-02T04:09:50.420Z",
        "ConnectionPoolConfig": {
            "MaxIdleConnectionsPercent": 75,
            "ConnectionBorrowTimeout": 120,
            "MaxConnectionsPercent": 100,
            "SessionPinningFilters": []
        },
        "TargetGroupName": "default",
        "CreatedDate": "2019-11-30T16:49:27.940Z",
        "DBProxyName": "the-proxy",
        "IsDefault": true
    }
}
```

 `deregister-db-proxy-targets` コマンドと `register-db-proxy-targets` コマンドでは、ターゲットグループを通じてプロキシが関連付けられている RDS DB インスタンス を変更します。現在、各プロキシが接続できる RDS DB インスタンスは 1 つです。ターゲットグループは、マルチ AZ 設定のすべての RDS DB インスタンスの接続の詳細を追跡します。

 次の例では、`cluster-56-2020-02-25-1399` という名前の Aurora MySQL クラスターに関連付けられているプロキシを初期に使用します。次に、このプロキシを変更して `provisioned-cluster` という名前の別のクラスターに接続できるようにします。

 RDS DB インスタンスを使用する場合は、`--db-instance-identifier` オプションを指定します。

 次の例では、Aurora MySQL プロキシを変更します。Aurora PostgreSQL プロキシにはポート 5432 があります。

```
aws rds describe-db-proxy-targets --db-proxy-name the-proxy

{
    "Targets": [
        {
            "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "instance-9814"
        },
        {
            "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "instance-8898"
        },
        {
            "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "instance-1018"
        },
        {
            "Type": "TRACKED_CLUSTER",
            "Port": 0,
            "RdsResourceId": "cluster-56-2020-02-25-1399"
        },
        {
            "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "instance-4330"
        }
    ]
}

aws rds deregister-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier cluster-56-2020-02-25-1399

aws rds describe-db-proxy-targets --db-proxy-name the-proxy

{
    "Targets": []
}

aws rds register-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier provisioned-cluster

{
    "DBProxyTargets": [
        {
            "Type": "TRACKED_CLUSTER",
            "Port": 0,
            "RdsResourceId": "provisioned-cluster"
        },
        {
            "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "gkldje"
        },
        {
            "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com",
            "Type": "RDS_INSTANCE",
            "Port": 3306,
            "RdsResourceId": "provisioned-1"
        }
    ]
}
```

## RDS API
<a name="rds-proxy-modifying-proxy.api"></a>

 RDS API を使用してプロキシを変更するには、[ModifyDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxy.html)、[ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html)、[DeregisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeregisterDBProxyTargets.html)、[RegisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RegisterDBProxyTargets.html) の各オペレーションを使用します。

 `ModifyDBProxy` では、次のようなプロパティを変更できます。
+  プロキシで使用する一連の Secrets Manager シークレット。
+  TLS が必要かどうか。
+  アイドルクライアントのタイムアウト。
+  デバッグ用に SQL ステートメントからの追加情報をログに記録するかどうか。
+  Secrets Manager シークレットの取得に使用する IAM ロール。
+  プロキシで使用するセキュリティグループ。

`ModifyDBProxyTargetGroup` では、接続関連の設定を変更できます。現在、すべてのプロキシには `default` という名前のターゲットグループが 1 つ あります。このターゲットグループを使用する場合、プロキシの名前とターゲットグループ名 (`default`) を指定します。デフォルトのターゲットグループの名前を変更することはできません。

 `DeregisterDBProxyTargets` および `RegisterDBProxyTargets` では、ターゲットグループを通じてプロキシが関連付けられる RDS DB インスタンスを変更します。現在、各プロキシが接続できる RDS DB インスタンス は 1 つです。ターゲットグループは、マルチ AZ 設定の RDS DB インスタンス の接続の詳細を追跡します。

# RDS Proxy の使用時に新しいデータベースユーザーを追加する
<a name="rds-proxy-new-db-user"></a>

状況に応じて、プロキシに関連付けられている RDS DB インスタンス に新しいデータベースユーザーを追加できます。Secrets Manager シークレットで標準認証を使用しているか、エンドツーエンドの IAM 認証を使用しているかに応じて続行します。

標準の IAM 認証を使用している場合は、以下の手順に従います。

1. 「[RDS Proxy のデータベース認証情報の設定](rds-proxy-secrets-arns.md)」で説明している手順を使用して、新しい Secrets Manager シークレットを作成します。

1. IAM ロールを更新して、RDS Proxy に新しい Secrets Manager シークレットへのアクセスを許可します。そのためには、IAM ロールポリシーのリソースセクションを更新します。

1. RDS Proxy を変更して、**[Secrets Manager のシークレット]** に新しい Secrets Manager のシークレットを追加します。

1.  既存のユーザーを新しいユーザーに置き換える場合は、プロキシで既存のユーザーの Secrets Manager シークレットに保存されている認証情報を更新します。

エンドツーエンドの IAM 認証を使用している場合は、データベースユーザーを作成し、IAM アクセス許可を設定する必要があります。これを行うには、次のステップを実行します。

1. 認証に使用する IAM ユーザーまたはロール名と一致する新しいデータベースユーザーをデータベースに作成します。

1. データベースユーザーがデータベースで IAM 認証プラグインを使用して設定されていることを確認します。「[IAM 認証を使用したデータベースアカウントの作成](UsingWithRDS.IAMDBAuth.DBAccounts.md)」を参照してください。

1. 「[エンドツーエンドの IAM 認証用の IAM ポリシーの作成](rds-proxy-iam-setup.md#rds-proxy-iam-setup-e2e-steps)」で説明されているように、IAM ユーザーまたはロールに `rds-db:connect` アクセス許可を付与するように IAM ポリシーを更新します。

1. デフォルトの認証スキームとして IAM 認証を使用するようにプロキシが設定されていることを確認します。

エンドツーエンドの IAM 認証では、クライアントからプロキシ、プロキシからデータベースへの認証に IAM 認証情報が使用されるため、Secrets Manager シークレットでデータベース認証情報を管理する必要はありません。

## RDS Proxy を使用する場合に PostgreSQL データベースに新しいデータベースユーザーを追加する
<a name="rds-proxy-new-db-user-pg"></a>

PostgreSQL データベースに新しいユーザーを追加するとき、次のコマンドを実行する必要がある場合は、次のコマンドを実行します。

```
REVOKE CONNECT ON DATABASE postgres FROM PUBLIC;
```

ユーザーがターゲットデータベース上の接続をモニタリングできるように、`rdsproxyadmin` ユーザーに `CONNECT` 権限を付与します。

```
GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;
```

上記のコマンドで `rdsproxyadmin` をデータベースユーザーに変更することで、他のターゲットデータベースユーザーにヘルスチェックの実行を許可することもできます。

## RDS Proxy を使用する場合のデータベースユーザーのパスワードの変更
<a name="rds-proxy-changing-db-user-password"></a>

状況に応じて、プロキシに関連付けられている RDS DB インスタンス のデータベースユーザーのパスワードを変更できます。その場合は、対応する Secrets Manager シークレットを新しいパスワードで更新します。

エンドツーエンドの IAM 認証を使用している場合は、Secrets Manager シークレットのパスワードを更新する必要はありません。

# RDS Proxy の標準 IAM 認証からエンドツーエンドの IAM 認証への移行
<a name="rds-proxy-iam-migration"></a>

 現在 RDS Proxy の標準 IAM 認証を使用している場合、クライアントは IAM を使用してプロキシを認証し、プロキシはシークレットを使用してデータベースに接続するため、クライアントからプロキシへの接続とプロキシからデータベースへの接続の両方が IAM 認証を使用するエンドツーエンドの IAM 認証に移行できます。

**エンドツーエンド IAM 認証に移行するには**

1. **RDS Proxy IAM ロールのアクセス許可を更新する**

   Secrets Manager と `rds:db-connect` アクセス許可の両方を含む更新されたプロキシアクセス許可ポリシーを作成します。

   ```
   # Create updated proxy permission policy
   cat > updated-proxy-policy.json ≪ EOF
   ```

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "GetSecretsValue",
         "Action": [
           "secretsmanager:GetSecretValue"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-1234f"
         ]
       },
       {
         "Sid": "RdsDBConnect",
         "Action": [
           "rds-db:connect"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:rds-db:us-east-1:123456789012:dbuser:cluster-ABCDEFGHIJKL01234/jane_doe"
         ]
       }
     ]
   }
   ```

   ロールポリシーのプロキシを更新します。

   ```
   aws iam put-role-policy \
               --role-name RDSProxyRole \
               --policy-name UpdatedProxyPermissions \
               --policy-document file://updated-proxy-policy.json
   ```

1. RDS Proxy を変更してエンドツーエンドの IAM 認証を有効にする

   ```
   aws rds modify-db-proxy \
     --db-proxy-name my-database-proxy \
     --default-auth-scheme IAM_AUTH \
     --region us-east-1
   ```

   移行中のダウンタイムがゼロであることを確認する前に、RDS Proxy のステータスが **[利用可能]** で、`DefaultAuthScheme` が `IAM_AUTH` であることを確認します。

   ```
   aws rds describe-db-proxies --db-proxy-name my-database-proxy --region us-east-1
   ```

   正常な出力:

   ```
   {
     "DBProxies": [
       {
         "DBProxyName": "my-database-proxy",
         "DBProxyArn": "arn:aws:rds:us-east-1:123456789012:db-proxy:prx-0123456789abcdef",
         "Status": "available",
         ...
         "DefaultAuthScheme": "IAM_AUTH"
       }
     ]
   }
   ```

1. データベースで IAM 認証を有効にする

   ```
   aws rds modify-db-cluster \
     --db-cluster-identifier my-database-cluster \
     --enable-iam-database-authentication \
     --region us-east-1
   ```

1. IAM 認証用のデータベースユーザーを設定する

   RDS for PostgreSQL の場合:

   ```
   GRANT rds_iam TO jane_doe;
   ```

   RDS for MariaDB および RDS for MySQL の場合:

   ```
   ALTER USER 'jane_doe' IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS';
   ALTER USER 'jane_doe'@'%' REQUIRE SSL;
   ```

1. クライアントアプリケーションコードを変更する必要はありません。接続プロセスは同じままです。

   RDS for PostgreSQL の場合:

   ```
   # Generate authentication token
   export PGPASSWORD=$(aws rds generate-db-auth-token \
     --hostname my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     --port 5432 \
     --username jane_doe \
     --region us-east-1)
   
   # Connect to database through proxy
   psql "host=my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com port=5432 user=jane_doe dbname=postgres password=$PGPASSWORD sslmode=require sslrootcert=us-east-1-bundle.pem"
   ```

   RDS for MariaDB および RDS for MySQL の場合:

   ```
   # Generate authentication token
   export MYSQL_PWD=$(aws rds generate-db-auth-token \
     --hostname my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     --port 3306 \
     --username jane_doe \
     --region us-east-1)
   
   # Connect to database through proxy
   mysql -h my-database-proxy.proxy-ABCDEFGHIJKL01234.us-east-1.rds.amazonaws.com \
     -P 3306 \
     -u jane_doe \
     --ssl-ca=us-east-1-bundle.pem \
     --enable-cleartext-plugin
   ```

# RDS Proxy 接続に関する考慮事項
<a name="rds-proxy-connections"></a>

## 接続設定の構成
<a name="rds-proxy-connection-pooling-tuning"></a>

RDS Proxy の接続プーリングを調整するには、以下の設定を変更します。
+ [IdleClientTimeout](#rds-proxy-connection-pooling-tuning.idleclienttimeout)
+ [MaxConnectionsPercent](#rds-proxy-connection-pooling-tuning.maxconnectionspercent)
+ [MaxIdleConnectionsPercent](#rds-proxy-connection-pooling-tuning.maxidleconnectionspercent)
+ [ConnectionBorrowTimeout](#rds-proxy-connection-pooling-tuning.connectionborrowtimeout)

### IdleClientTimeout
<a name="rds-proxy-connection-pooling-tuning.idleclienttimeout"></a>

プロキシがクライアント接続を閉じるまでの間、接続がアイドル状態を継続できる時間を指定できます。デフォルトは 1,800 秒 (30 分) です。

クライアント接続が*アイドル状態*と見なされるのは、前のリクエストの完了後、新しいリクエストが指定時間内にアプリケーションから送信されない場合です。基となるデータベース接続は開いたままで、接続プールに返されるため、新しいクライアント接続で再利用できます。プロキシで古い接続を事前に削除する場合は、クライアント接続でのアイドル状態のタイムアウトを短くすることを検討してください。ワークロードが頻繁にプロキシとの接続を確立する場合には、接続コストを節約するために、クライアント接続でのアイドル状態のタイムアウトを長くすることを検討してください。

この設定は、RDS コンソール内の **[Idle client connection timeout]** (アイドルクライアントの接続タイムアウト) フィールドと、AWS CLI および API の `IdleClientTimeout` 設定で行います。RDS コンソールで **[Idle client connection timeout]** (アイドルクライアントの接続タイムアウト) フィールドの値を変更する方法については、「[AWS マネジメントコンソール](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console)」を参照してください。`IdleClientTimeout` 設定の値を変更するには、CLI コマンドの [modify-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy.html) または API の [ModifyDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxy.html) オペレーションを参照してください。

### MaxConnectionsPercent
<a name="rds-proxy-connection-pooling-tuning.maxconnectionspercent"></a>

RDS Proxy がターゲットデータベースに対して確立できる接続の数を制限できます。上限は、データベースで使用可能な最大接続数に対する割合 (%) で指定します。この設定には、RDS Proxy コンソールの [**接続プールの最大接続数**] フィールド、または AWS CLI と API の `MaxConnectionsPercent` パラメータを使用します。

`MaxConnectionsPercent` 値はターゲットグループが使用する RDS DB インスタンス の `max_connections` 設定に対するパーセンテージで表されます。プロキシは、これらの接続のすべてを事前に作成するわけではありません。この設定では、ワークロードが必要とするときに、プロキシがこれらの接続を確立できます。

例えば、登録済みのデータベースターゲットの `max_connections` が 1000 に設定され、`MaxConnectionsPercent` が 95 に設定されている場合、RDS Proxy はそのデータベースターゲットへの同時接続の上限として 950 接続を設定します。

ワークロードが許容されるデータベース接続の最大数に達したときによく見られる副作用として、全体的なクエリ待ち時間が増加し、`DatabaseConnectionsBorrowLatency` メトリクスも増加します。`DatabaseConnections` メトリクスと `MaxDatabaseConnectionsAllowed` メトリクスを比較することで、現在使用中のデータベース接続数と許可されているデータベース接続の合計数を監視できます。

このパラメータを設定する場合は、次のベストプラクティスに注意してください。
+ ワークロードパターンの変化に備えて、接続に十分な余裕を持たせてください。このパラメータは、最近監視した最大使用量より少なくとも 30% 高く設定することをお勧めします。RDS Proxy はデータベース接続クォータを複数のノードに再配分するため、内部容量の変更に伴い、借用レイテンシーの増加を避けるために、少なくとも 30% の余裕を持たせて接続を追加することが必要になる場合があります。
+ RDS Proxy は、高速フェイルオーバー、トラフィックルーティング、内部オペレーションをサポートするために、アクティブモニタリング用に一定数の接続を予約します。`MaxDatabaseConnectionsAllowed` メトリクスには、これらの予約済み接続は含まれません。これはワークロードの処理に使用できる接続の数を表し、`MaxConnectionsPercent` 設定から算出された値よりも小さい場合があります。

  `MaxConnectionsPercent` の最小推奨値
  + db.t3.small: 30
  + db.t3.medium またはそれ以上: 20

RDS コンソールの **[Connection pool maximum connections]** (接続プールの最大接続数) フィールドの値を変更する方法については、「[AWS マネジメントコンソール](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console)」を参照してください。`MaxConnectionsPercent` 設定での値の変更については、CLI コマンドの「[modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html)」、または API オペレーションの「[ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html)」を参照してください。

 データベース接続での上限の詳細については、「[データベース接続の最大数](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections)」を参照してください。

### MaxIdleConnectionsPercent
<a name="rds-proxy-connection-pooling-tuning.maxidleconnectionspercent"></a>

RDS Proxy が接続プール内にアイドル状態で保持できる、データベース接続の数を制御できます。デフォルトでは、RDS Proxy は、接続に対するアクティビティが 5 分間なかった場合に、プール内のデータベース接続を*アイドル状態*とみなします。

`MaxIdleConnectionsPercent` 値は、RDS DB インスタンスターゲットグループの `max_connections` 設定のパーセンテージとして表されます。そのデフォルト値は `MaxConnectionsPercent` の 50% で、上限は `MaxConnectionsPercent` の値で指定します。例えば、`MaxConnectionsPercent` が 80 の場合、`MaxIdleConnectionsPercent` のデフォルト値は 40 です。`MaxConnectionsPercent` の値が指定されていない場合、RDS for SQL Server では `MaxIdleConnectionsPercent` は 5 であり、その他すべてのエンジンのデフォルト値は 50 です。

値を大きくすると、プロキシではアイドル状態のデータベース接続の大部分を開いたままにします。値を小さくすると、プロキシではアイドル状態のデータベース接続の大部分を閉じます。ワークロードが予測できない場合は、`MaxIdleConnectionsPercent` には大きな値を設定するように検討してください。これにより、RDS Proxy では多数の新しいデータベース接続を開くことなく、アクティビティの急増に対応できるようになります。

この設定には、AWS CLI と API における `DBProxyTargetGroup` の `MaxIdleConnectionsPercent` 設定を使用します。`MaxIdleConnectionsPercent` 設定での値の変更については、CLI コマンドの「[modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html)」、または API オペレーションの「[ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html)」を参照してください。

 データベース接続での上限の詳細については、「[データベース接続の最大数](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections)」を参照してください。

### ConnectionBorrowTimeout
<a name="rds-proxy-connection-pooling-tuning.connectionborrowtimeout"></a>

RDS Proxy がタイムアウトエラーを返す前に、接続プール内のデータベース接続が使用可能になるまで待つ時間を指定できます。デフォルト値は 120 秒です。この設定値は、接続数が最大値に達し、接続プールで利用可能な接続がなくなった場合に適用されます。また、例えば、フェイルオーバー操作が進行中であるなどの理由で、リクエストを処理するために使用できる適切なデータベースインスタンスがない場合にも適用されます。この設定を使用すると、アプリケーションコードでクエリタイムアウトを変更しなくても、アプリケーションに最適な待機期間を設定できます。

この設定には、RDS Proxy コンソールの [**接続借用タイムアウト**] フィールド、または AWS CLI と API における `DBProxyTargetGroup` の `ConnectionBorrowTimeout` 設定を使用します。RDS コンソールの **[Connection borrow timeout]** (接続借用タイムアウト) フィールドの値を変更する方法については、「[AWS マネジメントコンソール](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console)」を参照してください。`ConnectionBorrowTimeout` 設定での値の変更については、CLI コマンドの「[modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html)」、または API オペレーションの「[ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html)」を参照してください。

## クライアント接続とデータベース接続
<a name="rds-proxy-connection-life"></a>

アプリケーションから RDS Proxy への接続は、クライアント接続と呼ばれます。プロキシからデータベースへの接続はデータベース接続です。RDS Proxy を使用する場合、クライアント接続はプロキシで終了し、データベース接続は RDS Proxy 内で管理されます。

アプリケーション側の接続プーリングは、アプリケーションと RDS Proxy 間で繰り返し接続を確立する回数が減るというメリットを提供します。

アプリケーション側の接続プールを実装する前に、以下の設定について考慮してください。
+ クライアント接続の最大有効期間: RDS Proxy では、クライアント接続の最大有効期間は 24 時間です。この値は設定できません。クライアント接続が予期せず切断されないように、プールは最大接続時間を 24 時間未満に設定してください。
+ クライアント接続アイドルタイムアウト: RDS Proxy は、クライアント接続の最大アイドル時間を適用します。予期せぬ接続の切断を避けるため、RDS Proxy のクライアント接続アイドルタイムアウト設定よりも低い値のアイドル接続タイムアウトをプールに設定します。

アプリケーション側の接続プールに設定されるクライアント接続の最大数は、RDS Proxy の **max\$1connections** 設定に制限される必要はありません。

クライアント接続プールにより、クライアント接続の時間が長くなります。接続にピニングが発生した場合、クライアント接続をプールすると多重化の効率が低下する可能性があります。ピニングされているものの、アプリケーション側の接続プールでアイドル状態のクライアント接続は、引き続きデータベース接続を保持し、そのデータベース接続が他のクライアント接続で再利用されるのを防ぎます。プロキシログを確認して、接続にピニングが発生していないかチェックしてください。

**注記**  
RDS Proxy は、データベース接続が使用されなくなった 24 時間後にその接続を閉じます。プロキシは、アイドル状態の最大接続数の設定値に関係なく、このアクションを実行します。

# RDS Proxy の固定の回避
<a name="rds-proxy-pinning"></a>

 データベースリクエストが以前のリクエストの状態情報に依存しない場合、多重化の効率が高まります。その場合、RDS Proxy は、各トランザクションの終了時に接続を再利用できます。このような状態情報の例には、`SET` ステートメントや `SELECT` ステートメントで変更できるほとんどの可変や設定パラメータが含まれます。クライアント接続の SQL トランザクションでは、デフォルトで、基となるデータベース接続を多重化できます。

 プロキシへの接続は、*固定*と呼ばれる状態に入る場合があります。接続が固定されると、以降の各トランザクションは、セッションが終了するまで、同じ基になるデータベース接続を使用します。また、他のクライアント接続は、セッションが終了するまでそのデータベース接続を再利用できません。クライアント接続がドロップされると、セッションは終了します。

 RDS Proxy は、他のセッションに不適切なセッション状態の変化を検出すると、クライアント接続を特定の DB 接続に自動的に固定します。固定により、接続の再利用の有効性が低下します。すべての接続やほぼすべての接続で固定が発生する場合は、固定が発生する状態を減らすようにアプリケーションコードやワークロードを変更します。

例えば、アプリケーションによってセッションの変数や設定パラメータが変更されたとします。この場合、後続のステートメントは変更後の変数やパラメータが有効かどうかによって変わります。したがって、RDS Proxy はセッションの可変や構成設定の変更リクエストを処理する場合、そのセッションを DB 接続に固定します。これにより、セッション状態は、同じセッション内の後続のすべてのトランザクションで有効になります。

 一部のデータベースエンジンでは、設定可能なすべてのパラメータにこのルールが適用されるわけではありません。RDS Proxy は、特定のステートメントと変数を追跡します。したがって、これらの変更時に RDS Proxy はセッションを固定しません。この場合、RDS Proxy は、これらの設定の値が同じである他のセッションでのみ、接続を再利用します。RDS Proxy がデータベースエンジンで追跡する内容の詳細については、以下を参照してください。
+ [RDS Proxy が RDS for SQL Server データベースに対して追跡する内容](#rds-proxy-pinning.sql-server-tracked-vars)
+ [RDS Proxy が RDS for MariaDB および RDS for MySQL データベースに対して追跡する内容](#rds-proxy-pinning.mysql-tracked-vars)

## RDS Proxy が RDS for SQL Server データベースに対して追跡する内容
<a name="rds-proxy-pinning.sql-server-tracked-vars"></a>

RDS Proxy が追跡する SQL Server のステートメントは以下のとおりです。
+ `USE`
+ `SET ANSI_NULLS`
+ `SET ANSI_PADDING`
+ `SET ANSI_WARNINGS`
+ `SET ARITHABORT`
+ `SET CONCAT_NULL_YIELDS_NULL`
+ `SET CURSOR_CLOSE_ON_COMMIT`
+ `SET DATEFIRST`
+ `SET DATEFORMAT`
+ `SET LANGUAGE`
+ `SET LOCK_TIMEOUT`
+ `SET NUMERIC_ROUNDABORT`
+ `SET QUOTED_IDENTIFIER`
+ `SET TEXTSIZE`
+ `SET TRANSACTION ISOLATION LEVEL`

## RDS Proxy が RDS for MariaDB および RDS for MySQL データベースに対して追跡する内容
<a name="rds-proxy-pinning.mysql-tracked-vars"></a>

RDS Proxy が追跡する MariaDB および MySQL のステートメントは以下のとおりです。
+ DROP DATABASE
+ DROP SCHEMA
+ 使用

RDS Proxy が追跡する MySQL および MariaDB の変数は以下のとおりです。
+ `AUTOCOMMIT`
+ `AUTO_INCREMENT_INCREMENT`
+ `CHARACTER SET (or CHAR SET)`
+ `CHARACTER_SET_CLIENT`
+ `CHARACTER_SET_DATABASE`
+ `CHARACTER_SET_FILESYSTEM`
+ `CHARACTER_SET_CONNECTION`
+ `CHARACTER_SET_RESULTS`
+ `CHARACTER_SET_SERVER`
+ `COLLATION_CONNECTION`
+ `COLLATION_DATABASE`
+ `COLLATION_SERVER`
+ `INTERACTIVE_TIMEOUT`
+ `NAMES`
+ `NET_WRITE_TIMEOUT`
+ `QUERY_CACHE_TYPE`
+ `SESSION_TRACK_SCHEMA`
+ `SQL_MODE`
+ `TIME_ZONE`
+ `TRANSACTION_ISOLATION (or TX_ISOLATION)`
+ `TRANSACTION_READ_ONLY (or TX_READ_ONLY)`
+ `WAIT_TIMEOUT`

**注記**  
RDS Proxy は、セッションスコープで設定すると、`TRANSACTION_ISOLATION` 変数と `TRANSACTION_READ_ONLY` 変数の変更を追跡します。ただし、次のトランザクションスコープで設定すると、RDS Proxy は接続を固定します。この動作は、`SET` ステートメントと `SET TRANSACTION` ステートメントのどちらを使用してこれらの値を設定する場合でも適用されます。

## 固定を最小化する
<a name="rds-proxy-pinning.minimizing"></a>

 RDS Proxy のパフォーマンスチューニングでは、固定を最小化してトランザクションレベルの接続の再利用 (多重化) を最大化します。

以下の方法で、固定を最小化できます。
+  固定の原因となる可能性のある不要なデータベースリクエストを避けます。
+  すべての接続間で可変と構成設定を一貫して設定します。これにより、これらの特定の設定を持つ接続が後続のセッションで再利用される可能性が高くなります。

   ただし、PostgreSQL では、可変の設定によりセッションの固定が発生します。
+  MySQL エンジンファミリデータベースの場合、セッション固定フィルターをプロキシに適用します。特定の種類のオペレーションがアプリケーションの正常な動作に影響しないことがわかっている場合、これらのオペレーションを除外してセッションの固定を起こさないように指定できます。
+  Amazon CloudWatch メトリクス `DatabaseConnectionsCurrentlySessionPinned` をモニタリングして、固定が発生する頻度を確認します。このメトリクスおよび他の CloudWatch メトリクスの詳細については、「[Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリングCloudWatch を使用した RDS Proxy のモニタリング](rds-proxy.monitoring.md)」を参照してください。
+  `SET` ステートメントを使用して各クライアント接続を同等に初期化する場合、トランザクションレベルの多重化を維持したまま、この初期化を実行できます。この場合、初期セッション状態を設定するステートメントを、プロキシが使用する初期化クエリに移動します。このプロパティは、セミコロンで区切られた 1 つ以上の SQL ステートメントを含む文字列です。

   例えば、特定の設定パラメータを設定する初期化クエリをプロキシに定義できます。これにより、RDS Proxy でプロキシの新しい接続を設定するたびに、これらの設定が適用されます。トランザクションレベルの多重化を妨げないように、アプリケーションコードから対応する `SET` ステートメントを削除できます。

   プロキシでの固定の発生回数のメトリクスについては、「[Amazon CloudWatch を使用した RDS Proxy メトリクスのモニタリングCloudWatch を使用した RDS Proxy のモニタリング](rds-proxy.monitoring.md)」を参照してください。

## すべてのエンジンファミリーで固定が発生する条件
<a name="rds-proxy-pinning.all"></a>

 以下の場合は、多重化が予期しない動作をもたらす可能性があるため、プロキシはセッションを現在の接続に固定します。
+ ステートメントのテキストサイズが 16 KB を超える場合、プロキシはセッションを固定します。

## RDS for Microsoft SQL で固定が発生する条件
<a name="rds-proxy-pinning.sqlserver"></a>

 RDS for SQL サーバーでは、次の操作でも固定が発生します。
+ 複数のアクティブな結果セット (MARS) の使用。MARS の詳細については、[SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/native-client/features/using-multiple-active-result-sets-mars?view=sql-server-ver16) のドキュメントを参照してください。
+ 分散トランザクションコーディネーター (DTC) 通信の使用。
+ 一時テーブル、トランザクション、カーソル、準備済みステートメントの作成。
+ 次の `SET` ステートメントを使用してください。
  + `SET ANSI_DEFAULTS`
  + `SET ANSI_NULL_DFLT`
  + `SET ARITHIGNORE`
  + `SET DEADLOCK_PRIORITY`
  + `SET FIPS_FLAGGER`
  + `SET FMTONLY`
  + `SET FORCEPLAN`
  + `SET IDENTITY_INSERT`
  + `SET NOCOUNT`
  + `SET NOEXEC`
  + `SET OFFSETS`
  + `SET PARSEONLY`
  + `SET QUERY_GOVERNOR_COST_LIMIT`
  + `SET REMOTE_PROC_TRANSACTIONS`
  + `SET ROWCOUNT`
  + `SET SHOWPLAN_ALL`、`SHOWPLAN_TEXT`、および `SHOWPLAN_XML`
  + `SET STATISTICS`
  + `SET XACT_ABORT`

## RDS for MariaDB と RDS for MySQL で固定が発生する条件
<a name="rds-proxy-pinning.mysql"></a>

 MariaDB と MySQL の場合、次の操作に伴ってピニングも発生します。
+ 明示的なテーブルロックステートメントである `LOCK TABLE`、`LOCK TABLES`、または `FLUSH TABLES WITH READ LOCK` が原因でプロキシによるセッションの固定が発生します。
+ `GET_LOCK` を使用して名前付きロックを作成するプロキシはセッションを固定します。
+ ユーザー変数またはシステム変数を設定すると (一部例外あり)、セッションはプロキシに固定されます。これにより接続の再利用が大幅に制限される場合は、固定されないように `SET` オペレーションを設定できます。これを行うには、セッション固定フィルターのプロパティを調整します。詳細については、「[Amazon RDS のプロキシの作成](rds-proxy-creating.md)」および「[RDS Proxy の変更](rds-proxy-modifying-proxy.md)」を参照してください。
+ 一時テーブルを作成した場合、プロキシはセッションを固定します。これにより、トランザクションの境界に関係なく、一時テーブルの内容がセッション全体で保持されます。
+ 関数 `ROW_COUNT` および `FOUND_ROWS` を呼び出すと、固定が発生する場合があります。
+ プリペアドステートメントの場合、プロキシはセッションを固定します。このルールは、プリペアドステートメントで SQL テキストを使用するか、バイナリプロトコルを使用するかに関係なく、適用されます。
+ SET LOCAL を使用する場合、RDS Proxy は接続を固定しません。
+ ストアドプロシージャやストアド関数を呼び出しても、固定は発生しません。RDS Proxy は、このような呼び出しに伴うセッション状態の変更を検出しません。トランザクション間でのセッション状態の維持を活用している場合は、アプリケーションがストアド ルーチン内でセッション状態を変更しないようにする必要があります。例えば、RDS プロキシは現在、すべてのトランザクションにわたって永続化される一時テーブルを作成するストアドプロシージャと互換性がありません。
+ MySQL (構文 /\$1\$1 ... \$1/) または MariaDB (構文 /\$1M\$1 ... \$1/) の実行可能なコメントを含むクエリでは、ピン留めが発生します。RDS Proxy は、これらのコメントに埋め込まれた SQL を解析してセッション状態の変化を追跡することはできません。

 アプリケーションの動作に関する専門知識がある場合は、特定のアプリケーションステートメントについて固定動作をスキップできます。これを行うには、プロキシの作成時に [**セッションの固定フィルタ**] オプションを選択します。現在、セッションの可変や構成設定の定義により発生するセッションの固定を回避できます。

## RDS for PostgreSQL で固定が発生する条件
<a name="rds-proxy-pinning.postgres"></a>

 PostgreSQL の場合、次の操作に伴って固定も発生します。
+  `SET` コマンドの使用
+  `PREPARE` コマンド、`DISCARD` コマンド、`DEALLOCATE` コマンド、または `EXECUTE` コマンドを使用したプリペアドステートメントの管理
+  一時シーケンス、テーブル、またはビューの作成
+  カーソルの宣言
+  セッション状態の破棄
+  通知チャネルでのリッスン
+  `auto_explain` などのライブラリモジュールのロード
+  `nextval` や `setval` などの関数を使用したシーケンスの操作
+  `pg_advisory_lock` や `pg_try_advisory_lock` などの関数を使用したロックの操作 
**注記**  
RDS プロキシは、トランザクションレベルのアドバイザリロック (特に `pg_advisory_xact_lock`、`pg_advisory_xact_lock_shared`、`pg_try_advisory_xact_lock`、`pg_try_advisory_xact_lock_shared`) をピン留めしません。
+ パラメータの設定、またはパラメータのデフォルトへのリセット。具体的には、`SET` コマンドと `set_config` コマンドを使用して、セッション変数にデフォルト値を割り当てます。
+ ストアドプロシージャやストアド関数を呼び出しても、固定は発生しません。RDS Proxy は、このような呼び出しに伴うセッション状態の変更を検出しません。トランザクション間でのセッション状態の維持を活用している場合は、アプリケーションがストアド ルーチン内でセッション状態を変更しないようにする必要があります。例えば、RDS プロキシは現在、すべてのトランザクションにわたって永続化される一時テーブルを作成するストアドプロシージャと互換性がありません。
+ セッション状態の破棄。使用している接続プールライブラリで `DISCARD ALL` クエリをリセットクエリとして設定した場合、RDS Proxy は解放時にクライアント接続を固定します。これに伴って、`DISCARD ALL` コマンドがセッション状態の管理を妨げる場合があり、プロキシの多重化効率が低下し、予期しない結果につながる可能性があります。

# RDS Proxy の削除
<a name="rds-proxy-deleting"></a>

 不要になったプロキシは削除できます。または、プロキシに関連付けられている DB インスタンスやクラスターがサービスから外された場合に、プロキシを削除できます。

## AWS マネジメントコンソール
<a name="rds-proxy-deleting.console"></a>

**プロキシを削除するには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1.  ナビゲーションペインで、[**プロキシ**] を選択します。

1.  リストから削除するプロキシを選択します。

1.  [**Delete Proxy (プロキシの削除)**] を選択します。

## AWS CLI
<a name="rds-proxy-deleting.CLI"></a>

 DB プロキシを削除するには、AWS CLI コマンド [delete-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-proxy.html) を使用します。該当する関連付けを削除するには、[deregister-db-proxy-targets](https://docs.aws.amazon.com/cli/latest/reference/rds/deregister-db-proxy-targets.html) コマンドも使用します。

```
aws rds delete-db-proxy --name proxy_name
```

```
aws rds deregister-db-proxy-targets
    --db-proxy-name proxy_name
    [--target-group-name target_group_name]
    [--target-ids comma_separated_list]       # or
    [--db-instance-identifiers instance_id]       # or
    [--db-cluster-identifiers cluster_id]
```

## RDS API
<a name="rds-proxy-deleting.API"></a>

 DB プロキシを削除するには、Amazon RDS API 関数 [DeleteDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBProxy.html) を呼び出します。関連する項目と関連付けを削除するには、関数 [DeleteDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBProxyTargetGroup.html) と [DeregisterDBProxyTargets](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeregisterDBProxyTargets.html) も呼び出します。