在 VPC 中使用数据库实例 - Amazon Relational Database Service

在 VPC 中使用数据库实例

除非您使用的是旧的数据库实例,否则数据库实例会位于 Virtual Private Cloud (VPC) 中。Amazon VPC 是一个虚拟网络,在逻辑上与AWS云中的其他虚拟网络相互隔离。使用 Amazon VPC,您可启动AWS资源(例如 Amazon RDS 数据库实例或 Amazon EC2 实例),并进入 VPC。VPC 可以是您的账户附带的默认 VPC,也可以是您创建的 VPC。所有 VPC 均与您的 AWS 账户关联。

默认 VPC 具有可用来隔离 VPC 内的资源的 3 个子网。默认 VPC 还具有一个互联网网关,可用来从 VPC 外部访问 VPC 内部的资源。

有关涉及 VPC 内外的 Amazon RDS 数据库实例的方案的列表,请参阅在 VPC 中访问数据库实例的方案

要了解如何在 VPC 中使用数据库实例,请参阅以下内容:

在以下教程中,您可以学习创建可用于常见 Amazon RDS 场景的 VPC:

在 VPC 中使用数据库实例

下面是一些有关在 VPC 中使用数据库实例的提示:

  • 您的 VPC 必须至少有两个子网。这些子网必须位于要部署数据库实例的 AWS 区域中两个不同的可用区。子网是 VPC 的 IP 地址范围段,您可以指定子网,利用子网并根据安全和操作需要对实例进行分组。

    对于多可用区部署,通过为 AWS 区域 中的两个或更多可用区定义子网,Amazon RDS 可在需求增加时在另一个可用区中创建新的备用实例。即使是单一可用区部署,您也需要这样做,以防以后需要将它们转换为多可用区部署。

    注意

    本地扩展区的数据库子网组只能有一个子网。

  • 如果要让 VPC 中的数据库实例实现公开访问,必须启用 VPC 属性 DNS 主机名DNS 解析

  • 您的 VPC 必须具有您创建的数据库子网组 (有关更多信息,请参阅下一节)。您可通过指定创建的子网来创建数据库子网组。Amazon RDS 会选择要与数据库实例关联的子网和该子网中的 IP 地址。数据库实例使用包含该子网的可用区。

  • 您的 VPC 必须具有允许访问数据库实例的 VPC 安全组。

  • 每个子网必须包含足够大的 CIDR 数据块,以便在维护活动(包括故障转移和扩展计算)期间有可供 Amazon RDS 使用的备用 IP 地址。

  • VPC 的 instance tenancy 属性可能为 defaultdedicated。所有默认 VPC 的“instance tenancy”属性设置为“default”,则默认的 VPC 可支持任何数据库实例类。

    如果您选择将数据库实例放在“instance tenancy”属性设置为“dedicated”的专用 VPC 中,则数据库实例的数据库实例类必须是已批准的 Amazon EC2 专用实例类型之一。例如,m3.medium EC2 专用实例对应于 db.m3.medium 数据库实例类。有关 VPC 中实例租期的信息,请参阅 Amazon Elastic Compute Cloud 用户指南 中的专用实例

    有关可位于专用实例中的实例类型的更多信息,请参阅 EC2 定价页上的 Amazon EC2 专用实例

    注意

    当您将实例租赁属性设置为专用于 Amazon RDS 数据库实例时,它不能保证数据库实例将在专用主机上运行。

  • 向数据库实例分配选项组后,该选项组会链接到数据库实例所在的受支持平台,即 VPC 或 EC2-Classic (非 VPC)。而且,如果数据库实例在某个 VPC 中,则与该数据库实例关联的选项组会链接到该 VPC。此链接意味着,如果您尝试将数据库实例还原到不同的 VPC 中或不同的平台上,则无法使用分配给该数据库实例的选项组。

  • 如果您将数据库实例还原到不同的 VPC 中或不同的平台上,则必须向该数据库实例分配默认选项组、分配链接到该 VPC 或平台的选项组,或是创建新选项组并将其分配给数据库实例。对于持久性或永久性选项(如 Oracle TDE),在将数据库实例还原到不同的 VPC 中时,您必须创建包含该持久性或永久性选项的新选项组。

使用数据库子网组

子网 是您指定的用来根据安全和操作需要对资源进行分组的 VPC 的 IP 地址范围段。数据库子网组是您在 VPC 中创建并随后指定给数据库实例的子网 (通常为私有子网) 集合。使用数据库子网组,您可以在使用 CLI 或 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 用来执行恢复操作。

Amazon RDS IP 寻址

