

# 修改 RDS 代理
<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.  在导航窗格中，选择 **Proxies (代理)**。

1.  在代理列表中，选择要修改其设置的代理或转到其详细信息页面。

1.  对于 **Actions (操作)**，选择 **Modify (修改)**。

1.  输入或选择要修改的属性。您可以指定如下内容：
   +  **代理标识符** – 通过输入新标识符来重命名代理。
   +  **空闲客户端连接超时** - 输入空闲客户端连接超时的时间段。
   +  **IAM 角色** – 更改用于从 Secrets Manager 中检索密钥的 IAM 角色。
**注意**  
如果将**默认身份验证方案**设置为 **IAM 身份验证**，则无法创建新的 IAM 角色。
   +  **Secrets Manager 密钥** - 添加或删除 SSecrets Manager 密钥。这些密钥对应于数据库用户名和密码。
   +  **客户端身份验证类型** - 更改客户端与代理的连接的身份验证类型。
   +  **IAM authentication**（IAM 身份验证）– 要求或禁止对与代理的连接进行 IAM 身份验证。
   +  **默认身份验证方案** - 更改代理用于客户端与代理之间连接以及代理与底层数据库之间连接的默认身份验证方案。
   +  **需要传输层安全性** - 打开或关闭传输层安全性 (TLS) 的要求。
   +  **VPC 安全组** - 添加或删除供代理使用的 VPC 安全组。
   +  **启用增强型日志记录** - 启用或禁用增强型日志记录。

1.  选择**修改**。

如果您找不到要更改的列出设置，请使用以下过程更新代理的目标组。与代理关联的*目标组*控制与物理数据库连接相关的设置。每个代理都有一个名为 `default` 的关联目标组，该目标组与代理一起自动创建。您无法重命名默认目标组。

 您只能从代理详细信息页面修改目标组，而不能从 **Proxies (代理)** 页面上的列表中进行修改。

**修改代理目标组的设置**

1.  在 **Proxies (代理)** 页面上，转到代理的详细信息页面。

1.  对于 **Target groups (目标组)**，选择 `default` 链接。目前，所有代理都有一个名为 `default` 的目标组。

1.  在**默认**目标组的详细信息页面上，选择 **Modify (修改)**。

1.  为您可以修改的属性选择新设置：
   +  **数据库** – 选择不同的 Aurora 集群。
   +  **连接池最大连接数** – 调整代理可使用的最大可用连接的百分比。
   +  **会话固定筛选条件** -（可选）选择会话固定筛选条件。这绕过了跨客户端多路复用数据库连接的默认安全措施。目前，PostgreSQL 不支持该设置。唯一的选择是 `EXCLUDE_VARIABLE_SETS`。

     启用此设置可能会导致一个连接的会话变量影响其它连接。如果您的查询依赖于在当前事务之外设置的会话变量值，则可能会导致错误或正确性问题。在确认您的应用程序可以安全地跨客户端连接共享数据库连接之后，请考虑使用此选项。

     可以认为以下模式是安全的：
     + `SET` 语句，其中有效会话变量值没有更改，即没有更改会话变量。
     + 您可以更改会话变量值并在同一个事务中执行一条语句。

     有关更多信息，请参阅 [避免固定 RDS 代理](rds-proxy-pinning.md)。
   +  **连接借用超时** - 调整连接借用超时间隔。当最大连接数已用于代理时，此设置适用。该设置确定在返回超时错误之前代理等待连接可用的时间。
   + **初始化查询**。（可选）添加初始化查询或修改当前查询。您可以为代理指定一个或多个 SQL 语句，以便在打开每个新数据库连接时运行。此设置通常与 `SET` 语句一起使用，以确保每个连接具有完全相同的设置。确保您添加的查询有效。要在单个 `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` 的目标组。在您使用此目标组时，请指定代理的名称，并指定 `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` 命令，您可以通过相应的目标组来更改代理关联的 Aurora 数据库集群。目前，每个代理都可以连接到一个 Aurora 数据库集群。目标组可跟踪 Aurora 集群中所有数据库实例的连接详细信息。

 以下示例首先介绍了与名为 `cluster-56-2020-02-25-1399` 的 Aurora MySQL 集群关联的代理。该示例演示了如何更改代理，以便连接到名为 `provisioned-cluster` 的不同集群。

 使用 Aurora 数据库集群时，指定 `--db-cluster-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` 的目标组。在您使用此目标组时，请指定代理的名称，并指定 `default` 作为目标组的名称。您无法重命名默认目标组。

 使用 `DeregisterDBProxyTargets` 和 `RegisterDBProxyTargets`，您可以通过相应的目标组来更改代理关联的 Aurora 集群。目前，每个代理都可以连接到一个 Aurora 集群。目标组可跟踪Aurora 集群中数据库实例的连接详细信息。