

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管理 Amazon DocumentDB 子网组
<a name="document-db-subnet-groups"></a>

虚拟私有云（VPC）是专用于您的 AWS 账户 的虚拟网络。它在逻辑上与 AWS 云中的其他虚拟网络隔绝。您可以将 AWS 资源（例如 Amazon DocumentDB 集群）启动到 Amazon VPC 中。您可以为 VPC 指定 IP 地址范围、添加子网、关联安全组以及配置路由表。

子网是您的 Amazon VPC 内的 IP 地址范围。您可以在指定子网内启动AWS资源。对于必须连接到 Internet 的资源，请使用*公有* 子网。对于不连接到 Internet 的资源，请使用*私有* 子网。有关公有子网和私有子网的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南*中的 [VPC 和子网基础知识](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-subnet-basics)。

数据库子网组是在 VPC 中创建的一组子网，并随后为集群指定这些子网。通过使用子网组，您可以在创建集群时指定特定的 VPC。如果使用 `default` 子网组，它将涵盖 VPC 中的所有子网。

每个数据库子网组应包含给定地区中至少两个可用区的子网。在 VPC 中创建数据库集群时，您必须选择一个数据库子网组。Amazon DocumentDB 使用该数据库子网组和首选的可用区选择一个子网以及该子网中的 IP 地址，以便与集群相关联。如果主实例发生故障，Amazon DocumentDB 可将相应的副本实例提升为新的主实例。然后，它可以使用先前主实例所在子网的 IP 地址创建新的副本实例。

当 Amazon DocumentDB 在 VPC 中创建实例时，它使用从数据库子网组中选择的 IP 地址将网络接口分配给集群。我们强烈建议您使用 DNS 名称，因为基本 IP 地址在故障转移期间可能会发生变化。有关更多信息，请参阅 [Amazon DocumentDB 端点](how-it-works.md#how-it-works.endpoints)。

有关创建您自己的 VPC 和子网的信息，请参阅 *Amazon Virtual Private Cloud 用户指南*中的[使用 VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html)。

**Topics**
+ [创建 Amazon DocumentDB 子网组](document-db-subnet-group-create.md)
+ [描述 Amazon DocumentDB 子网组](document-db-subnet-group-describe.md)
+ [修改 Amazon DocumentDB 子网组](document-db-subnet-group-modify.md)
+ [删除 Amazon DocumentDB 子网组](document-db-subnet-group-delete.md)

# 创建 Amazon DocumentDB 子网组
<a name="document-db-subnet-group-create"></a>

创建 Amazon DocumentDB 集群时，您必须选择一个 Amazon VPC 和该 Amazon VPC 中的对应子网组来启动您的集群。子网确定可用区以及该可用区内要用于启动实例的 IP 范围。

子网组是可让您指定要用于启动 Amazon DocumentDB 实例的子网（或可用区）的命名集。例如，在包含三个实例的集群中，建议在单独的可用区中预置各个实例——这样做优化高可用性。因此，如果单个可用区出现故障，它只会影响单个实例。

目前， Amazon DocumentDB 实例可在多达三个可用区中预置。即使子网组拥有三个以上的子网，您也只能使用这些子网中的三个来创建 Amazon DocumentDB 集群。因此，在创建子网组时，建议仅选择要将实例部署到的三个子网。

例如：创建了一个集群，Amazon DocumentDB 选择可用区 \$11A、1B 和 1C\$1。如果您尝试在可用区 \$11D\$1 中创建实例，API 调用将失败。但是，如果您选择创建实例而不指定特定可用区，则 Amazon DocumentDB 将代表您选择可用区。Amazon DocumentDB 使用一种算法在可用区之间对实例进行负载均衡，以帮助您实现高可用性。如果预置了三个实例，则在默认情况下，将在三个可用区中预置它们，而不会在单一可用区中预置。

最佳实践
+ 除非您有特殊原因，否则请始终创建包含三个子网的子网组。这将确保包含三个或更多实例的集群能够实现更高的可用性，因为将在三个可用区中预置实例。
+ 始终将实例分散在多个可用区中以实现高可用性。切勿将集群的所有实例放在单个可用区中。
+ 由于故障转移事件随时可能发生，您不应假定主实例或副本实例始终位于特定可用区中。

## 如何创建子网组
<a name="document-db-subnet-group-how-create"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 创建 Amazon DocumentDB 子网组。

------
#### [ Using the AWS 管理控制台 ]

使用以下步骤创建 Amazon DocumentDB 子网组。

**创建 Amazon DocumentDB 子网组**

1. 登录到 AWS 管理控制台 并打开 Amazon DocumentDB 控制台，网址：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)。

