

# 设置 RDS 代理的网络先决条件
<a name="rds-proxy-network-prereqs"></a>

 使用 RDS 代理需要您在 Aurora 数据库集群和 RDS 代理之间拥有通用的虚拟私有云（VPC）。此 VPC 应至少有两个位于不同可用区中的子网。您的账户可以拥有这些子网，或与其他账户共享它们。有关 VPC 共享的信息，请参阅[使用共享 VPC](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-sharing.html)。

要支持 IPv6，需要进行额外的网络配置：
+ **IPv6 端点网络类型** - 您的 VPC 和子网必须配置为支持 IPv6。这包括将 IPv6 CIDR 数据块分配给 VPC 和子网。
+ **双栈端点网络类型** – 您的 VPC 和子网必须支持 IPv4 和 IPv6 寻址。
+ **IPv6 目标连接网络类型** – 必须将数据库配置为双栈模式，才能支持来自代理的 IPv6 连接。

您的客户端应用程序资源（例如 Amazon EC2、Lambda 或 Amazon ECS）可以与代理位于同一 VPC 中。它们也可以位于与代理不同的 VPC 中。如果已成功连接到任何 Aurora 数据库集群，则您已拥有所需的网络资源。

**Topics**
+ [获取有关您的子网的信息](#rds-proxy-network-prereqs.subnet-info)
+ [计划 IP 地址容量](#rds-proxy-network-prereqs.plan-ip-address)

## 获取有关您的子网的信息
<a name="rds-proxy-network-prereqs.subnet-info"></a>

 如果您刚刚开始使用 Aurora，您可以遵循[为 Amazon Aurora 设置环境](CHAP_SettingUp_Aurora.md)中的过程，了解连接到数据库的基础知识。您也可以按照 [开始使用 Amazon Aurora](CHAP_GettingStartedAurora.md) 中的教程进行操作。

要创建代理，必须提供代理在其中运行的子网和 VPC。以下 Linux 示例展示了检查 Amazon Web Services 账户 拥有的 VPC 和子网的 Amazon CLI 命令。尤其是，在使用 CLI 创建代理时，您可以将子网 ID 作为参数传递。

```
aws ec2 describe-vpcs
aws ec2 describe-internet-gateways
aws ec2 describe-subnets --query '*[].[VpcId,SubnetId]' --output text | sort
```

以下 Linux 示例展示了用于确定与特定 Aurora 数据库集群对应的子网 ID 的 Amazon CLI 命令。

对于 Aurora 集群，首先，您可以找到其中一个关联数据库实例的 ID。您可以提取该数据库实例使用的子网 ID。为此，请在数据库实例的描述输出中检查 `DBSubnetGroup` 和 `Subnets` 属性中的嵌套字段。在为该数据库服务器设置代理时，您可以指定部分或全部这些子网 ID。

```
$ # Find the ID of any DB instance in the cluster.
$  aws rds describe-db-clusters --db-cluster-identifier my_cluster_id --query '*[].[DBClusterMembers]|[0]|[0][*].DBInstanceIdentifier' --output text
```

```
my_instance_id
instance_id_2
instance_id_3
```

找到数据库实例标识符后，检查关联的 VPC 以查找其子网。以下 Linux 示例展示了操作步骤。

```
$ #From the DB instance, trace through the DBSubnetGroup and Subnets to find the subnet IDs.
$ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0]|[Subnets]|[0]|[*].SubnetIdentifier' --output text
```

```
subnet_id_1
subnet_id_2
subnet_id_3
...
```

```
$ #From the DB instance, find the VPC.
$ aws rds describe-db-instances --db-instance-identifier my_instance_id --query '*[].[DBSubnetGroup]|[0]|[0].VpcId' --output text
```

```
my_vpc_id
```

```
$ aws ec2 describe-subnets --filters Name=vpc-id,Values=my_vpc_id --query '*[].[SubnetId]' --output text
```

```
subnet_id_1
subnet_id_2
subnet_id_3
subnet_id_4
subnet_id_5
subnet_id_6
```

## 计划 IP 地址容量
<a name="rds-proxy-network-prereqs.plan-ip-address"></a>

RDS 代理会根据向它注册的数据库实例自动调整其容量。对于预调配实例，这由实例大小决定，对于 Aurora Serverless v2 实例，则由最大 ACU 容量决定。某些操作可能还需要更多容量，例如增加注册数据库的大小或内部 RDS 代理维护操作。在这些操作期间，您的代理可能需要更多 IP 地址来预调配额外的容量。这些额外的地址使您的代理可以在不影响工作负载的情况下进行扩展。您的子网中缺少可用的 IP 地址会阻止代理纵向扩展。这可能导致查询延迟更长或客户端连接故障。当您的子网中没有足够的可用 IP 地址时，RDS 会通过事件 `RDS-EVENT-0243` 通知您。有关此事件的信息，请参阅 [使用 RDS 代理事件使用 RDS Proxy 事件](rds-proxy.events.md)。

根据数据库实例类大小，您应在子网中为代理保留以下最少可用的 IP 地址数。


|  数据库实例类  |  最少可用 IP 地址数  | 
| --- | --- | 
|  db.\$1.xlarge 或更小   |  10  | 
|  db.\$1.2xlarge   |  15  | 
|  db.\$1.4xlarge   |  25  | 
|  db.\$1.8xlarge   |  45  | 
|  db.\$1.12xlarge   |  60  | 
|  db.\$1.16xlarge   |  75  | 
|  db.\$1.24xlarge   |  110  | 

对于 Aurora Serverless v2，请根据最大 ACU 容量，在子网中为您的代理预留以下最少数量的空闲 IP 地址。


| `Maximum ACU Capacity` |  最少可用 IP 地址数  | 
| --- | --- | 
|  16 个或更少   |  10  | 
|  32  |  15  | 
|  64  |  25  | 
|  96  |  30  | 
|  128  |  40  | 
|  160  |  50  | 
|  192  |  55  | 
|  224  |  65  | 
|  256  |  75  | 

**注意**  
在 VPC 中，每个 RDS 代理消耗的 IP 地址不会超过 215 个。

RDS 代理要求 Aurora 数据库至少有 10 个 IP 地址。这些建议的 IP 地址数是针对仅具有默认端点的代理的估计数。对于每个其他自定义端点，建议您另外预留三个 IP 地址。对于每个 Aurora 读取器实例，我们建议根据该读取器实例的最大 ACU（针对 Aurora Serverless v2 目标）或预调配目标的数据库实例规模，按照表中指定的数量预留额外的 IP 地址。

要估算与具有以下配置的 Aurora 数据库集群关联的代理所需的 IP 地址数量：
+ 1 个大小为 `db.r5.8xlarge` 的预调配写入器实例和 1 个大小为 `db.r5.2xlarge` 的预调配读取器实例。
+ 连接到此集群的代理具有默认端点和 1 个具有只读角色的自定义端点。

在这种情况下，代理需要大约 63 个可用 IP 地址（写入器实例需要 45 个，读取器实例需要 15 个，附加的自定义端点需要 3 个）。

要估算与具有以下配置的 Aurora 数据库集群关联的代理所需的 IP 地址数量：
+ 1 个最大容量为 256 ACU 的 Aurora Serverless v2 写入器实例，以及 1 个最大容量为 192 ACU 的 Serverless v2 读取器实例。
+ 连接到此集群的代理具有默认端点和 1 个具有只读角色的自定义端点。

在这种情况下，代理需要大约 133 个可用 IP 地址（写入器实例需要 75 个，读取器实例需要 55 个，附加的自定义端点需要 3 个）。

要估算与具有以下配置的 Aurora 数据库集群关联的代理所需的 IP 地址数量：
+ 1 个预调配写入器实例，数据库实例规格为 db.r5.4xlarge，以及 1 个最大容量为 64 ACU 的 Serverless v2 读取器实例。
+ 连接到此集群的代理具有默认端点和 1 个具有只读角色的自定义端点。

在这种情况下，代理需要大约 53 个可用 IP 地址（写入器实例需要 25 个，读取器实例需要 25 个，附加的自定义端点需要 3 个）。

要估算与具有以下配置的 Aurora 数据库集群关联的代理所需的 IP 地址数量：
+ 1 个大小为 db.r5.24xlarge 的预调配写入器实例和 3 个大小为 db.r5.8xlarge 的预调配读取器实例。
+ 连接到此数据库集群的代理具有默认端点和 1 个具有只读角色的自定义端点。

在本例中，代理需要 215 个空闲 IP 地址。尽管计算结果显示需要 248 个 IP（110 \$1 (3\$145) \$1 3），但在 VPC 中每个 RDS Proxy 消耗的 IP 地址不会超过 215 个。