IP 地址使 VPC 中的资源能够相互通信以及与 Internet 上的资源进行通信。Amazon RDS 支持 Internet 协议版本 4 (IPv4) 和 IPv6 寻址协议。默认情况下,Amazon RDS 和 Amazon VPC 使用 IPv4 寻址协议。您无法关闭这种行为。创建 VPC 时,请确保指定 IPv4 CIDR 块 (一系列私有 IPv4 地址)。您可以选择将 IPv6 CIDR 块分配给您的 VPC 和子网,并将来自该块的 IPv6 地址分配给您子网中的数据库实例

对 IPv6 协议的支持扩展了支持的 IP 地址数量。通过使用 IPv6 协议,您可以确保有足够的可用地址来应对 Internet 的未来发展。新的和现有 RDS 资源可以在 Amazon 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 地址)的教程,请参阅 教程:创建 Amazon 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 终端节点进行互联网网关访问,以确保您的 IPv6 终端节点是私有的,并且只能从您的 VPC 内部对其进行访问。

有关说明如何创建您可用于常见 Amazon RDS 场景的 VPC(具有 IPv4 和 IPv6 地址)的教程,请参阅 教程:创建 Virtual Private Cloud (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(网络类型)部分中指定双堆栈模式。下图显示了 AWS Management Console 中的 Network type(网络类型)部分。


							控制台中的 Network type(网络类型)部分,已选中 Dual-stack mode(双堆栈模式)

当您使用 AWS CLI 创建或修改数据库实例时,请将 --network-type 选项设置为 DUAL 以使用双堆栈模式。当您使用 RDS API 创建或修改数据库实例时,请将 NetworkType 参数设置为 DUAL 以使用双堆栈模式。当您修改数据库实例的网络类型时,可能会出现停机。如果指定的数据库引擎版本或数据库子网组不支持双堆栈模式,则返回 NetworkTypeNotSupported 错误。

有关创建数据库实例的更多信息,请参阅 创建 Amazon RDS 数据库实例。有关修改数据库实例的更多信息,请参阅 修改 Amazon RDS 数据库实例

要使用 AWS Management Console 确定数据库实例是否处于双堆栈模式,请查看数据库实例的 Connectivity & security(连接和安全)选项卡上的 Network type(网络类型)。

修改仅限 IPv4 的数据库实例以使用双堆栈模式

您可以修改仅限 IPv4 的数据库实例以使用双堆栈模式。为此,请更改数据库实例的网络类型。修改可能会导致停机。

修改数据库实例以使用双堆栈模式之前,请确保其数据库子网组支持双堆栈模式。如果与数据库实例关联的数据库子网组不支持双堆栈模式,请在修改数据库实例时指定支持该模式的其他数据库子网组。如果在将数据库实例更改为使用双堆栈模式之前修改数据库实例的数据库子网组,请确保该数据库子网组在更改前后对数据库实例有效。

如果更改后无法连接到数据库实例,请确保已准确配置客户端和数据库安全防火墙和路由表,以允许跨流量到选定网络(IPv4 或 IPv6)上的数据库。您可能还需要修改操作系统参数、库或驱动程序才能使用 IPv6 地址进行连接。

以下限制适用于修改数据库实例以使用双堆栈模式:

  • 双堆栈模式数据库实例不可公开访问。

  • 数据库实例不能具有仅限 IPv6 的终端节点。

  • 不能有从单可用区部署到多可用区部署或从多可用区部署到单可用区部署的待处理更改。

修改仅限 IPv4 的数据库实例以使用双堆栈模式

  1. 修改数据库子网组以支持双堆栈模式,或者创建支持双堆栈模式的数据库子网组:

    1. 将 IPv6 CIDR 块与 VPC 关联。

      有关说明,请参阅 Amazon VPC 用户指南中的将 IPv6 CIDR 块与 VPC 关联

    2. 将 IPv6 CIDR 块附加到数据库子网组中的所有子网。

      有关说明,请参阅 Amazon VPC 用户指南中的将 IPv6 CIDR 块与子网关联

    3. 确认数据库子网组支持双堆栈模式。

      如果您使用 AWS Management Console,请选择数据库子网组,并确保 Supported network types(支持的网络类型)值为 Dual, IPv4(双,IPv4)。

      如果您使用 AWS CLI,请调用 describe-db-subnet-groups 命令,并确保数据库实例的 SupportedNetworkType 值为 Dual, IPv4

  2. 修改与数据库实例关联的安全组以允许与数据库建立 IPv6 连接,或者新建允许 IPv6 连接的安全组。

    有关说明,请参阅 Amazon VPC 用户指南中的安全组规则

  3. 修改数据库实例以支持双堆栈模式,然后将 Network type(网络类型)设置为 Dual-stack mode(双堆栈模式)。

    如果您使用 AWS Management Console,请确保以下设置正确:

    • Network type(网络类型)– Dual-stack mode(双堆栈模式)

      
											控制台中的 Network type(网络类型)部分,已选中 Dual-stack mode(双堆栈模式)
    • Subnet group(子网组)– 在上一步中配置的数据库子网组

    • Security group(安全组)– 在上一步中配置的安全组

    如果您使用 AWS CLI,请确保以下设置正确:

    • --network-typedual

    • --db-subnet-group-name – 在上一步中配置的数据库子网组

    • --vpc-security-group-ids – 在上一步中配置的数据库安全组

  4. 确认数据库实例支持双堆栈模式。

    如果您使用 AWS Management Console,请转到数据库实例的 Connectivity & security(连接和安全)选项卡,并确保 Network type(网络类型)值为 Dual-stack mode(双堆栈模式)。

    如果您使用 AWS CLI,请调用 describe-db-instances 命令,并确保数据库实例的 NetworkType 值为 dual

    在数据库实例终端节点上运行 dig 命令,以标识与其关联的 IPv6 地址。

    dig db-instance-endpoint AAAA

    使用数据库实例终端节点(而不是 IPv6 地址)连接到数据库实例。

双堆栈网络数据库实例的可用性

以下数据库引擎版本支持双堆栈网络数据库实例:

  • 所有 RDS for MariaDB 版本

  • RDS for MySQL 版本:

    • 8.0.21 和更高的 8.0 版本

    • 5.7.31 和更高的 5.7 版本

  • 所有 RDS for Oracle 版本

  • RDS for PostgreSQL 版本:

    • 所有 14 版本

    • 13.3 及更高的 13 版本

    • 12.7 及更高的 12.x 版本

    • 11.12 及更高的 11.x 版本

    • 10.17 及更高的 10.x 版本

  • RDS for SQL Server 版本:

    • 15.00.4043.16.v1 和更高的 15 版本

    • 14.00.3294.2.v1 和更高的 14 版本

    • 13.00.5820.21.v1 和更高的 13 版本

双堆栈网络数据库实例的限制

以下限制适用于双堆栈网数据库实例:

  • 数据库实例不能仅使用 IPv6 协议。它们可以仅使用 IPv4,也可以同时使用 IPv4 和 IPv6 协议(双堆栈模式)。

  • Amazon RDS 不支持本机 IPv6 子网。

  • 使用双堆栈模式的数据库实例必须是私有的。它们不可公开访问。

  • 双堆栈模式不支持 db.m3 和 db.r3 数据库实例类。

  • 对于 RDS for SQL Server,使用 Always On AG 可用性组侦听器终端节点的双堆栈模式数据库实例仅显示 IPv4 地址。

  • 不能将 RDS Proxy 与双堆栈模式数据库实例一起使用。

  • 不能将双堆栈模式与 RDS on AWS Outposts 数据库实例一起使用。

  • 不能将双堆栈模式与本地区域中的数据库实例一起使用。

从 Internet 隐藏 VPC 中的数据库实例

一个常见的 Amazon RDS 方案是具有一个 VPC,其中有一个带有面向公众的 Web 应用程序的 EC2 实例以及一个带有不能公开访问的数据库的数据库实例。例如,您可创建包含公有子网和私有子网的 VPC。可将充当 Web 服务器的 Amazon EC2 实例部署在公有子网中,将数据库实例部署在私有子网中。在此部署方案中,只有 Web 服务器才能访问数据库实例。有关此方案的说明,请参阅 VPC 中的数据库实例由同一 VPC 中的 EC2 实例访问

当您在 VPC 中启动数据库实例时,该数据库实例具有用于 VPC 内流量的私有 IP 地址。此私有 IP 地址不可公开访问。您可以使用公开访问选项指定数据库实例除了私有 IP 地址之外是否还具有公有 IP 地址。如果数据库实例被指定为可公开访问,则其 DNS 终端节点将解析为数据库实例 VPC 内的私有 IP 地址,并解析为数据库实例 VPC 外部的公有 IP 地址。对数据库实例的访问最终受其使用的安全组控制,并且如果分配给数据库实例的安全组不允许公开访问,即不允许。

您可以通过修改公开访问选项,修改数据库实例来启用或禁用公开可访问性。有关更多信息,请参阅数据库引擎的修改部分。

下图显示了其他连接配置部分中的公开访问选项。要设置此选项,请打开连接部分中的其他连接配置部分。

有关修改数据库实例以设置公开访问选项的信息,请参阅修改 Amazon RDS 数据库实例

在 VPC 中创建数据库实例

下列步骤帮助您在 VPC 中创建数据库实例。如果您的账户具有默认 VPC,则可以从第 3 步开始,因为已为您创建 VPC 和数据库子网组。如果您的 AWS 账户没有默认 VPC,或者如果您想创建其他 VPC,则可创建新的 VPC。

如果您不清楚是否有默认 VPC,请参阅确定您使用的是 EC2-VPC 还是 EC2-Classic 平台

注意

如果要让 VPC 中的数据库实例实现公开访问,则必须通过启用 VPC 属性 DNS 主机名DNS 解析,更新 VPC 的 DNS 信息。有关更新 VPC 实例的 DNS 信息的信息,请参阅更新对 VPC 的 DNS 支持

执行以下步骤可在 VPC 中创建数据库实例:

步骤 1:创建 VPC

如果您的 AWS 账户没有默认 VPC,或者如果您想要创建其他 VPC,请遵循有关创建新的 VPC 的说明。请参阅创建包含公有子网和私有子网的 VPC,或参阅 Amazon VPC 文档中的步骤 1:创建 VPC

步骤 2:向 VPC 添加子网

创建 VPC 后,至少需要在两个可用区中创建子网。您在创建数据库子网组时将使用这些子网。如果您拥有默认 VPC,则系统会在该 AWS 区域中的每个可用区中自动为您创建子网。

有关如何在 VPC 中创建子网的说明,请参阅创建包含公有子网和私有子网的 VPC

步骤 3:创建数据库子网组

数据库子网组是您为 VPC 创建然后为数据库实例指定的子网 (通常为私有子网) 的集合。数据库子网组可让您在使用 CLI 或 API 创建数据库实例时指定特定的 VPC。如果您使用控制台,您就只能选择要使用的 VPC 和子网。每个数据库子网组必须至少包含给定 AWS 区域中至少两个可用区的一个子网。

作为最佳实践,每个数据库子网组应至少包含 AWS 区域中每个可用区的一个子网。对于多可用区部署,为 AWS 区域中的所有可用区定义子网,使得 Amazon RDS 可以在必要时在另一个可用区中创建新的备用副本。即使是单可用区部署,您也可以遵循此最佳实践,因为将来可能会将其转换为多可用区部署。

对于希望可公开访问的数据库实例,数据库子网组中的子网必须具有 Internet 网关。有关子网的互联网网关的更多信息,请参阅 Amazon VPC 文档中的互联网网关

注意

本地扩展区的数据库子网组只能有一个子网。

在 VPC 中创建数据库实例时,请确保选择一个数据库子网组。Amazon RDS 会选择要与数据库实例关联的子网和该子网中的 IP 地址。Amazon RDS 使用该 IP 地址创建弹性网络接口并将其关联到您的数据库实例。数据库实例使用包含该子网的可用区。对于多可用区部署,通过为 AWS 区域中的两个或更多可用区定义子网,Amazon RDS 可在需求增加的情况下在另一个可用区中创建新的备用实例。即使是单一可用区部署,您也需要这样做,以防以后需要将它们转换为多可用区部署。

在此步骤中,您创建一个数据库子网组,然后添加为 VPC 创建的子网。

创建数据库子网组

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择子网组

  3. 选择创建数据库子网组

  4. 对于名称,键入您的数据库子网组的名称。

  5. 对于描述,键入您的数据库子网组的描述。

  6. 对于 VPC,选择已创建的 VPC。

  7. 添加子网部分中,从可用区中选择包含子网的可用区,然后从子网中选择子网。

    
							“创建数据库子网组”按钮
    注意

    如果已启用本地扩展区,则可以在创建数据库子网组页面上选择可用区组。在这种情况下,请选择可用区组可用区子网

  8. 选择 Create (创建)

    您的新数据库子网组显示在 RDS 控制台的数据库子网组列表中。可选择该数据库子网组,在窗口底部的详细信息窗格中查看详细信息,其中包括与该组关联的所有子网。

步骤 4:创建 VPC 安全组

创建数据库实例前,必须创建与数据库实例相关联的 VPC 安全组。有关如何为数据库实例创建安全组的说明,请参阅 为私有数据库实例创建 VPC 安全组,或参阅 Amazon VPC 文档中的您的 VPC 的安全组

步骤 5:在 VPC 中创建数据库实例

在此步骤中,创建一个数据库实例并使用在之前的步骤中创建的 VPC 名称、数据库子网组和 VPC 安全组。

注意

如果要让 VPC 中的数据库实例实现公开访问,必须启用 VPC 属性 DNS 主机名DNS 解析。有关更新 VPC 实例的 DNS 信息的信息,请参阅更新您的 VPC 的 DNS 支持

有关如何创建数据库实例的详细信息,请参阅 创建 Amazon RDS 数据库实例

Connectivity(连接)部分出现提示时,输入在之前步骤中创建的 VPC 名称、数据库子网组和 VPC 安全组。