1. 在导航窗格中，选择 **Subnet groups (子网组)**，然后选择 **Create (创建)**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-menu-icon.png))。

1. 在**创建子网组**页面中：

   1. 在**子网组详细信息**部分中：

      1. **名称**—为子网组输入有意义的名称。

      1. **描述**—输入子网组描述。

   1. 在**添加子网**部分中：

      1. **VPC**—在列表中，为该子网组选择一个 VPC。

      1. 请执行以下操作之一：
         + 要包括所选的 VPC 中的所有子网，请选择**添加与此 VPC 相关的所有子网**。
         + 要为该子网组指定子网，请为要包含子网的每个可用区执行以下操作。您必须包含至少两个可用区。

           1. **Availability zone (可用区)**—在列表中，选择一个可用区。

           1. **Subnet (子网)**—在列表中，从该子网组所选可用区中选择一个子网。

           1. 选择 **Add subnet (添加子网)**。

1. 选择**创建**。创建子网组后，它将与其他子网组一起列出。  
![\[屏幕截图：显示子网组详细信息。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-subnet-groups-list.png)

------
#### [ Using the AWS CLI ]

在使用 AWS CLI 创建子网组之前，您必须先确定可用的子网。运行以下 AWS CLI 操作以列出可用区及其子网。

**参数：**
+ **--db-subnet-group**—可选。如果指定特定的子网组，将列出该组的可用区和子网。如果省略该参数，将列出所有子网组的可用区和子网。如果指定 `default` 子网组，将列出 VPC 的所有子网。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-subnet-groups \
    --db-subnet-group-name default \
    --query 'DBSubnetGroups[*].[DBSubnetGroupName,Subnets[*].[SubnetAvailabilityZone.Name,SubnetIdentifier]]'
```
对于 Windows：  

```
aws docdb describe-db-subnet-groups ^
    --db-subnet-group-name default ^
    --query 'DBSubnetGroups[*].[DBSubnetGroupName,Subnets[*].[SubnetAvailabilityZone.Name,SubnetIdentifier]]'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    [
        "default",
        [
            [
                "us-east-1a",
                "subnet-4e26d263"
            ],
            [
                "us-east-1c",
                "subnet-afc329f4"
            ],
            [
                "us-east-1e",
                "subnet-b3806e8f"
            ],
            [
                "us-east-1d",
                "subnet-53ab3636"
            ],
            [
                "us-east-1b",
                "subnet-991cb8d0"
            ],
            [
                "us-east-1f",
                "subnet-29ab1025"
            ]
        ]
    ]
]
```
通过使用上一操作中的输出，您可以创建新的子网组。新子网组必须包含至少两个可用区中的子网。  

**参数：**
+ **--db-subnet-group-name** – 必填项。该子网组的名称。
+ **--db-subnet-group-description** – 必填项。该子网组的描述。
+ **--subnet-ids** – 必填项。要包含在该子网组中的子网的列表。示例：`subnet-53ab3636`。
+ --标签****—可选。要附加到该子网组的标签（键/值对）的列表。
以下代码创建具有三个子网（`sample-subnet-group`、`subnet-4e26d263` 和 `subnet-afc329f4`）的子网组 `subnet-b3806e8f`。  
对于 Linux、macOS 或 Unix：  

```
aws docdb create-db-subnet-group \
    --db-subnet-group-name sample-subnet-group \
    --db-subnet-group-description "A sample subnet group" \
    --subnet-ids subnet-4e26d263 subnet-afc329f4 subnet-b3806e8f \
    --tags Key=tag1,Value=One Key=tag2,Value=2
