在 VPC 中使用数据库实例
您的数据库实例位于虚拟私有云(VPC)内。Amazon VPC 是一个虚拟网络,在逻辑上与AWS云中的其他虚拟网络相互隔离。使用 Amazon VPC,您可能能够将 AWS 资源(例如,Amazon RDS 数据库实例或 Amazon EC2 实例),启动到 VPC 中。VPC 可以是您的账户附带的默认 VPC,也可以是您创建的 VPC。所有 VPC 均与您的 AWS 账户关联。
默认 VPC 具有可用来隔离 VPC 内资源的三个子网。默认 VPC 还具有一个互联网网关,可用来从 VPC 外部访问 VPC 内部的资源。
有关涉及 VPC 内和 VPC 外的 Amazon RDS 数据库实例的场景的列表,请参阅在 VPC 中访问数据库实例的场景。
在以下教程中,您可以学习创建可用于常见 Amazon RDS 场景的 VPC:
在 VPC 中使用数据库实例
下面是一些有关在 VPC 中使用数据库实例的提示:
-
您的 VPC 必须至少有两个子网。这些子网必须位于要部署数据库实例的 AWS 区域中两个不同的可用区。子网 是 VPC 的 IP 地址范围段,您可以指定子网,利用子网并根据安全和操作需要对数据库实例进行分组。
对于多可用区部署,通过为 AWS 区域中的两个或更多可用区定义子网,Amazon RDS 可在根据需要在另一个可用区中创建新的备用实例。即使是单可用区部署,您也确保要这样做,以防以后需要将它们转换为多可用区部署。
注意
本地扩展区的数据库子网组只能有一个子网。
-
如果要让 VPC 中的数据库实例实现公开访问,请确保开启 VPC 属性 DNS hostnames(DNS 主机名)和 DNS resolution(DNS 解析)。
-
您的 VPC 必须具有您创建的数据库子网组。您可通过指定创建的子网来创建数据库子网组。Amazon RDS 选择要与数据库实例关联的子网和该子网组中的 IP 地址。数据库实例使用包含该子网的可用区。
-
您的 VPC 必须具有允许访问数据库实例的 VPC 安全组。
有关更多信息,请参阅 在 VPC 中访问数据库实例的场景。
-
每个子网必须包含足够大的 CIDR 数据块,以便在维护活动(包括故障转移和扩展计算)期间有可供 Amazon RDS 使用的备用 IP 地址。例如,诸如 10.0.0.1.0/24 和 10.0.1.0/24 的范围通常足够大。
-
VPC 的 instance tenancy 属性可能为 default 或 dedicated。所有默认 VPC 的“instance tenancy”属性设置为“default”,则默认的 VPC 可支持任何数据库实例类。
如果您选择将数据库实例放在“instance tenancy”属性设置为“dedicated”的专用 VPC 中,则数据库实例的数据库实例类必须是已批准的 Amazon EC2 专用实例类型之一。例如,r5.large EC2 专用实例对应于 db.r5.large 数据库实例类。有关 VPC 中实例租期的信息,请参阅 Amazon Elastic Compute Cloud 用户指南 中的专用实例。
有关可位于专用实例中的实例类型的更多信息,请参阅 EC2 定价页上的 Amazon EC2 专用实例
。 注意
当您将实例租赁属性设置为专用于数据库实例时,它不能保证数据库实例将在专属主机上运行。
-
将选项组分配给数据库实例时,它与该数据库实例的 VPC 相关联。这种关联意味着,如果您尝试将数据库实例还原到不同的 VPC 中,则无法使用分配给该数据库实例的选项组。
-
如果将数据库实例还原到不同的 VPC,请确保将默认选项组分配给数据库实例,分配与该 VPC 关联的选项组,或创建新选项组并将其分配给数据库实例。对于持久性或永久性选项(如 Oracle TDE),在将数据库实例还原到不同的 VPC 中时,您必须创建包含该持久性或永久性选项的新选项组。
使用数据库子网组
子网 是您指定的用来根据安全和操作需要对资源进行分组的 VPC 的 IP 地址范围段。数据库子网组 是您在 VPC 中创建并随后指定给数据库实例的子网(通常为私有子网)的集合。使用数据库子网组,您可以在使用 AWS CLI 或 RDS API 创建数据库实例时指定特定的 VPC。如果您使用控制台,则可以选择要使用的 VPC 和子网组。
每个数据库子网组应包含给定 AWS 区域中至少两个可用区的子网。在 VPC 中创建数据库实例时,为其选择数据库子网组。从数据库子网组中,Amazon RDS 会选择子网和该子网中的 IP 地址(与数据库集群中的相关联)。数据库使用包含该子网的可用区。
如果某一多可用区部署的主数据库实例出现故障,Amazon RDS 可以提升相应的备用实例,并随后在另外一个可用区中使用子网的 IP 地址来创建一个新的备用实例。
数据库子网组中的子网要么是公有子网,要么是私有子网。根据您为网络访问控制列表(网络 ACL)和路由表设置的配置,这些子网是公有子网或私有子网。要使数据库实例可公开访问,其数据库子网组中的所有子网必须均为公有子网。如果与可公开访问的数据库实例关联的子网从公有更改为私有,则可能会影响数据库实例的可用性。
要创建支持双堆栈模式的数据库子网组,请确保添加到该数据库子网组的每个子网都有一个与之关联的 Internet 协议版本 6 (IPv6) CIDR 块。有关更多信息,请参阅 Amazon VPC 用户指南中的 Amazon RDS IP 寻址和迁移到 IPv6。
注意
本地扩展区的数据库子网组只能有一个子网。
Amazon RDS 在 VPC 中创建数据库实例时,它使用数据库子网组中的 IP 地址将网络接口分配给数据库实例。不过,我们强烈建议您使用域名系统(DNS)名称来连接数据库实例。之所以建议这样做,是因为底层 IP 地址在失效转移期间会发生变化。
注意
对于在 VPC 中运行的每个数据库实例,请确保数据库子网组的每个子网中预留至少一个地址,以供 Amazon RDS 用来执行恢复操作。
共享子网
您可以在共享 VPC 中创建数据库实例。
使用共享 VPC 时需要记住的一些注意事项:
-
您可以将数据库实例从共享 VPC 子网移动到非共享 VPC 子网,反之亦然。
-
共享 VPC 中的参与者必须在 VPC 中创建安全组,才能允许他们创建数据库实例。
-
共享 VPC 中的拥有者和参与者可以使用 SQL 查询访问数据库。但是,只有资源的创建者才能对该资源进行任何 API 调用。
Amazon RDS IP 寻址
IP 地址使 VPC 中的资源能够相互通信以及与 Internet 上的资源进行通信。Amazon RDS 同时支持 IPv4 和 IPv6 寻址协议。默认情况下,Amazon RDS 和 Amazon VPC 使用 IPv4 寻址协议。您无法关闭这种行为。创建 VPC 时,请确保指定 IPv4 CIDR 块 (一系列私有 IPv4 地址)。您可以选择将 IPv6 CIDR 块分配给您的 VPC 和子网,并将来自该块的 IPv6 地址分配给您子网中的数据库实例。
对 IPv6 协议的支持扩展了支持的 IP 地址数量。通过使用 IPv6 协议,您可以确保有足够的可用地址来应对 Internet 的未来发展。新的和现有 RDS 资源可以在 VPC 内使用 IPv4 和 IPv6 地址。在应用程序不同部分使用的两个协议之间配置、保护和转换网络流量可能会产生运营开销。您可以对 Amazon RDS 资源的 IPv6 协议进行标准化,以简化网络配置。
IPv4 地址
创建 VPC 时,您必须以 CIDR 块(如 10.0.0.0/16
)的形式为 VPC 指定一个 IPv4 地址范围。数据库子网组 定义此 CIDR 块中可供数据库实例使用的 IP 地址范围。这些 IP 地址可以是私有地址,也可以是公有地址。
私有 IPv4 地址是指无法通过 Internet 访问的 IP 地址。您可以使用私有 IPv4 地址在同一 VPC 中的数据库实例和其他资源(如 Amazon EC2 实例)之间进行通信。每个数据库实例都有一个用于在 VPC 中通信的私有 IP 地址。
公有 IP 地址是指可通过 Internet 访问的 IPv4 地址。您可以使用公有地址在数据库实例和 Internet 上的资源(如 SQL 客户端)之间进行通信。您可以控制数据库实例是否接收公有 IP 地址。
有关说明如何创建可用于常见 Amazon RDS 场景的 VPC(只有私有 IPv4 地址)的教程,请参阅 教程:创建 VPC 以用于数据库实例(仅限 IPv4)。
IPv6 地址
您可以选择向 VPC 和子网关联 IPv6 CIDR 块,然后将此块中的 IPv6 地址分配给 VPC 中的资源。每个 IPv6 地址都是全局唯一的。
我们将自动从 Amazon 的 IPv6 地址池中为您的 VPC 分配 IPv6 CIDR 块。您不能自行选择范围。
连接到 IPv6 地址时,请确保满足以下条件:
-
客户端配置为允许通过 IPv6 进行客户端到数据库的通信。
-
数据库实例使用的 RDS 安全组已正确配置,允许通过 IPv6 进行客户端到数据库的通信。
-
客户端操作系统堆栈允许 IPv6 地址上有流量,操作系统驱动程序和库已配置为选择正确的默认数据库实例终端节点(IPv4 或 IPv6)。
有关 IPv6 的更多信息,请参阅 Amazon VPC 用户指南中的 IP 寻址。
双堆栈模式
当数据库实例可以通过 IPv4 和 IPv6 寻址协议进行通信时,它在双堆栈模式下运行。因此,资源可以通过 IPv4 和/或 IPv6 与数据库实例进行通信。RDS 禁用互联网网关访问私有双堆栈模式数据库实例的 IPv6 端点。RDS 这样做是为了确保您的 IPv6 端点是私有的,并且只能从您的 VPC 内部对其进行访问。
有关说明如何创建您可用于常见 Amazon RDS 场景的 VPC(具有 IPv4 和 IPv6 地址)的教程,请参阅 教程:创建 VPC 以用于数据库实例(双堆栈模式)。
双堆栈模式和数据库子网组
要使用双堆栈模式,请确保与数据库实例关联的数据库子网组中的每个子网都具有与之关联的 IPv6 CIDR 块。您可以创建新的数据库子网组或修改现有数据库子网组来满足此要求。当数据库实例处于双堆栈模式后,客户端可以与它正常连接。确保准确配置客户端安全防火墙和 RDS 数据库实例安全组,以允许通过 IPv6 的流量。要进行连接,客户端使用数据库实例的端点。。客户端应用程序可以指定连接到数据库时首选哪种协议。在双堆栈模式下,数据库实例会检测客户端的首选网络协议(IPv4 或 IPv6),并使用该协议进行连接。
如果某数据库子网组因子网删除或 CIDR 断开关联而停止支持双堆栈模式,则与该数据库子网组关联的数据库实例存在网络状态不兼容的风险。此外,创建新的双堆栈模式数据库实例时,您不能使用数据库子网组。
要使用 AWS Management Console 确定数据库子网组是否支持双堆栈模式,请查看数据库子网组的详细信息页面上的 Network type(网络类型)。要使用 AWS CLI 确定数据库子网组是否支持双堆栈模式,请运行 describe-db-subnet-groups 命令并查看输出中的 SupportedNetworkTypes
。
只读副本被视为独立的数据库实例,并且可以具有与主数据库实例不同的网络类型。如果您更改只读副本的主数据库实例的网络类型,则只读副本不会受到影响。当您还原数据库实例时,可以将其还原为支持的任何网络类型。
使用双堆栈模式数据库实例
创建或修改数据库实例时,您可以指定双堆栈模式,以允许您的资源通过 IPv4 和/或 IPv6 与数据库实例进行通信。
当您使用 AWS Management Console 创建或修改数据库实例时,可以在 Network type(网络类型)部分中指定双堆栈模式。下图显示了控制台中的 Network type(网络类型)部分。
当您使用 AWS CLI 创建或修改数据库实例时,请将 --network-type
选项设置为 DUAL
以使用双堆栈模式。当您使用 RDS API 创建或修改数据库实例时,请将 NetworkType
参数设置为 DUAL
以使用双堆栈模式。当您修改数据库实例的网络类型时,可能会出现停机。如果指定的数据库引擎版本或数据库子网组不支持双堆栈模式,则返回 NetworkTypeNotSupported
错误。
有关创建数据库实例的更多信息,请参阅 创建 Amazon RDS 数据库实例。有关修改数据库实例的更多信息,请参阅 修改 Amazon RDS 数据库实例。
要使用控制台确定数据库实例是否处于双堆栈模式,请查看数据库实例的 Connectivity & security(连接和安全)选项卡上的 Network type(网络类型)。
修改仅限 IPv4 的数据库实例以使用双堆栈模式
您可以修改仅限 IPv4 的数据库实例以使用双堆栈模式。为此,请更改数据库实例的网络类型。修改可能会导致停机。
建议您在维护时段内更改 Amazon RDS 数据库实例的网络类型。目前,不支持将新实例的网络类型设置为双堆栈模式。您可以使用 modify-db-instance
命令手动设置网络类型。
修改数据库实例以使用双堆栈模式之前,请确保其数据库子网组支持双堆栈模式。如果与数据库实例关联的数据库子网组不支持双堆栈模式,请在修改数据库实例时指定支持该模式的其他数据库子网组。修改数据库实例的数据库子网组可能会导致停机。
如果在将数据库实例更改为使用双堆栈模式之前,修改数据库实例的数据库子网组,请确保该数据库子网组在更改前后对数据库实例有效。
对于 RDS for PostgreSQL、RDS for MySQL、RDS for Oracle 和 RDS for MariaDB 单可用区实例,我们建议您只使用设置为 DUAL
的 --network-type
参数运行 modify-db-instance 命令,以将网络更改为双堆栈模式。在同一 API 调用中将其他参数与 --network-type
参数一起添加可能会导致停机。要修改多个参数,请确保网络类型修改已成功完成,然后使用其他参数发送另一个 modify-db-instance
请求。
如果您仅使用 --network-type
参数或在 modify-db-instance 命令中组合使用参数,则修改 RDS for PostgreSQL、RDS for MySQL、RDS for Oracle 和 RDS for MariaDB 多可用区数据库实例的网络类型会导致短暂停机并触发失效转移。
如果仅使用 --network-type
参数或在 modify-db-instance
命令中组合使用参数,则修改 RDS for SQL Server 单可用区或多可用区数据库实例上的网络类型会导致停机。网络类型修改会导致 SQL Server 多可用区实例发生失效转移。
如果更改后无法连接到数据库实例,请确保已准确配置客户端和数据库安全防火墙和路由表,以允许流量流向选定网络(IPv4 或 IPv6)上的数据库。您可能还需要修改操作系统参数、库或驱动程序才能使用 IPv6 地址进行连接。
当您将数据库实例修改为使用双堆栈模式时,不能存在从单可用区部署到多可用区部署或从多可用区部署到单可用区部署的待处理更改。
修改仅限 IPv4 的数据库实例以使用双堆栈模式
-
修改数据库子网组以支持双堆栈模式,或者创建支持双堆栈模式的数据库子网组:
-
将 IPv6 CIDR 块与 VPC 关联。
有关说明,请参阅《Amazon VPC 用户指南》中的将 IPv6 CIDR 块添加到 VPC。
-
将 IPv6 CIDR 块附加到数据库子网组中的所有子网。
有关说明,请参阅《Amazon VPC 用户指南》中的将 IPv6 CIDR 块添加到子网。
-
确认数据库子网组支持双堆栈模式。
如果您使用 AWS Management Console,请选择数据库子网组,并确保 Supported network types(支持的网络类型)值为 Dual, IPv4(双,IPv4)。
如果您使用 AWS CLI,请运行 describe-db-subnet-groups 命令,并确保数据库实例的
SupportedNetworkType
值为Dual, IPv4
。
-
-
修改与数据库实例关联的安全组以允许与数据库建立 IPv6 连接,或者新建允许 IPv6 连接的安全组。
有关说明,请参阅 Amazon VPC 用户指南中的安全组规则。
-
修改数据库实例以支持双堆栈模式。为此,请将 Network type(网络类型)设置为 Dual-stack mode(双堆栈模式)。
如果您使用控制台,请确保以下设置正确:
-
Network type(网络类型)– Dual-stack mode(双堆栈模式)
-
DB subnet group(数据库子网组)– 在上一步中配置的数据库子网组
-
Security group(安全组)– 在上一步中配置的安全组
如果您使用 AWS CLI,请确保以下设置正确:
-
--network-type
–dual
-
--db-subnet-group-name
– 在上一步中配置的数据库子网组 -
--vpc-security-group-ids
– 在上一步中配置的 VPC 安全组
例如:
aws rds modify-db-instance --db-instance-identifier my-instance --network-type "DUAL"
-
-
确认数据库实例支持双堆栈模式。
如果您使用控制台,请对于数据库实例选择 Connectivity & security(连接和安全)选项卡。在该选项卡上,确保 Network type(网络类型)值为 Dual-stack mode(双堆栈模式)。
如果您使用 AWS CLI,请运行 describe-db-instances 命令,并确保数据库实例的
NetworkType
值为dual
。在数据库实例端点上运行
dig
命令,以标识与其关联的 IPv6 地址。dig
db-instance-endpoint
AAAA使用数据库实例端点(而不是 IPv6 地址)连接到数据库实例。
区域和版本可用性
功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关双堆栈模式下版本和区域可用性的更多信息,请参阅支持 Amazon RDS 中双堆栈模式的区域和数据库引擎。
双堆栈网络数据库实例的限制
以下限制适用于双堆栈网络数据库实例:
-
数据库实例不能仅使用 IPv6 协议。它们可以仅使用 IPv4,也可以同时使用 IPv4 和 IPv6 协议(双堆栈模式)。
-
Amazon RDS 不支持本机 IPv6 子网。
-
使用双堆栈模式的数据库实例必须是私有的。它们不可公开访问。
-
双堆栈模式不支持 db.m3 和 db.r3 数据库实例类。
-
对于 RDS for SQL Server,使用 Always On AG 可用性组侦听器终端节点的双堆栈模式数据库实例仅显示 IPv4 地址。
-
不能将 RDS 代理与双堆栈模式数据库实例一起使用。
-
不能将双堆栈模式与 RDS on AWS Outposts 数据库实例一起使用。
-
不能将双堆栈模式与本地区域中的数据库实例一起使用。
对互联网隐藏 VPC 中的数据库实例
一个常见的 Amazon RDS 场景是具有一个 VPC,其中有一个带有面向公众的 Web 应用程序的 EC2 实例以及一个带有不能公开访问的数据库的数据库实例。例如,您可创建包含公有子网和私有子网的 VPC。可将充当 Web 服务器的 Amazon EC2 实例部署在公有子网中。数据库实例部署在私有子网中。在此部署方案中,只有 Web 服务器才能访问数据库实例。有关此方案的说明,请参阅 VPC 中的数据库实例由同一 VPC 中的 EC2 实例访问。
当您在 VPC 中启动数据库实例时,该数据库实例具有用于 VPC 内流量的私有 IP 地址。此私有 IP 地址不可公开访问。您可以使用 Public access(公有访问权限)选项指定数据库实例除了私有 IP 地址之外是否还具有公有 IP 地址。如果将数据库实例指定为可公开访问,则其 DNS 端点解析为 VPC 内部的私有 IP 地址。它从 VPC 外部解析为公有 IP 地址。对数据库实例的访问最终由它使用的安全组控制。如果分配给数据库实例的安全组不包含允许公有访问的入站规则,则不允许该公有访问。此外,要使数据库实例可公开访问,其数据库子网组中的子网必须具有互联网网关。有关更多信息,请参阅无法连接到 Amazon RDS 数据库实例
您可以通过修改 Public access(公开访问)选项,修改数据库实例来开启或关闭公开可访问性。下图显示了其他连接配置部分中的公开访问选项。要设置此选项,请打开连接部分中的其他连接配置部分。
有关修改数据库实例以设置公开访问选项的信息,请参阅修改 Amazon RDS 数据库实例。
在 VPC 中创建数据库实例
以下过程帮助您在 VPC 中创建数据库实例。要使用默认 VPC,可以从步骤 2 开始,并使用已经为您创建的 VPC 和数据库子网组。如果您想创建其他 VPC,则可创建新的 VPC。
注意
如果要让 VPC 中的数据库实例实现公开访问,则必须通过启用 VPC 属性 DNS hostnames(DNS 主机名)和 DNS resolution(DNS 解析)更新 VPC 的 DNS 信息。有关更新 VPC 实例的 DNS 信息的信息,请参阅更新对 VPC 的 DNS 支持。
执行以下步骤可在 VPC 中创建数据库实例:
步骤 1:创建 VPC
创建一个 VPC,该 VPC 具有的子网位于至少两个可用区内。您在创建数据库子网组时将使用这些子网。如果您拥有默认 VPC,则系统会在该 AWS 区域中的每个可用区中自动为您创建子网。
有关更多信息,请参阅创建包含公有子网和私有子网的 VPC,或参阅《Amazon VPC 用户指南》中的创建 VPC。
步骤 2:创建数据库子网组
数据库子网组是您为 VPC 创建、然后为数据库实例指定的子网(通常为私有子网)的集合。数据库子网组可让您在使用 AWS CLI 或 RDS API 创建数据库实例时指定特定的 VPC。如果您使用控制台,您就只能选择要使用的 VPC 和子网。每个数据库子网组必须至少包含给定 AWS 区域中至少两个可用区的一个子网。作为最佳实践,每个数据库子网组应至少包含 AWS 区域中每个可用区的一个子网。
对于多可用区部署,为 AWS 区域中的所有可用区定义子网,使得 Amazon RDS 可以在必要时在另一个可用区中创建新的备用副本。即使是单可用区部署,您也可以遵循此最佳实践,因为将来可能会将其转换为多可用区部署。
为使数据库实例可公开访问,数据库子网组中的子网必须具有互联网网关。有关子网的互联网网关的更多信息,请参阅《Amazon VPC 用户指南》中的使用互联网网关将子网连接到互联网。
注意
本地扩展区的数据库子网组只能有一个子网。
在 VPC 中创建数据库实例时,您可以选择数据库子网组。Amazon RDS 会选择要与数据库实例关联的子网和该子网中的 IP 地址。如果不存在数据库子网组,Amazon RDS 会在您创建数据库实例时创建默认子网组。Amazon RDS 使用该 IP 地址创建弹性网络接口并将其关联到您的数据库实例。数据库实例使用包含该子网的可用区。
对于多可用区部署,通过为 AWS 区域 中的两个或更多可用区定义子网,Amazon RDS 可在需求增加时在另一个可用区中创建新的备用实例。即使是单可用区部署,您也需要这样做,以防以后需要将它们转换为多可用区部署。
在此步骤中,您创建一个数据库子网组,然后添加为 VPC 创建的子网。
创建数据库子网组
-
通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择子网组。
-
选择创建数据库子网组。
-
对于名称,键入您的数据库子网组的名称。
-
对于描述,键入您的数据库子网组的描述。
-
对于 VPC,选择默认 VPC 或您创建的 VPC。
-
在添加子网部分中,从可用区中选择包含子网的可用区,然后从子网中选择子网。
注意
如果已启用本地扩展区,则可以在创建数据库子网组页面上选择可用区组。在这种情况下,请选择可用区组、可用区和子网。
-
选择创建。
您的新数据库子网组显示在 RDS 控制台的数据库子网组列表中。可选择该数据库子网组,在窗口底部的详细信息窗格中查看详细信息,其中包括与该组关联的所有子网。
步骤 3:创建 VPC 安全组
创建数据库实例前,您可以创建要与数据库实例相关联的 VPC 安全组。如果您不创建 VPC 安全组,则可以在创建数据库实例时使用默认安全组。有关如何为数据库实例创建安全组的说明,请参阅为私有数据库实例创建 VPC 安全组,或参阅《Amazon VPC 用户指南》中的使用安全组控制到资源的流量。
步骤 4:在 VPC 中创建数据库实例
在此步骤中,创建一个数据库实例,并使用在之前的步骤中创建的 VPC 名称、数据库子网组和 VPC 安全组。
注意
如果要让 VPC 中的数据库实例实现公开访问,必须启用 VPC 属性 DNS hostnames(DNS 主机名)和 DNS resolution(DNS 解析)。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 的 DNS 属性。
有关如何创建数据库实例的详细信息,请参阅创建 Amazon RDS 数据库实例。
在 Connectivity(连接)部分出现提示时,输入 VPC 名称、数据库子网组和 VPC 安全组。