

# 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 インスタンス の接続の詳細を追跡します。