```
对于 Windows：  

```
aws docdb create-db-subnet-group ^
    --db-subnet-group-name sample-subnet-group ^
    --db-subnet-group-description "A sample subnet group" ^
    --subnet-ids subnet-4e26d263 subnet-afc329f4 subnet-b3806e8f ^
    --tags Key=tag1,Value=One Key=tag2,Value=2
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "DBSubnetGroup": {
        "DBSubnetGroupDescription": "A sample subnet group",
        "DBSubnetGroupName": "sample-subnet-group",
        "Subnets": [
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1a"
                },
                "SubnetIdentifier": "subnet-4e26d263",
                "SubnetStatus": "Active"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1c"
                },
                "SubnetIdentifier": "subnet-afc329f4",
                "SubnetStatus": "Active"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1e"
                },
                "SubnetIdentifier": "subnet-b3806e8f",
                "SubnetStatus": "Active"
            }
        ],
        "VpcId": "vpc-91280df6",
        "DBSubnetGroupArn": "arn:aws:rds:us-east-1:123SAMPLE012:subgrp:sample-subnet-group",
        "SubnetGroupStatus": "Complete"
    }
}
```

------

# 描述 Amazon DocumentDB 子网组
<a name="document-db-subnet-group-describe"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 获取Amazon DocumentDB 子网组的详细信息。

------
#### [ Using the AWS 管理控制台 ]

以下过程说明了如何获取 Amazon DocumentDB 子网组的详细信息。

**查找子网组的详细信息**

1. 登录到 AWS 管理控制台 并打开 Amazon DocumentDB 控制台，网址：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)。

1. 在导航窗格中，选择**子网组**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-menu-icon.png))。

1. 要查看子网组的详细信息，请选择该子网组的名称。  
![\[屏幕截图：显示子网组详细信息。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-subnet-group-details.png)

------
#### [ Using the AWS CLI ]

要查找 Amazon DocumentDB 子网组的详细信息，请使用具有以下参数的 `describe-db-subnet-groups` 操作。

**参数**
+ `--db-subnet=group-name`—可选。如果包含，则列出指定的子网组的详细信息。如果省略，则列出最多 100 个子网组的详细信息。

**Example**  
以下代码列出在`sample-subnet-group`部分中创建的 [创建 Amazon DocumentDB 子网组](document-db-subnet-group-create.md) 子网组的详细信息。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-subnet-groups \
    --db-subnet-group-name sample-subnet-group
```
对于 Windows：  

```
aws docdb describe-db-subnet-groups ^
    --db-subnet-group-name sample-subnet-group
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "DBSubnetGroup": {
        "DBSubnetGroupArn": "arn:aws:rds:us-east-1:123SAMPLE012:subgrp:sample-subnet-group",
        "VpcId": "vpc-91280df6",
        "SubnetGroupStatus": "Complete",
        "DBSubnetGroupName": "sample-subnet-group",
        "Subnets": [
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1a"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-4e26d263"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1c"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-afc329f4"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1e"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-b3806e8f"
            }
        ],
        "DBSubnetGroupDescription": "A sample subnet group"
    }
}
```

------

# 修改 Amazon DocumentDB 子网组
<a name="document-db-subnet-group-modify"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 修改子网组描述或在 Amazon DocumentDB 子网组中添加或删除子网。不过，您无法修改 `default` 子网组。

------
#### [ Using the AWS 管理控制台 ]

您可以使用 AWS 管理控制台 更改子网组描述或添加和删除子网。请记住，在完成后，您必须具有至少两个与子网组关联的可用区。

**修改子网组**

1. 登录到 AWS 管理控制台 并打开 Amazon DocumentDB 控制台，网址：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)。

1. 在导航窗格中，选择**子网组**。然后，选择子网组名称左侧的按钮。请记住，您无法修改 `default` 子网组。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-menu-icon.png))。

1. 选择 **Actions (操作)**，然后选择 **Modify (修改)**。

1. **Description (描述)**—要更改子网组描述，请输入新描述。

1. 要更改与子网组关联的子网，请在**添加子网**部分中执行一个或多个以下操作：
   + 要从该子网组中删除所有子网，请选择**全部删除**。
   + 要从该子网组中删除特定的子网，请为要删除的每个子网选择**删除**。
   + 要添加与该 VPC 关联的所有子网，请选择**添加与此 VPC 相关的所有子网**。
   + 要将特定子网添加到该子网组中，请为要添加子网的每个可用区执行以下操作。

     1. **Availability zone (可用区)**—在列表中，选择新的可用区。

     1. **Subnet (子网)**—在列表中，从该子网组所选可用区中选择一个子网。

     1. 选择 **Add subnet (添加子网)**。

1. 在确认对话框中：
   + 要对子网组进行这些更改，请选择 **Modify (修改)**。
   + 要将子网组保持不变，请选择**取消**。

------
#### [ Using the AWS CLI ]

您可以使用 AWS CLI 更改子网组描述或添加和删除子网。请记住，在完成后，您必须具有至少两个与子网组关联的可用区。您无法修改 `default` 子网组。

**参数：**
+ `--db-subnet-group-name` – 必填项。要修改的 Amazon DocumentDB 子网组的名称。
+ `--subnet-ids` – 必填项。完成此更改后，子网组中所需的所有子网的列表。
**重要**  
将从子网组中删除当前位于子网组中并且未包含在该列表中的任何子网。如果要保留当前位于子网组中的任何子网，您必须将其包含在该列表中。
+ `--db-subnet-group-description`—可选。子网组的描述。

**Example**  
以下代码修改描述并将现有子网替换为 `subnet-991cb8d0`、`subnet-53ab3636` 和 `subnet-29ab1025` 子网。  
对于 Linux、macOS 或 Unix：  

```
aws docdb modify-db-subnet-group \
    --db-subnet-group-name sample-subnet-group \
    --subnet-ids subnet-991cb8d0 subnet-53ab3636 subnet-29ab1025 \
    --db-subnet-group-description "Modified subnet group"
```
对于 Windows：  

```
aws docdb modify-db-subnet-group ^
    --db-subnet-group-name sample-subnet-group ^
    --subnet-ids subnet-991cb8d0 subnet-53ab3636 subnet-29ab1025 ^
    --db-subnet-group-description "Modified subnet group"
```
此操作的输出将类似于下文（JSON 格式）。请注意，这是在[创建 Amazon DocumentDB 子网组](document-db-subnet-group-create.md)部分中创建的子网组。但是，此子网组中的子网将替换为 `modify-db-subnet-group` 操作中列出的子网。  

```
{
    "DBSubnetGroup": {
        "DBSubnetGroupArn": "arn:aws:rds:us-east-1:123SAMPLE012:subgrp:sample-subnet-group",
        "DBSubnetGroupDescription": "Modified subnet group",
        "SubnetGroupStatus": "Complete",
        "Subnets": [
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1d"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-53ab3636"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1b"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-991cb8d0"
            },
            {
                "SubnetAvailabilityZone": {
                    "Name": "us-east-1f"
                },
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-29ab1025"
            }
        ],
        "VpcId": "vpc-91280df6",
        "DBSubnetGroupName": "sample-subnet-group"
    }
}
```

------

# 删除 Amazon DocumentDB 子网组
<a name="document-db-subnet-group-delete"></a>

您可以使用 AWS 管理控制台或 AWS CLI 删除 Amazon DocumentDB 子网组。不过，您无法删除 `default` 子网组。

------
#### [ Using the AWS 管理控制台 ]

您可以使用 AWS 管理控制台删除子网组。但是，您无法删除 `default` 子网组。

**删除子网组**

1. 登录到 AWS 管理控制台 并打开 Amazon DocumentDB 控制台，网址：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)。

1. 在导航窗格中，选择**子网组**。然后，选择子网组名称左侧的按钮。请记住，您无法删除 `default` 子网组。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-menu-icon.png))。

1. 选择**操作**，然后选择**删除**。

1. 在确认对话框中：
   + 要删除子网组，请选择**删除**。
   + 要保留子网组，请选择**取消**。

------
#### [ Using the AWS CLI ]

要使用 AWS CLI 删除 Amazon DocumentDB 子网组，请使用具有以下参数的 操作 `delete-db-subnet-group`。

**参数**
+ `--db-subnet-group-name` – 必填项。要删除的 Amazon DocumentDB 子网组的名称。请记住，您无法删除 `default` 子网组。

**Example**  
以下代码删除 `sample-subnet-group`。  
对于 Linux、macOS 或 Unix：  

```
aws docdb delete-db-subnet-group \
    --db-subnet-group-name sample-subnet-group
```
对于 Windows：  

```
aws docdb delete-db-subnet-group ^
    --db-subnet-group-name sample-subnet-group
```
该操作不会生成任何输出。

------