

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

# 管理 Amazon DocumentDB 资源
<a name="managing-documentdb"></a>

以下各节介绍各种组件及其用于管理 Amazon DocumentDB（与 MongoDB 兼容）实现的相关任务。

**Topics**
+ [操作任务概述](operational_tasks.md)
+ [全局集群](global-clusters.md)
+ [管理 集群](db-clusters.md)
+ [管理实例](db-instances.md)
+ [管理子网组](document-db-subnet-groups.md)
+ [高可用性和复制](replication.md)
+ [管理索引](managing-indexes.md)
+ [管理文档压缩](doc-compression.md)
+ [管理基于字典的压缩](dict-compression.md)
+ [管理事件](managing-events.md)
+ [选择区域和可用区](regions-and-azs.md)
+ [管理集群参数组](cluster_parameter_groups.md)
+ [了解端点](endpoints.md)
+ [了解亚马逊 DocumentDB ARNs](documentdb-arns.md)
+ [为资源添加标签](tagging.md)
+ [维护 Amazon DocumentDB](db-instance-maintain.md)
+ [了解服务相关角色](service-linked-roles.md)
+ [使用变更流](change_streams.md)
+ [使用排序规则](collation.md)
+ [使用视图](views.md)
+ [配合变更流使用 AWS Lambda](using-lambda.md)

# Amazon DocumentDB 操作任务概述
<a name="operational_tasks"></a>

本部分讲述 Amazon DocumentDB 集群的操作任务以及如何使用 AWS CLI 完成这些任务。

**Topics**
+ [向 Amazon DocumentDB 集群添加副本](#operational_tasks-add_replica)
+ [描述集群和实例](#operational_tasks-list_clusters_and_instances)
+ [创建集群快照](#operational_tasks-creating_snapshot)
+ [从快照还原](#operational_tasks-restore_from_snapshot)
+ [从集群中删除实例](#operational_tasks-remove_instance_from_cluster)
+ [删除集群](#operational_tasks-delete_cluster)

## 向 Amazon DocumentDB 集群添加副本
<a name="operational_tasks-add_replica"></a>

在您创建您的 Amazon DocumentDB 集群的主实例之后，您可以添加一个或多个*副本*。副本是只读实例，它有两个用途：
+ **可扩展性** — 如果您有大量需要同时访问的客户端，则可以添加多个副本以进行读取扩展。
+ **高可用性** — 如果主实例发生故障，Amazon DocumentDB 会自动故障转移到一个副本实例并将该副本实例指定为新的主实例。如果副本发生故障，则集群中的其他实例仍能够处理请求，直到发生故障的节点恢复为止。

每个 Amazon DocumentDB 集群可支持多达 15 个副本。

**注意**  
为实现最大容错能力，您应在不同的可用区中部署副本。这可以确保您的 Amazon DocumentDB 集群即使在整个可用区变得不可用时也能够继续正常运行。

以下 AWS CLI 示例说明如何添加新副本。`--availability-zone` 参数将副本置于指定的可用区中。

```
aws docdb create-db-instance \
    --db-instance-identifier sample-instance \
    --db-cluster-identifier sample-cluster \
    --engine docdb \
    --db-instance-class db.r5.large \
    --availability-zone us-east-1a
```

## 描述集群和实例
<a name="operational_tasks-list_clusters_and_instances"></a>

以下 AWS CLI 示例列出区域中的所有 Amazon DocumentDB 集群。对于某些管理功能（如集群和实例周期管理），Amazon DocumentDB 利用与 Amazon RDS 共享的操作技术。`filterName=engine,Values=docdb` 筛选器参数仅返回 Amazon DocumentDB 集群。

有关描述和修改集群的更多信息，请参阅[Amazon DocumentDB 集群生命周期](db-cluster-life-cycle.md)。

```
aws docdb describe-db-clusters --filter Name=engine,Values=docdb
```

此操作的输出将类似于下文。

```
{
    "DBClusters": [
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-1",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        },
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-2",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        },
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-3",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        }
    ]
}
```

以下 AWS CLI 示例列出 Amazon DocumentDB 集群中的实例。有关描述和修改集群的更多信息，请参阅[Amazon DocumentDB 实例生命周期](db-instance-life-cycle.md)。

```
aws docdb describe-db-clusters \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].[DBClusterMembers]'
```

输出如下所示。此输出中有两个实例。主实例是 `sample-instance-1` (`"IsClusterWriter": true`)。此外，还有一个副本实例，即 `sample-instance2` (`"IsClusterWriter: false"`)。

```
[
    [
        [
            {
                "DBInstanceIdentifier": "sample-instance-1",
                "IsClusterWriter": true,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1
            },
            {
                "DBInstanceIdentifier": "sample-cluster-2",
                "IsClusterWriter": false,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1
            }
        ]
    ]
]
```

## 创建集群快照
<a name="operational_tasks-creating_snapshot"></a>

*集群快照*是 Amazon DocumentDB 集群中的数据的完整备份。创建快照后，Amazon DocumentDB 将直接从集群卷读取数据。因此，即使您的集群当前没有任何实例在运行，您也可以创建快照。创建快照所用时间因集群卷大小而异。

Amazon DocumentDB 支持自动备份，自动备份在每天的首选备份时段 — 白天的一个 30 分钟时段进行。以下 AWS CLI 示例显示如何查看您的集群的备份时段：

```
aws docdb describe-db-clusters \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].PreferredBackupWindow'
```

此输出显示备份时段（UTC 时间）：

```
[
    "00:18-00:48"
]
```

您可以在创建 Amazon DocumentDB 集群时定义备份时段。您还可以更改备份时段，如以下示例所示：如果您不定义备份时段，Amazon DocumentDB 会自动给您的集群分配一个时段。

```
aws docdb modify-db-cluster \
    --db-cluster-identifier sample-cluster \
    --preferred-backup-window "02:00-02:30"
```

除了自动备份以外，您还可以随时手动创建集群快照。当您执行此操作时，您指定要备份的集群以及快照的唯一名称，以便稍后从此快照还原。

以下 AWS CLI 示例说明如何创建数据快照。

```
aws docdb create-db-cluster-snapshot \
    --db-cluster-identifier sample-cluster \
    --db-cluster-snapshot-identifier sample-cluster-snapshot
```

## 从快照还原
<a name="operational_tasks-restore_from_snapshot"></a>

您可以将集群快照还原到新的 Amazon DocumentDB 存储位置。为此，您需要提供快照的名称和新集群的名称。您无法从快照还原到现有集群；但 Amazon DocumentDB 会创建一个新集群，然后使用快照数据填充到其中。

以下示例显示集群 `sample-cluster` 的所有快照。

```
aws docdb describe-db-cluster-snapshots \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusterSnapshots[*].[DBClusterSnapshotIdentifier,SnapshotType,Status]'
```

输出如下所示。手动快照就是您手动创建的快照，而自动快照是在集群备份时段内由 Amazon DocumentDB 创建的。

```
[
        "sample-cluster-snapshot", 
        "manual", 
        "available"
    ], 
    [
        "rds:sample-cluster", 
        "automated", 
        "available"
    ]
]
```

以下示例演示如何从快照还原 Amazon DocumentDB 集群。

```
aws docdb restore-db-cluster-from-snapshot \
    --engine docdb \
    --db-cluster-identifier new-sample-cluster \
    --snapshot-identifier sample-cluster-snapshot
```

新的集群没有任何实例与之相关联；因此，如果您想要与集群进行交互，您必须给它添加实例。

```
aws docdb create-db-instance \
    --db-instance-identifier new-sample-instance \
    --db-instance-class db.r5.large \
    --engine docdb \
    --db-cluster-identifier new-sample-cluster
```

您可以使用以下 AWS CLI 操作来监控集群和实例的创建进度。当集群和实例处于可用状态时，您可连接到新集群的终端节点并访问您的数据。

```
aws docdb describe-db-clusters \
    --db-cluster-identifier new-sample-cluster  \
    --query 'DBClusters[*].[Status,Endpoint]'
```

```
aws docdb describe-db-instances \
    --db-instance-identifier new-sample-instance \
    --query 'DBInstances[*].[DBInstanceStatus]'
```

## 从集群中删除实例
<a name="operational_tasks-remove_instance_from_cluster"></a>

Amazon DocumentDB 将所有数据都存储在集群卷中。即使您从集群中删除所有实例，数据仍会保留在该集群卷中。如果您需要再次访问数据，则可随时向该集群中添加实例，并在停止处恢复操作。

以下示例显示如何从 Amazon DocumentDB 集群中删除实例。

```
aws docdb delete-db-instance \
    --db-instance-identifier sample-instance
```

## 删除集群
<a name="operational_tasks-delete_cluster"></a>

在您删除 Amazon DocumentDB 集群之前，您必须先删除其所有实例。以下 AWS CLI 示例返回关于集群中实例的信息。如果此操作会返回任何实例标识符，您必须删除各个实例。有关更多信息，请参阅 [从集群中删除实例](#operational_tasks-remove_instance_from_cluster)。

```
aws docdb describe-db-clusters \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].DBClusterMembers[*].DBInstanceIdentifier'
```

当没有任何剩余的实例时，您就可以删除集群了。此时，您必须选择以下选项之一：
+ **创建最终快照** — 将所有集群数据捕获到一个快照中，以便您以后可以使用这些数据重新创建一个新实例。下例说明具体做法：

  ```
  aws docdb delete-db-cluster \
      --db-cluster-identifier sample-cluster \
      --final-db-snapshot-identifier sample-cluster-snapshot
  ```
+ **跳过最终快照** — 永久舍弃所有集群数据。此操作无法撤消。下例说明具体做法：

  ```
  aws docdb delete-db-cluster \
      --db-cluster-identifier sample-cluster \
      --skip-final-snapshot
  ```

# Amazon DocumentDB 全局集群概览
<a name="global-clusters"></a>

## 什么是全局集群？
<a name="w2aac33b9b3"></a>

全局集群由一个主区域和最多 10 个只读辅助区域组成。您可以直接向主区域中的主数据库集群发出写入操作，Amazon DocumentDB 将使用专用基础设施自动将数据复制到辅助区域。延迟通常不到一秒。

## 全局集群有何用处？
<a name="w2aac33b9b5"></a>
+ **从区域范围的停机中恢复**：如果发生区域范围的停机，您可以在几分钟内将其中一个辅助集群提升为主集群，典型的恢复时间目标 (RTO) 不到一分钟。恢复点目标（RPO）通常以秒为单位进行测量，但这取决于发生故障时整个网络的滞后时间。
+ **全球读取本地延迟**：如果您在世界各地设有办事处，则可以使用 全局数据库在主 区域将其主要信息来源保持最新。您其他区域的办事处可以访问各自区域中的信息，存在本地延迟。
+ **可扩展辅助集群**：您可以通过向辅助 区域添加更多只读实例来扩展辅助集群。辅助集群为只读模式，因此它最多可以支持 16 个只读副本实例，而不符合单个集群通常 15 个此类副本的限制。
+ **从主到辅助集群快速复制**：全局集群执行的复制对主数据库集群造成的性能影响不大。数据库实例的资源完全专用于承担应用程序读取和写入工作负载。

## 目前全局集群的局限性有哪些？
<a name="w2aac33b9b7"></a>
+ Amazon DocumentDB v3.6 不支持全局集群。
+ 除 db.t3、db.t4g 和 db.r4 之外的所有实例类型都支持全局集群。
+ 全局集群在以下区域不可用：南美洲（圣保罗）、欧洲地区（米兰）、中国（北京）和中国（宁夏）。
+ 当各区域使用不同引擎版本时，不支持切换和全局失效转移。当引擎版本不匹配时，支持手动失效转移。
+ 只有主集群才能执行写入操作。执行写操作的客户端连接到主集群的集群端点。
+ 您的集群最多可以拥有 10 个辅助区域和一个主区域。
+ 辅助集群无法停止。如果主集群有与之关联的辅助集群，则无法将其停止。只有没有辅助集群的区域集群才能停止。
+ 在某些情况下，附加到辅助集群的副本可能会重新启动。如果主区域的实例重新启动或发生故障转移，辅助区域中的副本也会重新启动。随后集群将不可用，直到所有副本与主数据库集群的写入器实例恢复同步。此行为是预期的。在更改主集群之前，请务必了解对全局集群的影响。
+ 您不能在辅助集群上使用变更流。

**Topics**
+ [什么是全局集群？](#w2aac33b9b3)
+ [全局集群有何用处？](#w2aac33b9b5)
+ [目前全局集群的局限性有哪些？](#w2aac33b9b7)
+ [快速入门指南](global-clusters.get-started.md)
+ [管理全局集群](global-clusters.manage.md)
+ [连接全局集群](global-clusters-connect.md)
+ [监控全局集群指标](global-clusters-monitor.md)
+ [灾难恢复](global-clusters-disaster-recovery.md)

# 快速入门指南：全局集群
<a name="global-clusters.get-started"></a>

**Topics**
+ [配置](#global-clusters.config)
+ [创建全局集群](#global-clusters-create)
+ [向全局集群添加区域](#global-clusters.add-region)
+ [使用快照](#global-clusters.snapshot)

## 配置
<a name="global-clusters.config"></a>

Amazon DocumentDB 全球集群至少跨越两个。 AWS 区域主区域支持具有一个主（写入器）实例和多达 15 个副本实例的集群，而辅助区域运行一个完全由多达 16 个副本实例组成的只读集群。一个全局集群可以有多达五个辅助区域。该表列出了全局集群中允许的集群、实例和副本的最大数量。


| 说明 | 主要 AWS 区域 | 中学 AWS 区域 | 
| --- | --- | --- | 
| 集群 | 1 | 5（最大值） | 
| 写入器实例 | 1 | 0 | 
| 每个集群的只读实例（Amazon DocumentDB 副本） | 15（最大值） | 16（合计） | 
| 只读实例（允许的最大值，辅助区域的指定实际数量） | 15：s | s = 辅助节点的总数 AWS 区域 | 

集群具有以下具体要求：
+ **数据库实例类要求**-您仅可以使用 `db.r5` 类和 `db.r6g` 实例类。
+ **AWS 区域 要求** — 主群集必须位于一个区域中，并且至少一个辅助群集必须位于同一账户的不同区域。您最多可以创建五个辅助（只读）集群，且每个集群必须在不同的区域中。换句话说，没有两个集群可位于同一个区域中。
+ **命名要求**：为每个集群选择的名称在所有区域中必须唯一。即使不同的集群位于不同的区域中，也不能对其使用相同的名称。

## 创建 Amazon DocumentDB 全局集群
<a name="global-clusters-create"></a>

您是否准备好构建您的第一个全球集群？ 在本节中，我们将说明如何使用 AWS 管理控制台 或 AWS CLI 并按照以下说明创建包含新数据库集群和实例的全新全局集群。

### 使用 AWS 管理控制台
<a name="global-clusters-create-console"></a>

1. 在中 AWS 管理控制台，导航到**亚马逊 Documen** tDB。

1. 抵达 Amazon DocumentDB 控制台后，选择**集群**。  
![\[Amazon DocumentDB 控制台中的“集群”页面。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/choose-cluster.png)

1. 选择**创建**。  
![\[“创建”按钮显示在“集群”表右上角。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/choose-create.png)

1. 相应地填写**创建 Amazon DocumentDB 集群**表单的**配置**部分：
   + **实例标识符**：您可以输入此实例的唯一标识符，或允许 Amazon DocumentDB 基于集群标识符提供实例标识符。
   + 引擎版本：选择 **4.0.0**
   + 实例类：选择 **db.r5.large**
   + 实例数目：选择 **3**。  
![\[用于创建 Amazon DocumentDB 集群的“配置选项”表单。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/create-config.png)

1. 在**身份验证**部分，填写主用户名和主密码。  
![\[用于为新的 Amazon DocumentDB 集群指定主用户名和密码的“身份验证”表单。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/create-auth.png)

1. 选择**显示高级设置**。  
![\[显示“取消”和“创建集群”按钮旁边的高级设置切换按钮。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/show-advanced.png)

1. 在**网络设置** 部分中：
   + 保留**虚拟私有云（VPC）**和**子网组**的默认选项。  
![\[“网络设置”表单，其中显示了 VPC、子网组和 VPC 安全组等选项。VPC 和子网组字段已选择默认选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/default-vpc-1.png)
   + 对于 **VPC 安全组**，应已添加**默认（VPC）**。  
![\[“网络设置”表单，显示已添加默认 VPC。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/default-vpc-2.png)
   + 在 **VPC 安全组**字段中键入 `DocDB`，然后选择 **DocDB-Inbound（VFC）**。  
![\[已在“VPC 安全组”下拉菜单中选择“DocDB-Inbound VFC”。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/inbound-vfc.png)

1. 对于**群集选项**和 **E ncryption-at-rest**，保留默认选项。  
![\[在选择默认选项的情况下 Encryption-at-rest对选项和表单进行聚类。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/leave-default-1.png)

1. 对于**备份**和**日志导出**，保留默认选项。  
![\[“备份”和“日志导出”表单已选择默认选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/leave-default-2.png)

1. 对于**维护**、**标签**和**删除保护**，保留默认选项。  
![\[“维护”、“标签”和“删除保护”表单已选择默认选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/leave-default-3.png)

1. 现在单击显示**创建集群**的按钮。  
![\[在集群创建过程结束时显示“创建集群”按钮。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/create-cluster.png)

### 使用 AWS CLI
<a name="global-clusters-create-cli"></a>

要创建 Amazon DocumentDB 区域集群，请调用。[create-global-cluster AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/create-global-cluster.html)以下 AWS CLI 命令创建名为的 Amazon DocumentDB 集群。`global-cluster-id`有关删除保护的更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。

此外，`--engine-version` 是一个默认成主引擎最新版本的可选参数。当前的默认引擎版本为`5.0.0`（注意：Amazon DocumentDB 8.0 可用，但必须明确指定为）。`8.0.0`发布主引擎新版本时，`--engine-version` 的默认引擎版本将更新，以反映最近的主引擎版本。因此，对于生产工作负载，尤其是那些依赖脚本、自动化或 CloudFormation 模板的工作负载，我们建议您明确指定预期的主要版本。`--engine-version`

如果未指定 `db-subnet-group-name` 或 `vpc-security-group-id`，则 Amazon DocumentDB 将使用给定区域的默认子网组和 Amazon VPC 安全组。

在以下示例中，将每个 *user input placeholder* 替换为您自己的信息。

对于 Linux、macOS 或 Unix：

```
aws docdb create-db-cluster \
      --global-cluster-identifier global-cluster-id \
      --source-db-cluster-identifier arn:aws:rds:us-east-1:111122223333:cluster-id
```

对于 Windows：

```
aws docdb create-db-cluster ^
      --global-cluster-identifier global-cluster-id ^
      --source-db-cluster-identifier arn:aws:rds:us-east-1:111122223333:cluster-id
```

此操作的输出将类似于下文（JSON 格式）。

```
{
    "DBCluster": {
        "StorageEncrypted": false,
        "DBClusterMembers": [],
        "Engine": "docdb",
        "DeletionProtection" : "enabled",
        "ClusterCreateTime": "2018-11-26T17:15:19.885Z",
        "DBSubnetGroup": "default",
        "EngineVersion": "4.0.0",
        "MasterUsername": "masteruser",
        "BackupRetentionPeriod": 1,
        "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:cluster-id",
        "DBClusterIdentifier": "cluster-id",
        "MultiAZ": false,
        "DBClusterParameterGroup": "default.docdb4.0",
        "PreferredBackupWindow": "09:12-09:42",
        "DbClusterResourceId": "cluster-KQSGI4MHU4NTDDRVNLNTU7XVAY",
        "PreferredMaintenanceWindow": "tue:04:17-tue:04:47",
        "Port": 27017,
        "Status": "creating",
        "ReaderEndpoint": "cluster-id.cluster-ro-sfcrlcjcoroz.us-east-1.docdb.amazonaws.com",
        "AssociatedRoles": [],
        "HostedZoneId": "ZNKXTT8WH85VW",
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-77186e0d",
                "Status": "active"
            }
        ],
        "AvailabilityZones": [
            "us-east-1a",
            "us-east-1c",
            "us-east-1e"
        ],
        "Endpoint": "cluster-id.cluster-sfcrlcjcoroz.us-east-1.docdb.amazonaws.com"
    }
}
```

创建集群需要几分钟时间。您可以使用 AWS 管理控制台 或 AWS CLI 来监控集群的状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)。

**重要**  
当您使用创建 Amazon DocumentDB 区域集群时，不会创建任何实例。 AWS CLI 因此，您必须显式创建主实例和所需的任何副本实例。您可以使用控制台或创建 AWS CLI 实例。有关更多信息，请参阅 Amazon DocumentDB API 参考中的 [向集群添加 Amazon DocumentDB 实例](db-instance-add.md) 和 [CreateDBCluster](API_CreateDBCluster.md)。

一旦您的区域集群可用，您就可以使用以下说明在另一个区域添加辅助集群：[向 Amazon DocumentDB 全局集群添加 AWS 区域](#global-clusters.add-region)。添加区域后，您的区域集群将成为您的主集群，而您在自己选择的区域中有一个新的辅助集群。

## 向 Amazon DocumentDB 全局集群添加 AWS 区域
<a name="global-clusters.add-region"></a>

全局集群在异于主集群的区域中需要至少一个辅助集群，并且您可以添加多达五个辅助集群。注意：对于添加的每个辅助集群，您必须减少主集群的允许副本的数量。例如，如果您的全局集群有五个辅助区域，则主集群只能有 10 个（而不是 15 个）副本。有关更多信息，请参阅 [Amazon DocumentDB 全局集群的配置要求](https://docs.aws.amazon.com/documentdb/latest/developerguide/global-clusters.get-started.html#global-clusters.config)。

### 使用 AWS 管理控制台
<a name="global-clusters-add-region-console"></a>

1. 登录 AWS 管理控制台 并打开亚马逊文档数据库控制台。

1. 在导航窗格中，选择**集群**。  
![\[Amazon DocumentDB 控制台中的“集群”页面。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/choose-cluster.png)

1. 选择您要要向其中添加辅助集群的集群。确保集群为 `Available`。  
![\[显示可用状态的区域和全球集群列表，突出显示了 mydocdbglobalcluster。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/choose-cluster-2.png)

1. 选择**操作**的下拉菜单列表，然后选择**添加区域**。  
![\[“集群”界面上的“操作”下拉列表显示了“添加区域”选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/add-region.png)

1. 在**添加 AWS 区域** 页面上，选择辅助区域。您不能为同一个全局集群选择已有辅助集群的区域。此外，该区域也不能是主集群所在的同一个区域。如果这是您正在添加的第一个区域，则您还必须指定您选择的全局集群标识符。  
![\[使用添加 AWS 区域 表单上的下拉菜单选择辅助区域。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/add-region-2.png)

1. 在新区域中填写辅助集群的其余字段，然后选择**创建集群**。完成添加区域后，您可以在 AWS 管理控制台中的**集群**列表中看到该区域。  
![\[向集群添加区域的最后步骤，显示配置表单、每小时成本估算和“创建集群”按钮。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/quick-start/select-add-region.png)

### 使用 AWS CLI
<a name="global-clusters-add-region-cli"></a>
+ 使用带有 `(--global-cluster-identifier)` 全局集群名称的 `create-db-cluster` CLI 命令。对于其他参数，请执行以下操作：
  + 对于`--region`，请选择与您的主要区域不同的 AWS 区域 区域。
  + 为 `--engine` 和 `--engine-version` 参数选择特定的值。
  + 对于加密集群，请将您的主 AWS 区域 集群指定`--source-region`为用于加密的集群。

以下示例创建了一个新 Amazon DocumentDB 数据库集群，并将其作为只读辅助集群附加到全局集群。在最后一步中，实例将添加到新集群。

在以下示例中，将每个 *user input placeholder* 替换为您自己的信息。

对于 Linux、macOS 或 Unix：

```
aws docdb --region secondary-region-id \
  create-db-cluster \
    --db-cluster-identifier cluster-id \
    --global-cluster-identifier global-cluster-id \
    --engine-version version \
    --engine docdb

aws docdb --region secondary-region-id \
  create-db-instance \
    --db-cluster-identifier cluster-id \
    --global-cluster-identifier global-cluster-id \
    --engine-version version \
    --engine docdb
```

对于 Windows：

```
aws docdb --region secondary-region-id ^
  create-db-cluster ^
    --db-cluster-identifier cluster-id ^
    --global-cluster-identifier global-cluster-id ^
    --engine-version version ^
    --engine docdb

aws docdb --region secondary-region-id ^
  create-db-instance ^
    --db-cluster-identifier cluster-id ^
    --global-cluster-identifier global-cluster-id ^
    --engine-version version ^
    --engine docdb
```

## 对您的 Amazon DocumentDB 全局集群使用快照
<a name="global-clusters.snapshot"></a>

您可以恢复 Amazon DocumentDB 集群的快照以用作您全局集群的起点。要这样做，您必须恢复快照并创建新集群。这个集群将充当您全局群集的主集群。然后，您可以将另一个区域添加到恢复的集群，从而将其转变成全局集群。

# 管理 Amazon DocumentDB 全局集群
<a name="global-clusters.manage"></a>

您可对构成全局集群的各个集群执行大多数的管理操作。当您在控制台中 **集群**页面上选择 **对相关资源分组**时，您可以看到主集群和辅助集群分组到关联的全局集群之下。

全局群集的 “**配置**” 选项卡显示集群的运行 AWS 区域 位置、版本和全局群集标识符。

**Topics**
+ [修改全局集群](#global-clusters.modify)
+ [修改参数](#global-clusters.modify-parameters)
+ [删除全局集群](#global-clusters.remove)
+ [删除全局集群](#global-clusters.delete)
+ [无管控集群](#global-clusters.headless)

## 修改 Amazon DocumentDB 全局集群
<a name="global-clusters.modify"></a>

中的**集群**页面 AWS 管理控制台 列出了您的所有全局集群，显示了每个集群的主集群和辅助集群。全局数据库有自己的配置设置。具体来说，它具有与其主集群和辅助集群关联的区域。

当您更改全局集群时，您有机会取消更改。

选择 Continue (继续) 时，即表示您确认更改。

## 修改 Amazon DocumentDB 全局集群的参数
<a name="global-clusters.modify-parameters"></a>

您可以为全局集群中的每个集群独立配置集群参数组。大多数参数的工作方式与其他类型的 Amazon DocumentDB 集群相同。我们建议您在全局数据库中使所有集群之间的设置保持一致。在将辅助集群提升为主集群时，此操作有助于避免意外的行为变化。

例如，对于时区和字符集使用相同设置，可避免在不同集群作为主集群时出现不一致的行为。

## 从 Amazon DocumentDB 全局集群中删除某集群
<a name="global-clusters.remove"></a>

存在您可能需要从自身全局群集中删除群集的几种情况。例如，如果主集群被降级或隔离，您可能希望从全局集群中删除 集群。然后，它将成为独立的预置集群，可用于创建新的全局集群。要了解更多信息，请参阅[对 Amazon DocumentDB 全局集群执行手动失效转移](global-clusters-disaster-recovery.md#manual-failover)。

您也可能会想要删除集群，因为您想要删除不再需要的全局集群。在分离所有关联的集群以后，您才能删除全局集群，仅保留主集群。有关更多信息，请参阅 [从 Amazon DocumentDB 全局集群删除集群](#global-clusters.delete)。

**注意**  
当集群从全局集群中分离时，它将不再与主集群同步。它变成了具有全部 read/write 功能的独立预配置集群。此外，它在 Amazon DocumentDB 控制台中不再可见。只有您在控制台中选择集群位于其中的区域时，它才可见。

您可以使用 AWS 管理控制台、或 RDS API 从全局集群中 AWS CLI移除集群。

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

1. 登录 AWS 管理控制台 并导航到亚马逊 DocumentDB 控制台。

1. 请在左侧导航中，选择**集群**。  
![\[图片：集群导航框中显示一列现有集群链接及其对应的实例链接。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/choose-cluster.png)

1. 展开全局群集，从而您可以看到所有的辅助群集。选择您想删除的辅助集群。选择**操作**，然后在下拉菜单中，选择**从全局集群删除**。  
![\[图片：集群导航框中显示了选定的现有辅助集群，并突出显示“从全局移除”操作。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/remove-global.png)

1. 将会出现一个提示，要求确认您要将辅助集群从全局集群中分离。选择 **删除并提升**以从全局集群中删除集群。  
![\[图片：“移除并升级” 提示。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/remove-promote.png)

现在集群不再作为主集群中的辅助集群，也不再与主集群同步。它是一个 read/write 功能齐全的独立集群。

在移除或删除所有辅助集群后，您可以按同样方式移除主集群。在删除全部辅助集群之前，您无法将主集群从全局集群中分离或删除。全局群集可能保留在集群列表中，区域为零和 AZs。如果不想再使用此全局集群，则可以删除。

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

要从全局集群删除 集群，请使用以下参数运行 `remove-from-global-cluster` CLI 命令：
+ `--global-cluster-identifier` — 全局集群的名称（标识符）。
+ `--db-cluster-identifier` — 要从全局集群删除的每集群的名称。

以下示例先从全局集群中删除辅助集群，然后删除主集群。

对于 Linux、macOS 或 Unix：

```
aws docdb --region secondary_region \
  remove-from-global-cluster \
    --db-cluster-identifier secondary_cluster_ARN \
    --global-cluster-identifier global_cluster_id

aws docdb --region primary_region \
  remove-from-global-cluster \
    --db-cluster-identifier primary_cluster_ARN \
    --global-cluster-identifier global_cluster_id
```

对全局集群中的每个辅助区域重复 `remove-from-global-cluster` `--db-cluster-identifier` `secondary_cluster_ARN` 命令。

对于 Windows：

```
aws docdb --region secondary_region ^
  remove-from-global-cluster ^
    --db-cluster-identifier secondary_cluster_ARN ^
    --global-cluster-identifier global_cluster_id

aws docdb --region primary_region ^
  remove-from-global-cluster ^
    --db-cluster-identifier primary_cluster_ARN ^
    --global-cluster-identifier global_cluster_id
```

对全局集群中的每个辅助区域重复 `remove-from-global-cluster` `--db-cluster-identifier` `secondary_cluster_ARN` 命令。

------

## 从 Amazon DocumentDB 全局集群删除集群
<a name="global-clusters.delete"></a>

要删除全局集群，请执行以下操作：
+ 从全局集群中删除所有辅助集群。每个集群都会变成独立的集群。请参阅上一部分：[从 Amazon DocumentDB 全局集群中删除某集群](#global-clusters.remove)。
+ 从每个独立集群中删除所有副本。
+ 从全局集群删除主集群。这将成为独立集群。
+ 从主集群中，首先删除所有副本，然后删除主实例。从新近独立的集群中删除主实例通常还会删除集群和全局集群。

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

1. 登录 AWS 管理控制台 并导航到亚马逊 DocumentDB 控制台。

1. 选择**集群**并查找您想要删除的全局集群。  
![\[图片：集群导航框中显示一列现有集群链接及其对应的实例链接。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/choose-cluster.png)

1. 选择您的全局群集，从**操作**菜单中选择**删除**。  
![\[图片：集群导航框中显示了选定的全局集群，并突出显示“删除”操作。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/global-clusters/delete-cluster.png)

确认所有集群从全局集群中移除。全局群集应显示零区域 AZs ，集群大小应为零。如果全局集群包含任何集群，则无法将其删除。首先，您必须遵循上一步 **[从 Amazon DocumentDB 全局集群中删除某集群](#global-clusters.remove)** 中的说明。

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

要删除全局群集，请使用名称 AWS 区域 和全局群集标识符运行 `delete-global-cluster` CLI 命令，如以下示例所示。

对于 Linux、macOS 或 Unix：

```
aws docdb --region primary_region delete-global-cluster \
   --global-cluster-identifier global_cluster_id
```

对于 Windows：

```
aws docdb --region primary_region delete-global-cluster ^
   --global-cluster-identifier global_cluster_id
```

------

## 在辅助区域中创建无管控 Amazon DocumentDB 集群
<a name="global-clusters.headless"></a>

尽管 Amazon DocumentDB 全局集群需要至少一个与主集群 AWS 区域 不同的辅助集群，但您可以为辅助群集使用无头配置。无管控辅助 Amazon DocumentDB 集群是没有实例的集群。此类型的配置可以降低全局集群的开支。在 Amazon DocumentDB 集群中，计算和存储是分离的。如果没有实例，您就无需为计算付费，而只需为存储付费。如果设置正确，无管控辅助存储卷将与主集群保持同步。

您可以像平常创建 Amazon DocumentDB 全局数集群一样添加辅助集群。但是，在主集群开始复制到辅助集群之后，您将从辅助集群中删除该只读实例。此辅助集群现在被视为“无管控”集群，因为其不再有实例。但是，存储卷与主 Amazon DocumentDB 集群保持同步。

**重要**  
我们只向能够容忍区域级失效超过 15 分钟的客户推荐无头集群。这是因为借助无头辅助群集从区域级失效中恢复将要求用户在失效转移后创建一个新实例。新实例可能耗时大约 10-15 分钟变得可用。

### 将无管控辅助集群添加到您的全局集群
<a name="w2aac33b9c13c17b9"></a>

1. 登录 AWS 管理控制台 并打开[亚马逊 DocumentDB 控制台](https://console.aws.amazon.com/rds/)。

1. 请在左侧导航中，选择**集群**。

1. 选择需要辅助集群的全局集群。确保主数据库集群为 `Available`。

1. 对于 **Actions (操作)**，选择 **Add region (添加区域)**。

1. 在**添加区域**页面上，选择辅助区域。
**注意**  
您不能为同一个全局集群选择已有辅助集群的区域。此外，该区域也不能是主集群所在的同一个区域。

1. 在新区域中填写辅助集群的其余字段。这些配置选项与任何集群实例的配置选项相同。

1. 添加区域。完成向自身全局集群添加该区域后，您将在 AWS 管理控制台中 `Clusters` 的列表中看到它。

1. 在继续操作之前，使用 AWS 管理控制台 或检查辅助群集及其读取器实例的状态 AWS CLI。如果您使用 AWS CLI，则这里是一个示例命令：

   ```
   $ aws docdb describe-db-clusters --db-cluster-identifier secondary-cluster-id --query '*[].[Status]' --output text
   ```

   新添加的辅助集群的状态可能需要几分钟的时间才能从“正在创建”更改为“可用”。当集群处于可用状态时，您可以删除读取器实例。

1. 在辅助集群中选择读取器实例，然后选择**删除**。

1. 删除读取器实例后，辅助集群仍然是全局集群的组成部分。它应该没有与之关联的实例。

**注意**  
如果主区域发生计划外停机事件，您可以使用此无管控辅助 Amazon DocumentDB 集群手动恢复 Amazon DocumentDB 。

# 连接到 Amazon DocumentDB 全局集群
<a name="global-clusters-connect"></a>

连接到全局集群的方式取决于您是需要写入集群还是从集群读取：
+ 对于只读请求或查询，您连接到 AWS 区域中集群的读取器端点。
+ 要运行数据操作语言 (DML) 或数据定义语言 (DDL) 语句，应连接到主集群的集群端点。此端点可能与您的应用程序位于 AWS 区域 不同的位置。

当您在控制台中查看全局集群时，您可以看到与其所有集群关联的所有通用端点。

连接到全局集群的方式取决于您是需要写入数据库还是从数据库读取。对于要从主区域提供的 DDL、DML 和读取操作，您应该连接到主集群。我们建议您使用集群端点以副本集模式连接到您的主集群，将写入偏好设置为 `secondaryPreferred=true`。这会将写入流量路由到主集群的写入器实例，并将读取流量路由到主集群的副本实例。

对于跨区域、只读流量，您应该连接到一个辅助集群。我们建议您使用集群端点以副本集模式连接到您的辅助集群。由于所有实例都是只读副本实例，因此您无需指定读取首选项。为了最大限度地减少延迟，请选择您所在区域或离您最近的区域中的任何读取器端点。

# 监控 Amazon DocumentDB 全局集群
<a name="global-clusters-monitor"></a>

Amazon DocumentDB（兼容 MongoDB）与集成， CloudWatch 因此您可以收集和分析集群的运行指标。您可以使用 CloudWatch控制台、Amazon DocumentDB 控制台、 AWS Command Line Interface (AWS CLI) 或 API 来监控这些指标。 CloudWatch 

要监控全局集群，请使用以下 CloudWatch 指标。


| 指标 | 说明 | 
| --- | --- | 
| GlobalClusterReplicatedWriteIO | 按照 5 分钟报告从主 AWS 区域 卷中的群集卷复制到辅助 AWS 区域卷的集群卷的计费写入 I/O 操作的平均数量。复制到每个辅助区域的 ReplicatedWriteIOs 数量与主区域执行的区域内 VolumeWriteIOPs 数量相同。 | 
| GlobalClusterDataTransferBytes | 从主群集传输到辅助群集的数据量 AWS 区域， AWS 区域 以字节为单位。 | 
| GlobalClusterReplicationLag | 将更改事件从主群集复制到辅助群集时的延迟量（ AWS 区域 以毫秒为单位） AWS 区域 | 

有关如何查看这些指标的更多信息，请参阅[查看 CloudWatch 数据](https://docs.aws.amazon.com/documentdb/latest/developerguide/cloud_watch.html#cloud_watch-view_data)。

# 灾难恢复和 Amazon DocumentDB 全局集群
<a name="global-clusters-disaster-recovery"></a>

**Topics**
+ [对 Amazon DocumentDB 全局集群执行托管式失效转移](#managed-failover)
+ [对 Amazon DocumentDB 全局集群执行手动失效转移](#manual-failover)
+ [对 Amazon DocumentDB 全局集群执行切换](#global-cluster-switchover)
+ [解除全局集群切换或失效转移的阻止](#unblocking-gc-so-fo)

通过使用全局集群，您可以快速从区域故障等灾难中恢复。灾难恢复通常以 RTO 和 RPO 的值来衡量。
+ **恢复时间目标 (RTO)**：灾难后系统恢复工作状态所需的时间。换言之，RTO 用于衡量停机时间。对于全局集群，RTO 在几分钟内。
+ **恢复点目标 (RPO)**：可能丢失的数据量（按时间衡量）。对于全局集群，RPO 通常以秒为单位进行测量。
+ 要从计划外停机中恢复，您可以执行跨区域故障转移到全局集群中的一个辅助区域。当全局集群有多个辅助区域时，请确保分离您想要提升为主区域的所有辅助区域。然后，您将其中一个辅助区域提升为新的主 AWS 区域。最后，在其他每个辅助区域中创建新的集群，并将这些集群附加到全局集群。

## 对 Amazon DocumentDB 全局集群执行托管式失效转移
<a name="managed-failover"></a>

这种方法用于在发生真实的区域性灾难或完全的服务级别中断时实现业务连续性。

在托管式失效转移期间，主集群会失效转移到您选择的辅助区域，同时维护 Amazon DocumentDB 全局集群的现有复制拓扑。所选的辅助集群将其一个只读节点提升为完全写入器状态。此步骤允许集群代入主集群的角色。在此集群代入其新角色期间，您的数据库在短时间内不可用。当该辅助集群成为新的主集群时，未从旧的主集群复制到选定辅助集群的数据可能会丢失。在与新主卷同步之前，旧主卷会尽力尝试拍一张快照，以便在快照中保存未被复制的数据。

**注意**  
仅当主集群和所有辅助集群具有相同的引擎版本时，您才能对 Amazon DocumentDB 全局集群执行托管式跨区域集群失效转移。如果您的引擎版本不兼容，则可以按照[对 Amazon DocumentDB 全局集群执行手动失效转移](#manual-failover)中的步骤手动执行失效转移。  
如果区域的引擎版本不匹配，则失效转移将被阻止。请检查是否有任何待处理的升级并应用这些升级，以确保所有区域的引擎版本都匹配并且全局集群失效转移不会被阻止。有关更多信息，请参阅 [解除全局集群切换或失效转移的阻止](#unblocking-gc-so-fo)。

为最大限度地减少数据丢失，我们建议您在使用此特征之前执行以下操作：
+ 使应用程序离线以防止写入内容被发送到 Amazon DocumentDB 全局集群的主集群。
+ 查看所有 Amazon DocumentDB 辅助集群的滞后时间。选择复制滞后最小的辅助区域可以最大限度地减少当前出现故障的主区域的数据丢失。通过查看亚马逊中的`GlobalClusterReplicationLag`指标，查看全局集群中所有 Amazon DocumentDB 辅助集群的延迟时间。 CloudWatch这些指标显示复制到辅助集群滞后于复制到主集群的时间（以毫秒为单位）。

  有关亚马逊 DocumentDB CloudWatch 指标的更多信息，请参阅。[Amazon DocumentDB 指标](cloud_watch.md#cloud_watch-metrics_list)

在托管式失效转移期间，所选的辅助集群将提升为新角色，即主集群。但是，它不会继承主集群的各种配置选项。配置不匹配可能会导致性能问题、工作负载不兼容和其他异常行为。为避免出现此类问题，我们建议您解决以下方面的 Amazon DocumentDB 全局集群之间的差异问题：
+ **为新的主数据库集群配置 Amazon DocumentDB 集群参数组（如有必要）**- 您可以为 Amazon DocumentDB 全局集群中的每个集群单独配置 Amazon DocumentDB 集群参数组。因此，当您提升辅助集群以接管主数据库集群的角色时，辅助数据库集群中参数组的配置可能与主数据库集群的配置不同。如果是这样，请修改提升后的辅助集群的参数组，使其与主集群的设置一致。要了解如何操作，请参阅[修改 Amazon DocumentDB 集群参数组](cluster_parameter_groups-modify.md)。
+ **配置监控工具和选项，例如 Amazon CloudWatch 事件和警报** — 根据全局集群的需要，为提升的集群配置相同的日志记录功能、警报等。与参数组一样，在故障转移过程中，这些特征的配置不会从主数据库集群继承。某些 CloudWatch 指标（例如复制延迟）仅适用于次要区域。因此，失效转移会更改查看这些指标和对指标设置警报的方式，并且可能要求更改任何预定义的控制面板。有关 Amazon DocumentDB 集群和监控的更多信息，请参阅 [监控 Amazon DocumentDB](monitoring_docdb.md)。

通常，所选的辅助集群会在一分钟内代入主角色。一旦新的主区域的写入器节点可用，您就可以将应用程序连接到该节点并恢复工作负载。Amazon DocumentDB 提升新的主集群后，它会自动重建所有其他辅助区域集群。

由于 Amazon DocumentDB 全局集群使用异步复制，因此每个辅助区域的复制滞后可能会有所不同。Amazon DocumentDB 重建了这些次要区域，使其 point-in-time数据与新的主区域集群完全相同。完成重建任务的持续时间可能需要几分钟到几小时，具体取决于存储卷的大小和区域之间的距离。当辅助区域集群从新的主区域完成重建后，它们就可供进行读取访问了。一旦新的主写入器已提升并可用，新的主区域的集群就可以处理 Amazon DocumentDB 全局集群的读取和写入操作。

为了还原全局集群的原始拓扑，Amazon DocumentDB 会监控旧主区域的可用性。一旦该区域正常运行并再次可用，Amazon DocumentDB 就会自动将其作为辅助区域重新添加到全局集群中。在旧的主区域中创建新的存储卷之前，Amazon DocumentDB 会尝试在出现故障时拍摄旧存储卷的快照。它这样做是为了让您可以用它来恢复任何丢失的数据。如果此操作成功，Amazon DocumentDB 会将名为 “rds: name-of-old-primary-db-cluster docdb-unplanned-global-failover-timeStamp” 的快照放在快照部分中。 AWS 管理控制台还可以在 `DescribeDBClusterSnapshots` API 操作返回的信息中看到列出的此快照。

**注意**  
旧存储卷的快照是系统快照，受旧的主集群上配置的备份保留期限制。要在保留期之外保留此快照，可以复制它以另存为手动快照。要了解有关复制快照的更多信息（包括定价），请参阅[复制集群快照](backup_restore-copy_cluster_snapshot.md#backup_restore-copy_a_cluster_snapshot)。

还原原始拓扑后，您可以通过在对业务和工作负载最有意义的时候执行切换操作，将全局集群失效自动恢复到原始主区域。为此，请按照[对 Amazon DocumentDB 全局集群执行切换](#global-cluster-switchover)中的步骤进行操作。

您可以使用 AWS 管理控制台、或 Amazon DocumentDB API 对亚马逊文档数据库全局集群进行故障切换。 AWS CLI

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

**对 Amazon DocumentDB 全局集群执行托管式失效转移**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 查找并选择要进行失效转移的 Amazon DocumentDB 全局集群。  
![\[图片：选择了全局集群的集群表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/failover-cluster-table.png)

1. 从**操作**菜单中选择**切换或失效转移**。

1. 在弹出的对话框中，选择**失效转移**，然后从**新主集群**字段下拉列表中选择辅助集群。  
![\[图片：全局集群切换或失效转移对话框。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/switch-fail-confirm.png)

1. 在最后一个字段中，键入“confirm”。然后，选择 **Confirm（确认）**。

   主集群的状态更改为“**失效转移**”。这种情况应该需要一分钟左右。在此期间，新主集群的状态显示“**正在修改...**”。新主集群升级后将显示“可用”，并且能够**处理**读取和写入事务。与新主集群重新同步时，包含旧主集群的辅助区域将显示“**正在重新同步...**”。与新主集群类似，只有在状态变为“**可用**”后，旧主集群才能处理事务。

1. 完成后，原始主集群将变为辅助集群。选定的辅助集群将变为主集群。  
![\[图片：显示新主集群的集群表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/failover-complete.png)

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

**对 Amazon DocumentDB 全局集群执行托管式失效转移**

运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/failover-global-cluster.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/failover-global-cluster.html) CLI 命令以对 Amazon DocumentDB 全局集群进行失效转移。使用命令，传递下列选项的值：
+ `--region`
+ `--global-cluster-identifier`
+ `--target-db-cluster-identifier`
+ `--allow-data-loss`

在以下示例中，将每个*user input placeholder*示例替换为集群的信息。

对于 Linux、macOS 或 Unix：

```
aws docdb failover-global-cluster \
   --region region_of_selected_secondary \
   --global-cluster-identifier global_cluster_id \
   --target-db-cluster-identifier arn_of_secondary_to_promote \
   --allow-data-loss
```

对于 Windows：

```
aws docdb failover-global-cluster ^
   --region region_of_selected_secondary ^
   --global-cluster-identifier global_cluster_id ^
   --target-db-cluster-identifier arn_of_secondary_to_promote ^
   --allow-data-loss
```

------

## 对 Amazon DocumentDB 全局集群执行手动失效转移
<a name="manual-failover"></a>

如果一个集群中的整个集群 AWS 区域 不可用，则可以将全局集群中的另一个集群提升为具有 read/write 功能。

如果另一个 AWS 区域 中的集群成为主集群效果更好，您可以手动启用全局集群失效转移机制。例如，您可以提高其中一个辅助集群的容量，然后将其提升成为主集群。或者，它们之间的活动平衡 AWS 区域 可能会发生变化，因此将主集群切换到不同的集群 AWS 区域 可能会降低写入操作的延迟。

以下过程概述了如何在 Amazon DocumentDB 全局集群中提升其中一个辅助集群。

提升辅助集群

1. 停机时停止向主集群发出 DML 语句和其他写入操作。 AWS 区域 

1. 从辅助群集中识别出 AWS 区域 要用作新的主群集的群集。如果您的全局群集中有两个（或更多）辅助 AWS 区域 群集，请选择延迟时间最少的辅助群集。

1. 从全局集群分离您所选的辅助集群。

   从全局群集中移除辅助群集会立即停止从主群集向该辅助群集的复制，并将其提升为具有全部 read/write 功能的独立预配置群集。与该停机区域中的主集群关联的任何其他辅助集群仍然可用，并且可以接受应用程序的调用。它们还会消耗资源。由于您要重新创建全局集群，为避免分裂大脑和其他问题，请先删除其他辅助集群，再在后续步骤中创建新的全局集群。

   有关分离的详细步骤，请参阅 [从 Amazon DocumentDB 全局集群中删除某集群](global-clusters.manage.md#global-clusters.remove)。

1. 在下一步中，当您开始向集群添加区域时，该集群将成为新的全局数据库的主集群。

1.  AWS 区域 向集群中添加。执行此操作后，从主数据库集群到辅助数据库集群的复制过程将会开始。

1. 根据需要添加更多内容 AWS 区域 ，以重新创建支持您的应用程序所需的拓扑。确保在做出这些更改之前、更改期间和更改之后，将应用程序写入内容发送到正确的集群，以避免全局集群中集群之间的数据不一致（大脑分裂问题）。

1. 当停机问题已解决且您已准备好再次将原始 AWS 区域 指定为主集群时，请按相反顺序执行相同步骤：

1. 从全局集群移除其中一个辅助集群。这将使其能够为 read/write 流量提供服务。

1. 将所有写入流量重定向到原始 AWS 区域中的主集群。

1. 添加 AWS 区域 可以 AWS 区域 像以前一样设置一个或多个辅助群集。

Amazon DocumentDB 全球集群可以使用进行管理 AWS SDKs，使您能够创建解决方案，自动执行灾难恢复和业务连续性规划用例的全局集群故障转移流程。其中一个解决方案已通过 Apache 2.0 许可提供给我们的客户，并且可以从我们的工具库中访问[此处](https://github.com/awslabs/amazon-documentdb-tools/tree/master/global-clusters-automation)。该解决方案利用 Amazon Route 53 进行终端节点管理，并提供可根据相应事件触发的 AWS Lambda 功能。

## 对 Amazon DocumentDB 全局集群执行切换
<a name="global-cluster-switchover"></a>

通过使用切换，您可以定期更改主集群的区域。此方法适用于受控场景，例如操作维护和其他计划内操作过程。

切换有三种常见使用案例：
+ 适用于对特定行业施加的“区域轮换”要求。例如，金融服务法规可能要求第 0 层系统在几个月内切换到不同的区域，以确保定期执行灾难恢复过程。
+ 适用于多区域 “follow-the-sun” 应用程序。例如，一家企业可能希望根据不同时区的工作时间在不同区域提供延迟更低的写入。
+ 作为故障转移后故障恢复到原始主区域 zero-data-loss的一种方法。

**注意**  
切换功能专为用于正常运行的 Amazon DocumentDB 全局集群而设计。要从计划外停机中进行恢复，请按照[对 Amazon DocumentDB 全局集群执行手动失效转移](#manual-failover)中的相应过程操作。  
要执行切换，所有辅助区域都必须运行与主区域完全相同的引擎版本。如果区域的引擎版本不匹配，则切换将被阻止。请检查是否有任何待处理的升级并应用这些升级，以确保所有区域的引擎版本都匹配并且全局集群切换不会被阻止。有关更多信息，请参阅 [解除全局集群切换或失效转移的阻止](#unblocking-gc-so-fo)。

在切换过程中，Amazon DocumentDB 会将您的主集群切换到您选择的辅助区域，同时维护全局集群的现有复制拓扑。在开始切换过程之前，Amazon DocumentDB 会等待所有辅助区域集群与主区域集群完全同步。然后，主区域中的数据库集群将变为只读状态，所选辅助集群将其一个只读节点提升为完全写入器状态。将此节点提升为写入器将允许该辅助集群代入主集群的角色。由于所有辅助集群在过程开始时都与主集群同步，因此新的主集群将继续执行 Amazon DocumentDB 全局集群的操作，而不会丢失任何数据。您的数据库在短时间内不可用，而主集群和所选的辅助集群将担任其新角色。

为了优化应用程序可用性，我们建议您在使用此特征之前执行以下操作：
+ 在非高峰时间段，或在向主集群写入操作最少的其他时间执行此操作。
+ 使应用程序离线以防止写入内容被发送到 Amazon DocumentDB 全局集群的主集群。
+ 通过查看亚马逊中的`GlobalClusterReplicationLag`指标，查看全局集群中所有 Amazon DocumentDB 辅助集群的延迟时间。 CloudWatch该指标显示复制到辅助集群滞后于复制到主集群的时间（以毫秒为单位）。该值与 Amazon DocumentDB 完成切换所需的时间成正比。因此，滞后值越大，切换所需的时间就越长。

  有关亚马逊 DocumentDB CloudWatch 指标的更多信息，请参阅。[Amazon DocumentDB 指标](cloud_watch.md#cloud_watch-metrics_list)

在切换期间，所选的辅助数据库集群将提升为新角色，即主数据库集群。但是，它不会继承主数据库集群的各种配置选项。配置不匹配可能会导致性能问题、工作负载不兼容和其他异常行为。为避免出现此类问题，我们建议您解决以下方面的 Amazon DocumentDB 全局集群之间的差异问题：
+ **为新的主数据库集群配置 Amazon DocumentDB 数据库集群参数组（如有必要）**- 您可以为 Amazon DocumentDB 全局集群中的每个集群单独配置 Amazon DocumentDB 集群参数组。这意味着，当您提升辅助数据库集群以接管主数据库集群的角色时，辅助数据库集群中参数组的配置可能与主数据库集群的配置不同。如果是这样，请修改提升后的辅助数据库集群的参数组，使其与主集群的设置一致。要了解如何操作，请参阅[管理 Amazon DocumentDB 集群参数组](cluster_parameter_groups.md)。
+ **配置监控工具和选项，例如 Amazon Ev CloudWatch ents 和警报** — 根据全局集群的需要，为提升的集群配置相同的日志记录功能、警报等。与参数组一样，在切换过程中，这些特征的配置不会从主数据库集群继承。某些 CloudWatch 指标（例如复制延迟）仅适用于主要区域。因此，切换会更改查看这些指标和对指标设置警报的方式，并且可能要求更改任何预定义的控制面板。有关更多信息，请参阅 [监控 Amazon DocumentDB](monitoring_docdb.md)。

**注意**  
通常，角色切换最多可能需要几分钟。

切换过程完成后，提升后的 Amazon DocumentDB 集群即可处理全局集群的写入操作。

您可以使用 AWS 管理控制台 或切换您的 Amazon DocumentDB 全局集群： AWS CLI

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

**对 Amazon DocumentDB 全局集群执行切换**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 查找并选择要进行切换的 Amazon DocumentDB 全局集群。  
![\[图片：选择了全局集群的集群表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/switchover-cluster-table.png)

1. 从**操作**菜单中选择**切换或失效转移**。

1. 在弹出的对话框中，选择**切换**，然后从**新主集群**字段下拉列表中选择辅助集群。  
![\[图片：选择了辅助集群的集群切换对话框。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/switch-fail-confirm-2.png)

1. 选择**确认**。

   主集群的状态更改为“**切换**”。这种情况应该需要三分钟左右。在此期间，所有区域集群的状态显示“**正在修改...**”。一旦区域同步且新主集群升级后，所有状态字段将显示“**可用**”，并且能够处理事务。

1. 完成后，原始主集群将变为辅助集群。选定的辅助集群将变为主集群。  
![\[图片：显示新主集群的集群表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/failover-complete.png)

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

**对 Amazon DocumentDB 全局集群执行切换**

运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/switchover-global-cluster.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/switchover-global-cluster.html) CLI 命令以切换 Amazon DocumentDB 全局集群。使用命令，传递下列选项的值：
+ `--region`
+ `--global-cluster-identifier`
+ `--target-db-cluster-identifier`

在以下示例中，将每个*user input placeholder*示例替换为集群的信息。

对于 Linux、macOS 或 Unix：

```
aws docdb switchover-global-cluster \
   --region region_of_primary \
   --global-cluster-identifier global_cluster_id \
   --target-db-cluster-identifier arn_of_secondary_to_promote
```

对于 Windows：

```
aws docdb switchover-global-cluster ^
   --region region_of_primary ^
   --global-cluster-identifier global_cluster_id ^
   --target-db-cluster-identifier arn_of_secondary_to_promote
```

------

## 解除全局集群切换或失效转移的阻止
<a name="unblocking-gc-so-fo"></a>

当全局集群中的所有区域集群并非都使用相同的引擎版本时，会阻止全局集群切换和失效转移。如果版本不匹配，则在调用切换或失效转移时，您可能会在响应中收到以下错误：指定的目标数据库集群正在运行的引擎版本与源数据库集群的补丁级别不同。我们建议定期应用最新的引擎版本，以确保您运行的是最新的更新，从而使您的全局集群保持健康状态。

要解决此错误，请通过应用任何待处理维护操作项目，先将所有辅助区域更新至相同的引擎版本，然后再将主区域更新至相同的引擎版本。要查看待处理维护操作项目并应用任何必要的变更来更正问题，请按照以下选项卡之一中的说明进行操作：

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

要解除对全局集群切换或失效转移的阻止，您必须确定集群是否有任何待处理维护操作并应用这些操作。请按照以下步骤查看并应用维护操作：

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 在**集群**表中，在**集群标识符**列中找到您的全局集群。在您的全局集群下，记下给定全局集群的每个辅助集群和主集群，然后对每个集群执行以下步骤。

1. 对于每个辅助集群：

   1. 如果更新可用于您的集群，则会在**维护**列中以**可用**、**必需**或**下一个时段**指示。

   1. 要采取操作，请选择集群以显示其详细信息，然后选择**维护和备份**。将显示**待处理维护**项目。

   1. 在**描述**下，如果指示“有新的维护更新可用”，请将其选中，然后选择**立即应用**。

1. 对于您的主集群：

   1. 如果更新可用于您的集群，则会在**维护**列中以**可用**、**必需**或**下一个时段**指示。

   1. 要采取操作，请选择集群以显示其详细信息，然后选择**维护和备份**。将显示**待处理维护**项目。

   1. 在**描述**下，如果指示“有新的维护更新可用”，请将其选中，然后选择**立即应用**。

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

要解除对全局集群切换或失效转移的阻止，您必须确定集群是否有任何待处理维护操作并应用这些操作。请按照以下步骤，先在全局集群的辅助集群上查看并应用维护操作，然后再在全局集群的主集群上查看并应用维护操作：

1. 先在每个辅助区域的区域集群上运行以下命令，然后再在主区域的区域集群上运行以下命令。

1. 运行具有 `--resource-identifier` 选项的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-pending-maintenance-actions.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-pending-maintenance-actions.html) CLI 命令，以确定是否有任何维护操作可用于您的 Amazon DocumentDB 区域集群。

   在以下示例中，将每个*user input placeholder*示例替换为集群的信息。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-pending-maintenance-action \
      --resource-identifier arn:aws:rds:us-east-1:001234567890:cluster:docdb-2025-03-27-19-21-15
   ```

   对于 Windows：

   ```
   aws docdb describe-pending-maintenance-action ^
      --resource-identifier arn:aws:rds:us-east-1:001234567890:cluster:docdb-2025-03-27-19-21-15
   ```

   结果类似如下：

   ```
   {
       "PendingMaintenanceActions": [
           {
               "ResourceIdentifier": "arn:aws:rds:us-east-1:001234567890:cluster:docdb-2025-03-27-19-21-15",
               "PendingMaintenanceActionDetails": [
                   {
                       "Action": "system-update",
                       "CurrentApplyDate": "2025-04-11T03:01:00Z",
                       "Description": "db-version-upgrade",
                       "ForcedApplyDate": "2025-06-18T03:01:00Z",
                       "AutoAppliedAfterDate": "2025-05-11T03:01:00Z"
                       "OptInStatus": "pending"
                   }
               ]
           }
       ]
   }
   ```

1. 如果需要维护操作，请运行具有以下选项的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/apply-pending-maintenance-action.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/apply-pending-maintenance-action.html) CLI 命令：
   + `--resource-identifier`
   + `--apply-action`
   + `--opt-in-type`
   + `--region`

   在以下示例中，将每个*user input placeholder*示例替换为集群的信息。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb apply-pending-maintenance-action \
      --resource-identifier arn:aws:rds:us-east-1:001234567890:cluster:docdb-2025-03-27-19-21-15 \
      --apply-action system-update \
      --opt-in-type immediate \
      --region us-east-1
   ```

   对于 Windows：

   ```
   aws docdb apply-pending-maintenance-action ^
      --resource-identifier arn:aws:rds:us-east-1:001234567890:cluster:docdb-2025-03-27-19-21-15 ^
      --apply-action system-update ^
      --opt-in-type immediate ^
      --region us-east-1
   ```

1. 维护操作完成后，再次运行 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-pending-maintenance-actions.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/docdb/describe-pending-maintenance-actions.html) 命令以确保您的集群没有其他待处理的操作。

   您想要的结果是：

   ```
   {
       "PendingMaintenanceActions": []
   }
   ```

------
#### [ Using the Amazon DocumentDB API ]

要解除对全局集群切换或失效转移的阻止，您必须确定集群是否有任何待处理维护操作并应用这些操作。使用以下内容 APIs 查看和应用维护操作：

1. 先在每个辅助区域的区域集群上运行以下命令，然后再在主区域的区域集群上运行以下命令。

1. 调用 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_PendingMaintenanceAction.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_PendingMaintenanceAction.html) API 以确定是否有任何维护操作可用于您的 Amazon DocumentDB 全局集群。

1. 通过调用 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_ApplyPendingMaintenanceAction.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_ApplyPendingMaintenanceAction.html) API 来应用任何更改。

------

# 管理 Amazon DocumentDB 集群
<a name="db-clusters"></a>

要管理 Amazon DocumentDB 集群，您必须拥有带适当 Amazon DocumentDB 控制面板权限的 IAM policy。这些权限使您能够创建、修改和删除集群和实例。`AmazonDocDBFullAccess` 策略提供管理 Amazon DocumentDB 集群所需的所有权限。

以下主题说明如何在使用 Amazon DocumentDB 集群时执行各种任务，包括创建、删除、修改、连接和查看集群。

**Topics**
+ [了解集群](db-clusters-understanding.md)
+ [集群设置](db-cluster-parameters.md)
+ [集群存储配置](db-cluster-storage-configs.md)
+ [确定集群的状态](db-cluster-status.md)
+ [集群生命周期](db-cluster-life-cycle.md)
+ [扩展集群](db-cluster-manage-performance.md)
+ [克隆集群卷](db-cluster-cloning.md)
+ [了解集群容错能力](db-cluster-fault-tolerance.md)

# 了解集群
<a name="db-clusters-understanding"></a>

Amazon DocumentDB 分离计算和存储，并将数据复制和备份负载分流到集群卷。集群卷提供持久、可靠且高度可用的存储层，可跨三个可用区以六种方式复制数据。副本可实现更高的数据可用性和读取扩展。每个集群可以扩展到最多 15 个副本。


| 名词 | 说明 | API 操作（动词） | 
| --- | --- | --- | 
|  Cluster  |  包含一个或多个实例和一个管理这些实例的数据的集群存储卷。  |  `create-db-cluster` `delete-db-cluster` `describe-db-clusters` `modify-db-cluster` | 
| 实例 | 读取集群存储卷以及向其中写入数据将通过实例进行。在给定的集群中，有两种类型的实例：主实例和副本实例。一个集群始终有一个主实例，并且可以有 0–15 个副本实例。 |  `create-db-instance` `delete-db-instance` `describe-db-instances` `modify-db-instance` `describe-orderable-db-instance-options` `reboot-db-instance` | 
| 集群卷 | 跨三个可用区的虚拟数据库存储卷，每个可用区均有两个集群数据副本。 | 不适用 | 
|  主实例  |  支持读取和写入操作，并执行针对集群卷的所有数据修改。每个集群均有一个主实例。  | 不适用 | 
|  副本实例  |  仅支持读取操作。除主实例之外，每个 Amazon DocumentDB 集群最多可拥有 15 个副本实例。多个副本共同分担读取工作负载。通过将副本置于单独的可用区中，您还可以提高数据库可用性。  | 不适用 | 
|  集群端点  |  Amazon DocumentDB 集群的一个端点，用于连接到该集群的当前主实例。每个 Amazon DocumentDB 集群都具有一个集群端点和一个主实例。  | 不适用 | 
|  读取器端点  |  Amazon DocumentDB 集群的一个端点，用于连接到该集群的可用副本之一。每个 Amazon DocumentDB 集群都具有一个读取器端点。如果有多个副本，则读取器端点会将每个连接请求定向到 Amazon DocumentDB 副本之一。  | 不适用 | 
|  实例端点  |  Amazon DocumentDB 集群中的实例的一个端点，用于连接到该特定实例。集群中的每个实例，不论其实例类型，都有各自唯一的实例端点。  | 不适用 | 

# Amazon DocumentDB 集群设置
<a name="db-cluster-parameters"></a>

创建或修改集群时，了解哪些参数不可改变，哪些参数在创建集群后可修改，这一点很重要。下表列出了特定于集群的所有设置或参数。如表中所示，有些是可修改的，有些不可修改。

**注意**  
这些设置不应与 Amazon DocumentDB 集群参数组及其参数混淆。有关集群参数组的更多信息，请参阅 [管理 Amazon DocumentDB 集群参数组](cluster_parameter_groups.md)。


| 参数 | 可修改 | 备注 | 
| --- | --- | --- | 
| DBClusterIdentifier | 是 |  命名约束： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-parameters.html)  | 
| Engine | 否 | 必须是 docdb。 | 
| BackupRetentionPeriod | 是 | 必须介于 [1-35] 天之间。 | 
| DBClusterParameterGroupName | 是 |  命名约束： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-parameters.html)  | 
| DBSubnetGroupName | 否 | 创建集群后，无法修改集群的子网。 | 
| EngineVersion | 否 | 值可以是 5.0.0（默认）、4.0.0 或 3.6.0。 | 
| KmsKeyId | 否 | 如果您选择加密集群，则无法更改用于加密集群的密 AWS KMS 钥。 | 
| MasterUsername | 否 |  创建集群后，无法修改 `MasterUsername`。 命名约束： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-parameters.html)  | 
| MasterUserPassword | 是 |  约束： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-parameters.html)  | 
| Port | 是 | 端口号适用于集群中的所有实例。 | 
| PreferredBackupWindow | 支持 |  | 
| PreferredMaintenanceWindow | 是 |  | 
| StorageEncrypted | 否 | 如果选择加密集群，则不能对其进行加密。 | 
| StorageType | 是 |  数据库集群的存储类型：标准 (`standard`) 或 I/O 优化 (`iopt1`)。 默认值：`standard` 可以使用 `CreateDBCluster` 和 `ModifyDBCluster` 配置此参数。 有关更多信息，请参阅 [Amazon DocumentDB 集群存储配置](db-cluster-storage-configs.md)。  | 
| Tags | 是 |  | 
| VpcSecurityGroupIds | 否 | 创建集群后，您不能修改集群所在的 VPC。 | 

# Amazon DocumentDB 集群存储配置
<a name="db-cluster-storage-configs"></a>

从 Amazon DocumentDB 5.0 开始，基于实例的集群支持以下两种存储配置类型：
+ **亚马逊 DocumentDB 标准存储**：专为低至中度 I/O 消耗的客户而设计。如果您预计 I/O 成本将低于亚马逊文档数据库集群总量的 25%，那么此选择可能非常适合您。使用 Amazon DocumentDB 标准存储配置，除了实例费用和存储费用外，您还需要 pay-per-request I/O 按比例计费。这意味着您的账单可能会根据周期和使用量有所不同。该配置经过量身定制，可适应您的应用不断变 I/O 化的需求。
+ **Amazon DocumentDB I/O 优化存储**：专为优先考虑价格可预测性或拥有密集型应用程序的客户而设计。 I/O 运I/O-optimized configuration offers improved performance, increased throughput, and reduced latency for customers with I/O intensive workloads. If you expect your I/O costs to exceed 25% of your total Amazon DocumentDB cluster costs, this option offers enhanced price performance. With the Amazon DocumentDB I/O-optimized storage configuration, you won't be charged based on I/O营，确保每个计费周期的成本可预测。该配置可以稳定成本，同时改善性能。

您可以每 30 天将现有数据库集群切换到 Amazon DocumentDB。I/O-optimized storage. You can switch back to Amazon DocumentDB standard storage at any time. The next date to modify the storage configuration to I/O经过优化的可以通过集群配置页面 AWS 管理控制台 中的`describe-db-clusters`命令 AWS CLI 或使用命令进行跟踪。

您可以创建包含 Amazon DocumentDB I/O 优化配置的新数据库集群，也可以通过点击几下[AWS 管理控制台](https://console.aws.amazon.com/docdb/)、在 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 中更改单个参数或通过以下方式转换现有数据库集群。[AWS SDKs](https://aws.amazon.com/developer/tools/)在修改存储配置期间或修改之后，无需停机或重启实例。

![\[图片：Amazon DocumentDB 标准存储和优化存储差异表。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/io-diagram-1.png)


## 创建 I/O 优化集群
<a name="w2aac33c11c13c15"></a>



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

使用 AWS 管理控制台创建或修改 I/O 优化集群：

1. 在 Amazon DocumentDB 管理控制台的**集群**下，选择**创建**或选择集群，再选择**操作**，然后选择**修改**。

1. 如果要创建新的集群，请确保在**集群类型**部分中选择**基于实例的集群**（此为默认选项）。  
![\[图片：含有集群类型选项的控制台屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-cluster/cc-type.png)

1. 在**配置**部分的**集群存储配置**下，选择 **Amazon DocumentDB I/O 优化**。  
![\[图片：含有集群存储配置选项的控制台屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/storage-config-1.png)

1. 完成集群的创建或修改，并选择**创建集群**或**修改集群**。

   有关创建集群的完整流程，请参阅 [使用创建集群和主实例 AWS 管理控制台](db-cluster-create.md#db-cluster-create-con)。

   有关修改集群的完整流程，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。

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

使用 AWS CLI创建 I/O 优化集群：

在以下示例中，用您自己的信息替换每个*user input placeholder*示例。

对于 Linux、macOS 或 Unix：

```
aws docdb create-db-cluster \
      --db-cluster-identifier sample-cluster \
      --engine docdb \
      --engine-version 5.0.0 \
      --storage-type iopt1 \
      --deletion-protection \
      --master-username username \
      --master-user-password password
```

对于 Windows：

```
aws docdb create-db-cluster ^
      --db-cluster-identifier sample-cluster ^
      --engine docdb ^
      --engine-version 5.0.0 ^
      --storage-type iopt1 ^
      --deletion-protection ^
      --master-username username ^
      --master-user-password password
```

------

## 确定存储配置的成本分析
<a name="w2aac33c11c13c17"></a>

借助 Amazon DocumentDB，您可以灵活地为自己拥有的每个数据库集群选择存储配置。为了在标准集群和 I/O 优化集群之间正确分配集群，可以按集群跟踪 Amazon DocumentDB 成本。为此，您可以向现有集群添加标签，在 [AWS 账单与成本管理 控制面板](https://aws.amazon.com/pricing/)中启用成本分配标签，并在 [AWS Cost Explorer Service](https://aws.amazon.com/aws-cost-management/aws-cost-explorer/) 中分析给定集群的成本。有关成本分析的信息，请参阅博客“[使用成本分配标签](https://aws.amazon.com/blogs/database/using-cost-allocation-tags-with-amazon-documentdb-with-mongodb-compatibility/)”。

# 确定集群的状态
<a name="db-cluster-status"></a>

您可以使用 AWS 管理控制台 或来确定集群的状态 AWS CLI。

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

使用以下步骤通过以下步骤查看您的 Amazon DocumentDB 集群的状态 AWS 管理控制台

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 在 **Cluster identifier (集群标识符)** 列中，找到您感兴趣的集群名称。然后，要查找集群的状态，请跨该行阅读至 **Status (状态)** 列，如下所示。  
![\[带显示活动状态的示例集群的集群页屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-status-con.png)

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

使用 `describe-db-clusters` 操作以使用 AWS CLI查看 Amazon DocumentDB 集群的状态。

以下代码可查找集群 `sample-cluster` 的状态。

对于 Linux、macOS 或 Unix：

```
aws docdb describe-db-clusters \
    --db-cluster-identifier sample-cluster  \
    --query 'DBClusters[*].[DBClusterIdentifier,Status]'
```

对于 Windows：

```
aws docdb describe-db-clusters ^
    --db-cluster-identifier sample-cluster  ^
    --query 'DBClusters[*].[DBClusterIdentifier,Status]'
```

此操作的输出将类似于下文（JSON 格式）。

```
[
    [
        "sample-cluster",
        "available"
    ]
]
```

------

# Amazon DocumentDB 集群生命周期
<a name="db-cluster-life-cycle"></a>

Amazon DocumentDB 集群的生命周期包括创建、描述、修改和删除集群。本节提供有关如何完成这些过程的信息。

**Topics**
+ [创建集群](db-cluster-create.md)
+ [描述集群](db-cluster-view-details.md)
+ [修改集群](db-cluster-modify.md)
+ [确定待处理维护](db-cluster-determine-pending-maintenance.md)
+ [更新集群的引擎版本的补丁](db-cluster-version-upgrade.md)
+ [停止和启动集群](db-cluster-stop-start.md)
+ [删除集群](db-cluster-delete.md)

# 创建 Amazon DocumentDB 集群
<a name="db-cluster-create"></a>

Amazon DocumentDB 集群由一些实例和一个表示该集群的数据的集群卷组成。集群卷作为单个虚拟卷在三个可用区之间的 6 个方向进行复制。集群包含一个主实例，以及可选的最多 15 个副本实例。

以下各节介绍如何使用 AWS 管理控制台 或创建 Amazon DocumentDB 集群。 AWS CLI然后，您可为该集群添加更多副本实例。使用控制台创建 Amazon DocumentDB 集群时，会同时自动为您创建一个主实例。如果您使用创建您的 AWS CLI Amazon DocumentDB 集群，则在集群的状态变为*可用*之后，您必须为该集群创建主实例。

## 先决条件
<a name="db-cluster-create-prerequisites"></a>

以下是创建 Amazon DocumentDB 集群的先决条件。

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**要注册 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### VPC 先决条件
<a name="db-cluster-create-prerequisites-vpc"></a>

只能在 Amazon Virtual Private Cloud (Amazon VPC) 中创建 Amazon DocumentDB 集群。要在 Amazon DocumentDB 集群中使用您的 Amazon VPC，该 Amazon VPC 必须最少在两个可用区中均拥有至少一个子网。通过跨可用区分配您的集群实例，您可以确保集群中有可用的实例，避免出现可用区故障。

### 子网先决条件
<a name="db-cluster-create-prerequisites-subnet-groups"></a>

创建 Amazon DocumentDB 集群时，您必须选择一个 VPC 和该 VPC 中的对应子网组来启动您的集群。子网确定可用区以及该可用区内要用于启动实例的 IP 范围。为进行此讨论，我们将互换使用术语*子网* 和*可用区*。子网组是一组指定的子网（或可用区）。子网组可让您指定要用于启动 Amazon DocumentDB 实例的可用区。例如，在包含三个实例的集群中，为了实现高可用性，建议在单独的可用区中配置各个实例。因此，如果单个可用区出现故障，它只会影响单个实例。

Amazon DocumentDB 实例目前可在多达三个可用区中预配置。即使子网组拥有三个以上的子网，您也只能使用其中的三个子网来创建 Amazon DocumentDB 集群。因此，在创建子网组时，建议仅选择要将实例部署到的三个子网。在美国东部（弗吉尼亚州北部），您的子网组可以有六个子网（或可用区）。但是，当已预配置一个 Amazon DocumentDB 集群后，Amazon DocumentDB 将选择这些可用区中将用于预配置实例的三个可用区。

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

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

### 其他先决条件
<a name="db-cluster-create-prerequisites-additional"></a>

以下是创建 Amazon DocumentDB 集群的一些其他先决条件：
+ 如果您 AWS 使用 AWS Identity and Access Management (IAM) 证书进行连接，则您的 IAM 账户必须具有授予执行 Amazon DocumentDB 操作所需权限的 IAM 策略。

  如果您使用 IAM 账户访问亚马逊 DocumentDB 控制台，则必须先使用您的 IAM 账户登录。 AWS 管理控制台 [然后前往位于 /docdb 的亚马逊 DocumentDB 控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)
+ 如果要定制您的集群的配置参数，您必须指定集群参数组和具有必需参数设置的参数组。有关创建或修改集群参数组的信息，请参阅 [管理 Amazon DocumentDB 集群参数组](cluster_parameter_groups.md)。
+ 您必须确定要为集群指定的 TCP/IP 端口号。有些公司的防火墙不允许连接到 Amazon DocumentDB 的默认端口。如果您公司的防火墙阻止该默认端口，请为您的集群选择其他端口。集群中的所有实例都使用同一端口。

## 使用创建集群和主实例 AWS 管理控制台
<a name="db-cluster-create-con"></a>

以下过程介绍了如何使用控制台启动包含一个或多个实例的 Amazon DocumentDB 集群。

### 创建集群：使用默认设置
<a name="db-cluster-create-con-basic"></a>

**要使用默认设置创建包含实例的集群，请使用 AWS 管理控制台**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 如果您想在美国东部（弗吉尼亚北部）以外 AWS 区域 的其他地区创建集群，请从控制台右上角的列表中选择该区域。

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

1. 在**创建 Amazon DocumentDB 集群**页中，完成**配置**窗格。

   1. **集群标识符**：接受 Amazon DocumentDB 提供的名称，或者为您的集群输入名称，例如 **sample-cluster**。

      集群命名约束：
      + 长度为 [1-63] 个字母、数字或连字符。
      + 第一个字符必须是字母。
      + 不能以连字符结尾或包含两个连续的连字符。
      + 每个区域的 Amazon RDS、Neptune 和 Amazon DocumentDB 中的所有集群都必须是唯一 AWS 账户的。

   1. **引擎版本**-接受默认引擎版本 5.0.0，或者可以选择选择 8.0.0、4.0.0 或 3.6.0。

   1. **实例类**：接受默认值 `db.r5.large`，或者从列表中选择您需要的实例类。

   1. **实例数**：在列表中，选择要使用此集群创建的实例的数量。第一个实例为主实例，所有其他实例为只读副本实例。您可以在稍后添加和删除实例（如果需要）。默认情况下，Amazon DocumentDB 集群将以三个实例（一个主实例和两个副本）启动。

1. 完成**集群存储配置**部分。

   选择 **Amazon DocumentDB 标准**（默认）或 **Amazon DocumentDB I/O 优化**。有关更多信息，请参阅 [Amazon DocumentDB 集群存储配置](db-cluster-storage-configs.md)。

1. 完成 **Authentication (身份验证)** 窗格。

   1. **用户名**：输入主用户的名称。要登录您的集群，您必须使用主用户名称。

      主用户命名约束：
      + 长度为 [1-63] 个字母数字字符。
      + 第一个字符必须是字母。
      + 不能是数据库引擎的保留字。

   1. 请选择以下密码选项之一：
      + **托管于 AWS Secrets Manager**-如果您想自动管理您的主用户密码 AWS Secrets Manager ，请选择此选项。

        如果您选择此选项，请通过创建您自己的密钥或使用 Secrets Manager 创建的密钥来配置 KMS 密钥。
      + **自行管理**：如果您想要自行管理您的主用户密码，请选择此选项。如果选择此选项，请输入主用户的密码，然后确认该密码。要登录您的集群，您必须使用主用户密码。

        密码约束：
        + 长度为 [8-100] 个可打印 ASCII 字符。
        + 可以使用任何可打印 ASCII 字符，以下字符除外：
          + **/**（正斜杠）
          + **"**（双引号）
          + **@**（@ 符号）

1. 在屏幕的底部，选择以下选项之一：
   + 要立即创建集群，请选择 **Create cluster (创建集群)**。
   + 要不创建集群，请选择 **Cancel (取消)**。
   + 要在创建集群前进一步配置集群，请选择 **Show additional configurations (显示其他配置)**，然后在[创建集群：其他配置](#db-cluster-create-con-additional-configs)上继续。

     **Additional Configurations (其他配置)** 部分中包含的配置如下：
     + **网络设置**：默认值为使用 `default` VPC 安全组。
     + **集群选项**：默认值为使用端口 27017 和默认参数组。
     + **加密**：默认值为使用 `(default) aws/rds` 密钥启用加密。
**重要**  
集群加密后，就不能取消加密。
     + **备份**：默认值为保留备份 1 天并让 Amazon DocumentDB 选择备份时段。
     + **日志导**出-默认为不将审核日志导出到 CloudWatch 日志。
     + **维护**：默认设置是让 Amazon DocumentDB 选择维护时段。
     + **删除保护**：防止您的集群被意外删除。使用控制台创建的集群的默认设置为*已启用*。

     如果您现在接受默认设置，则可以稍后通过修改集群来更改其中的大部分。

1. 为集群的安全组启用入站连接。

   如果未更改集群的默认设置，则会使用给定区域中的默认 VPC 的默认安全组创建一个集群。要连接到 Amazon DocumentDB，您必须在端口 27017（或所选的端口）上为集群的安全组启用入站连接。

   **将入站连接添加到集群的安全组**

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

   1. 在主窗口的**资源**部分中，选择**安全组**。  
![\[图片：资源列表中突出显示“安全组”链接选项。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-ec2-security-groups.png)

   1. 从安全组列表中，找到您在创建集群时使用的安全组（很可能是 *default* 安全组），然后选中安全组名称左侧的框。  
![\[图片：安全组列表中突出显示一个选中复选框的安全组。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-ec2-default-sg.png)

   1. 从**操作**菜单中，选择**编辑入站规则**，然后选择或输入规则限制。

      1. **类型**：从列表中，选择要为网络流量打开的协议。

      1. **协议**：从列表中，选择协议类型。

      1. **端口范围**：对于自定义规则，请输入端口号或端口范围。确保端口号或范围包括您在创建集群时指定的端口（默认值：27017）。

      1. **源**：指定可以到达您的实例的流量。从列表中，选择流量源。如果选择**自定义**，请指定单个 IP 地址或以 CIDR 格式表示的 IP 地址范围（例如，203.0.113.5/32）。

      1. **描述**：输入该规则的描述。

      1. 在创建完规则时，选择**保存**。

### 创建集群：其他配置
<a name="db-cluster-create-con-additional-configs"></a>

如果要接受集群的默认设置，您可以跳过以下步骤并选择 **Create cluster (创建集群)**。

1. 完成 **Network settings (网络设置)** 窗格。  
![\[屏幕截图：显示用于配置网络设置的“Network settings (网络设置)”窗格和步骤。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-network-settings.png)

   1. **虚拟私有云（VPC）**：在列表中，选择要在其中启动此集群的 Amazon VPC。

   1. **子网组**：在列表中，选择要用于此集群的子网组。

   1. **VPC 安全组**：在列表中为此集群选择 VPC 安全组。

1. 完成 **Cluster options (集群选项)** 窗格。  
![\[显示包含集群设置配置步骤的“Cluster options (集群选项)”窗格屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-cluster-options.png)

   1. **数据库端口**-使用向上和向下箭头设置应用程序用于连接到您的实例的 TCP/IP 端口。

   1. **集群参数组**：在参数组列表中，为此集群选择集群参数组。

1. 完成 **Encryption (加密)** 窗格。  
![\[显示为集群配置加密的步骤的“Encryption (加密)”窗格屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/encrypt-at-rest.png)

   1. **E ncryption-at-rest** —选择以下选项之一：
      + **启用加密**：默认值。所有静态数据都会加密。如果您选择加密您的数据，则无法撤消此操作。
      + **禁用加密**：您的数据不会被加密。

   1. **AWS KMS 密钥**-只有在加密数据时才可用。在列表中，选择要用于加密此集群中的数据的密钥。默认值为 `(default) aws/rds`。

      如果您选择 **Enter a key ARN (输入一个密钥 ARN)**，则必须为密钥输入一个 Amazon 资源名称 (ARN)。

1. 完成 **Backup (备份)** 窗格。  
![\[显示用于配置集群备份时段的步骤的“Backup (备份)”窗格屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-backup.png)

   1. **备份留存期**：在列表中，选择在删除此集群的自动备份前保留它们的天数。

   1. **备份时段**：设置 Amazon DocumentDB 要备份此集群的每日时间和持续时间。

      1. **开始时间**：在第一个列表中，选择开始自动备份的开始时间小时 (UTC)。在第二个列表中，选择您希望自动备份开始的时间（分钟）。

      1. **持续时间**：在该列表中，选择要向创建自动备份分配的小时数。

1. 选择要**导出到日志**的日志类型，完成日志导出 CloudWatch 窗格。  
![\[Log exports (日志导出) 窗格屏幕截图，显示了配置集群的 DML 日志记录的步骤。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-log-exports.png)
   + **审核日志**-选择此选项可允许将审核日志导出到 Amazon CloudWatch 日志。如果您选择 **Audit logs (审计日志)**，则必须在集群的自定义参数组中启用 `audit_logs`。有关更多信息，请参阅 [审核 Amazon DocumentDB 事件](event-auditing.md)。
   + **Profiler 日志**-选择此选项可启用将操作分析器日志导出到 Amazon Logs。 CloudWatch 如果您选择 **Profiler logs (分析器日志)**，则还必须在集群的自定义参数组中修改以下参数：
     + `profiler`：设置为 `enabled`。
     + `profiler_threshold_ms`：设置为 `[0-INT_MAX]` 之间的值，以设置分析操作的阈值。
     + `profiler_sampling_rate`：设置为 `[0.0-1.0]` 之间的值，以设置要分析的缓慢操作的百分比。

     有关更多信息，请参阅 [分析 Amazon DocumentDB 操作](profiling.md)。

1. 完成 **Maintenance (维护)** 窗格。  
![\[显示用于配置集群维护时段的步骤的“Maintenance (维护)”窗格屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-maintenance.png)

   1. 选择以下选项之一
     + **选择时段**：您可以指定 Amazon DocumentDB 对您的集群执行维护的周日期、UTC 开始时间和持续时间。

       1. **开始日**：在列表中，选择开始集群维护的一周中的天。

       1. **开始时间**：在列表中，选择开始维护的小时和分钟 (UTC)。

       1. **持续时间**：在列表中，选择要为集群维护分配的时长。如果无法在指定时间内完成维护，维护过程将在指定时间过后继续进行，直到完成。
     + **无首选项**：Amazon DocumentDB 为执行维护选择一周中的天、开始时间和持续时间。

1. 如果您要将一个或多个标签添加到此集群，请填写**标签**窗格。  
![\[“启用删除保护” 复选框（处于选中状态）的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-tags.png)

   对于每个要添加到集群的标签，请重复以下步骤。一个集群最多可以有 10 个标签。

   1. 选择**添加标签**。

   1. 键入标签的**键**。

   1. （可选）键入标签的**值**。

   要删除标签，请选择 **Remove tag**（删除标签）。

1. 在使用控制台创建集群时，将默认启用**删除保护**。要禁用删除保护，请清除**启用删除保护**。启用后，删除保护可以防止删除集群。要删除某个受到删除保护的集群，您必须先修改集群以禁用删除保护。  
![\[“启用删除保护” 复选框（处于选中状态）的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/create-db-cluster-console-deletion-protection.png)

   有关删除保护的更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。

1. 要创建集群，请选择**创建集群**。否则，选择**取消**。

## 使用创建集群 AWS CLI
<a name="db-cluster-create-cli"></a>

以下过程介绍如何使用启动亚马逊 DocumentDB 集群和创建 Amazon DocumentDB 副本。 AWS CLI 

**参数**
+ **--db-cluster-identifier**：必填项。标识此集群的一个小写字符串。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-create.html)
+ **--engine**：必填项。必须是 **docdb**。
+ **--deletion-protection \$1 --no-deletion-protection**：可选。启用删除保护后，可以防止删除集群。使用时 AWS CLI，默认设置是禁用删除保护。

  有关删除保护的更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。
+ **--storage-type standard \$1 iopt1**：可选。默认值：**standard**。集群存储配置。有效值为 `standard`（标准）或 `iopt1`（I/O 优化）。
+ **--master-username**：必填项。用于对用户进行身份验证的用户名。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-create.html)
+ **--master-user-password**：可选。用于对用户进行身份验证的用户密码。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-cluster-create.html)
+ **--manage-master-user-password**：可选。Amazon DocumentDB 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。

有关更多参数，请参阅[CreateDBCluster](API_CreateDBCluster.md)。

**要启动 Amazon DocumentDB 集群，请使用 AWS CLI**

要创建 Amazon DocumentDB 集群，请调用。`create-db-cluster` AWS CLI以下 AWS CLI 命令创建一个名为`sample-cluster`且启用了删除保护的 Amazon DocumentDB 集群。有关删除保护的更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。

此外，`--engine-version` 是一个默认成主引擎最新版本的可选参数。当前的默认引擎版本为 5.0.0（注意：亚马逊 DocumentDB 8.0 可用，但必须明确指定）。发布主引擎新版本时，`--engine-version` 的默认引擎版本将更新，以反映最近的主引擎版本。因此，对于生产工作负载，尤其是那些依赖脚本、自动化或 CloudFormation 模板的工作负载，我们建议您明确指定预期的主要版本。`--engine-version`

**注意**  
如果未指定 `db-subnet-group-name` 或 `vpc-security-group-id`，则 Amazon DocumentDB 将使用给定区域的默认子网组和 Amazon VPC 安全组。

对于 Linux、macOS 或 Unix：

```
aws docdb create-db-cluster \
      --db-cluster-identifier sample-cluster \
      --engine docdb \
      --engine-version 5.0.0 \
      --deletion-protection \
      --master-username masteruser \
      --master-user-password password
```

对于 Windows：

```
aws docdb create-db-cluster ^
      --db-cluster-identifier sample-cluster ^
      --engine docdb ^
      --engine-version 5.0.0 ^
      --deletion-protection ^
      --master-username masteruser ^
      --master-user-password password
```

此操作的输出将类似于下文（JSON 格式）。

```
{
    "DBCluster": {
        "StorageEncrypted": false,
        "DBClusterMembers": [],
        "Engine": "docdb",
        "DeletionProtection" : "enabled",
        "ClusterCreateTime": "2018-11-26T17:15:19.885Z",
        "DBSubnetGroup": "default",
        "EngineVersion": "5.0.0",
        "MasterUsername": "masteruser",
        "BackupRetentionPeriod": 1,
        "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster",
        "DBClusterIdentifier": "sample-cluster",
        "MultiAZ": false,
        "DBClusterParameterGroup": "default.docdb5.0",
        "PreferredBackupWindow": "09:12-09:42",
        "DbClusterResourceId": "cluster-KQSGI4MHU4NTDDRVNLNTU7XVAY",
        "PreferredMaintenanceWindow": "tue:04:17-tue:04:47",
        "Port": 27017,
        "Status": "creating",
        "ReaderEndpoint": "sample-cluster.cluster-ro-sfcrlcjcoroz.us-east-1.docdb.amazonaws.com",
        "AssociatedRoles": [],
        "HostedZoneId": "ZNKXTT8WH85VW",
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-77186e0d",
                "Status": "active"
            }
        ],
        "AvailabilityZones": [
            "us-east-1a",
            "us-east-1c",
            "us-east-1e"
        ],
        "Endpoint": "sample-cluster.cluster-sfcrlcjcoroz.us-east-1.docdb.amazonaws.com"
    }
}
```

创建集群需要几分钟时间。您可以使用 AWS 管理控制台 或 AWS CLI 来监控集群的状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)。

**重要**  
当您使用创建 Amazon DocumentDB 集群时，不会创建任何实例。 AWS CLI 因此，您必须显式创建主实例和所需的任何副本实例。您可以使用控制台或创建 AWS CLI 实例。有关更多信息，请参阅 [向集群添加 Amazon DocumentDB 实例](db-instance-add.md)。

有关更多信息，请参阅 *Amazon DocumentDB API 参考*中的 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_CreateDBCluster.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_CreateDBCluster.html)。

# 描述 Amazon DocumentDB 集群
<a name="db-cluster-view-details"></a>

您可以使用 Amazon DocumentDB 管理控制台或查看与您的 Amazon DocumentDB 集群相关的连接终端节点 VPCs、安全组和参数组等详细信息。 AWS CLI 

有关更多信息，请参阅下列内容：
+ [监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)
+ [查找集群的端点](db-cluster-endpoints-find.md)

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

通过以下过程使用控制台查看指定 Amazon DocumentDB 集群的详细信息。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在集群列表中，选择要查看其详细信息的集群的名称。有关集群的信息分为以下几组：
   + **摘要**：有关集群的一般信息，包括引擎版本、集群状态、待定维护及其参数组的状态。
   + **连接和安全**：**连接**部分列出要使用 mongo Shell 或应用程序连接到该集群的连接端点。**Security Groups (安全组)** 部分列出与此集群关联的安全组及其 VPC ID 和描述。
   + **配置**：**集群详细信息**部分列出有关集群的详细信息，包括集群的 Amazon 资源名称（ARN）、端点和参数组。其中还列出集群的备份信息、维护详细信息以及安全和网络设置。**Cluster instances (集群实例)** 部分列出属于该集群的实例，其中包括每个实例的角色和集群参数组状态。
   + **监控**-此集群的 Amazon CloudWatch 日志指标。有关更多信息，请参阅 [使用以下方式监控亚马逊 DocumentDB CloudWatch](cloud_watch.md)。
   + **事件和标签**：**近期事件**部分列出该集群的近期事件。Amazon DocumentDB 记录与集群、实例、快照、安全组和集群参数组相关的事件。此信息包括与每个事件关联的日期、时间和消息。**Tags (标签)** 部分列出附加该集群的标签。

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

要使用查看您的 Amazon DocumentDB 集群的详细信息 AWS CLI，请使用如下示例所示的`describe-db-clusters`命令。有关更多信息，请参阅 *Amazon DocumentDB 资源管理 API 参考*中的 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_DescribeDBClusters.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_DescribeDBClusters.html)。

**注意**  
对于某些管理功能（如集群和实例生命周期管理），Amazon DocumentDB 利用与 Amazon RDS 共享的操作技术。`filterName=engine,Values=docdb` 筛选器参数仅返回 Amazon DocumentDB 集群。

**Example**  
**示例 1：列出所有 Amazon DocumentDB 集群**  
以下 AWS CLI 代码列出了某个区域中所有 Amazon DocumentDB 集群的详细信息。  

```
aws docdb describe-db-clusters --filter Name=engine,Values=docdb
```
此操作的输出将类似于下文。  

```
{
    "DBClusters": [
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-1",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        },
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-2",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        },
        {
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1b",
                "us-east-1a"
            ],
            "BackupRetentionPeriod": 1,
            "DBClusterIdentifier": "sample-cluster-3",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            ...
        }
    ]
}
```

**Example**  
**示例 2：列出指定 Amazon DocumentDB 集群的所有详细信息**  
以下 AWS CLI 代码列出了集群的详细信息`sample-cluster`。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-clusters \
   --filter Name=engine,Values=docdb \
   --db-cluster-identifier sample-cluster
```
对于 Windows：  

```
aws docdb describe-db-clusters ^
   --filter Name=engine,Values=docdb ^
   --db-cluster-identifier sample-cluster
```
此操作的输出将类似于下文。  

```
{
    "DBClusters": [
        {
            "AllocatedStorage": 1,
            "AvailabilityZones": [
                "us-east-1c",
                "us-east-1a",
                "us-east-1d"
            ],
            "BackupRetentionPeriod": 2,
            "DBClusterIdentifier": "sample-cluster",
            "DBClusterParameterGroup": "sample-parameter-group",
            "DBSubnetGroup": "default",
            "Status": "available",
            "EarliestRestorableTime": "2023-11-07T22:34:08.148000+00:00",
            "Endpoint": "sample-cluster.node.us-east-1.amazon.com",
            "ReaderEndpoint": "sample-cluster.node.us-east-1.amazon.com",
            "MultiAZ": false,
            "Engine": "docdb",
            "EngineVersion": "5.0.0",
            "LatestRestorableTime": "2023-11-10T07:21:16.772000+00:00",
            "Port": 27017,
            "MasterUsername": "chimeraAdmin",
            "PreferredBackupWindow": "22:22-22:52",
            "PreferredMaintenanceWindow": "sun:03:01-sun:03:31",
            "ReadReplicaIdentifiers": [],
            "DBClusterMembers": [
                {
                    "DBInstanceIdentifier": "sample-instance-1",
                    "IsClusterWriter": true,
                    "DBClusterParameterGroupStatus": "in-sync",
                    "PromotionTier": 1
                },
                {
                    "DBInstanceIdentifier": "sample-instance-2",
                    "IsClusterWriter": true,
                    "DBClusterParameterGroupStatus": "in-sync",
                    "PromotionTier": 1
                },
                
            ],
            "VpcSecurityGroups": [
                {
                    "VpcSecurityGroupId": "sg-9084c2ec",
                    "Status": "active"
                }
            ],
            "HostedZoneId": "Z06853723JYKYBXTJ49RB",
            "StorageEncrypted": false,
            "DbClusterResourceId": "cluster-T4LGLANHVAPGQYYULWUDKLVQL4",
            "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster",
            "AssociatedRoles": [],
            "IAMDatabaseAuthenticationEnabled": false,
            "ClusterCreateTime": "2023-11-06T18:05:41.568000+00:00",
            "EngineMode": "provisioned",
            "DeletionProtection": false,
            "HttpEndpointEnabled": false,
            "CopyTagsToSnapshot": false,
            "CrossAccountClone": false,
            "DomainMemberships": [],
            "TagList": [],
            "StorageType": "iopt1",
            "AutoMinorVersionUpgrade": false,
            "NetworkType": "IPV4",
            "IOOptimizedNextAllowedModificationTime": "2023-12-07T18:05:41.580000+00:00"
        }
    ]
}
```

**Example**  
**示例 3：列出 Amazon DocumentDB 集群的指定详细信息**  
要使用列出集群详细信息的子集，请添加一个 AWS CLI`--query`，指定要列出`describe-db-clusters`操作要列出的集群成员。`--db-cluster-identifier` 参数是要显示其详细信息的特定集群的标识符。有关查询的更多信息，请参阅 *AWS Command Line Interface 用户指南*中的[如何使用 `--query` 选项筛选输出](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html#controlling-output-filter)。  
以下示例列出 Amazon DocumentDB 集群中的实例。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-clusters \
    --filter Name=engine,Values=docdb \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].[DBClusterMembers]'
```
对于 Windows：  

```
aws docdb describe-db-clusters ^
    --filter Name=engine,Values=docdb ^
    --db-cluster-identifier sample-cluster ^
    --query 'DBClusters[*].[DBClusterMembers]'
```
此操作的输出将类似于下文。  

```
[
    [
        [
            {
                "DBInstanceIdentifier": "sample-instance-1",
                "IsClusterWriter": true,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1
            },
            {
                "DBInstanceIdentifier": "sample-instance-2",
                "IsClusterWriter": false,
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1
            }
        ]
    ]
]
```

------

# 修改 Amazon DocumentDB 集群
<a name="db-cluster-modify"></a>

要修改集群，该集群必须处于 *可用* 状态。您无法修改已停止的集群。如果集群已停止，则首先启动集群，等待集群进入*可用*状态，然后进行所需修改。有关更多信息，请参阅 [停止和启动 Amazon DocumentDB 集群](db-cluster-stop-start.md)。

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

通过以下过程使用控制台修改特定的 Amazon DocumentDB 集群。

**修改 Amazon DocumentDB 集群**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 通过选择集群名称左侧的按钮，指定要修改的集群。

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

1. 在 **Modify Cluster: cluster-name (修改集群: cluster-name)** 窗格中，进行所需更改。您可以更改以下方面：
   + **集群规范**：集群的名称、安全组和凭证管理。
   + **集群存储配置**：集群的数据存储模式。在“标准配置”和“I/O 优化配置”之间进行选择。
   + **集群选项**：集群的端口和参数组。
   + **备份**：集群的备份留存期和备份时段。
   + **日志导出**：启用或禁用导出审计日志或分析器日志。
   + **维护**：设置集群的维护时段。
   + **删除保护**：对集群启用或禁用删除保护。默认情况下，将启用删除保护。

1. 完成后，选择 **Continue (继续)** 以查看更改摘要。

1. 如果您对所做更改满意，可以选择 **Modify cluster (修改集群)** 以修改集群。或者，您可以选择 **Back (返回)** 或 **Cancel (取消)** 来编辑或取消您的更改。

需要几分钟时间才能应用更改。只有在实例状态为 *available (可用)* 时，才能使用集群。您可以使用控制台或 AWS CLI监控集群状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)。

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

使用 `modify-db-cluster` 操作以使用 AWS CLI修改指定的集群。有关更多信息，请参阅 *Amazon DocumentDB API 参考*中的 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_ModifyDBCluster.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_ModifyDBCluster.html)。

**参数**
+ **--db-cluster-identifier**：必填项。您要修改的 Amazon DocumentDB 集群的标识符。
+ **--backup-retention-period**：可选。自动备份的保留天数。有效值为 1-35。
+ **--storage-type**：可选。集群存储配置。有效值为 `standard`（标准）或 `iopt1`（I/O 优化）。
+ **--db-cluster-parameter-group-name**：可选。用于集群的集群参数组的名称。
+ **--manage-master-user-password**：可选。Amazon DocumentDB 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。
+ **--rotate-master-user-password**：可选。Secrets Manager 会为现有密钥生成一个新的密钥版本。密钥的新版本包含新的主用户密码。Amazon DocumentDB 会更改集群的主用户密码以匹配新密钥版本的密码。

  轮换主密码时必须指定 **--apply-immediately** 选项。
+ **--master-user-password**：可选。主数据库用户的新密码。

  密码约束：
  + 长度为 [8–100] 个可打印 ASCII 字符。
  + 可以使用任何可打印 ASCII 字符，以下字符除外：
    + **/**（正斜杠）
    + **"**（双引号）
    + **@**（@ 符号）
+ **--new-db-cluster-identifier**：可选。重命名集群时集群的新集群标识符。此值以一个小写字符串存储。

  命名约束：
  + 长度为 [1-63] 个字母、数字或连字符。
  + 第一个字符必须是字母。
  + 不能以连字符结尾或包含两个连续的连字符。
  + 每个区域的 Amazon RDS、Amazon Neptune 和 Amazon DocumentDB 中的所有集群都必须是唯一 AWS 账户的。
+ **--preferred-backup-window**：可选。创建自动备份的每日时间范围，以通用协调时间 (UTC) 表示。
  + 格式：`hh24:mm-hh24:mm`
+ **--preferred-maintenance-window**：可选。可能进行系统维护的每周时间范围，以 UTC 表示。
  + 格式：`ddd:hh24:mm-ddd:hh24:mm`
  + 有效值：`Sun`、`Mon`、`Tue`、`Wed`、`Thu`、`Fri` 和 `Sat`。
+ **--deletion-protection** 或 **--no-deletion-protection**：可选。是否应在此集群上启用删除保护。删除保护可以防止集群被意外删除，直到修改集群以禁用删除保护。有关更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。
+ **--apply-immediately** 或 **--no-apply-immediately**：使用 `--apply-immediately` 可立即进行更改。使用 `--no-apply-immediately` 在集群的下一个维护时段期间进行更改。

**Example**  
以下代码将更改集群 `sample-cluster` 的备份保留期。  
对于 Linux、macOS 或 Unix：  

```
aws docdb modify-db-cluster \
       --db-cluster-identifier sample-cluster \
       --apply-immediately \
       --backup-retention-period 7
```
对于 Windows：  

```
aws docdb modify-db-cluster ^
       --db-cluster-identifier sample-cluster ^
       --apply-immediately ^
       --backup-retention-period 7
```
此操作的输出将类似于下文。  

```
{
    "DBCluster": {
        "BackupRetentionPeriod": 7,
        "DbClusterResourceId": "cluster-VDP53QEWST7YHM36TTXOPJT5YE",
        "Status": "available",
        "DBClusterMembers": [
            {
                "PromotionTier": 1,
                "DBClusterParameterGroupStatus": "in-sync",
                "DBInstanceIdentifier": "sample-cluster-instance",
                "IsClusterWriter": true
            }
        ],
        "ReadReplicaIdentifiers": [],
        "AvailabilityZones": [
            "us-east-1b",
            "us-east-1c",
            "us-east-1a"
        ],
        "ReaderEndpoint": "sample-cluster.cluster-ro-ctevjxdlur57.us-east-1.rds.amazonaws.com",
        "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster",
        "PreferredMaintenanceWindow": "sat:09:51-sat:10:21",
        "EarliestRestorableTime": "2018-06-17T00:06:19.374Z",
        "StorageEncrypted": false,
        "MultiAZ": false,
        "AssociatedRoles": [],
        "MasterUsername": "<your-master-user-name>",
        "DBClusterIdentifier": "sample-cluster",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-77186e0d"
            }
        ],
        "HostedZoneId": "Z2SUY0A1719RZT",
        "LatestRestorableTime": "2018-06-18T21:17:05.737Z",
        "AllocatedStorage": 1,
        "Port": 27017,
        "Engine": "docdb",
        "DBClusterParameterGroup": "default.docdb3.4",
        "Endpoint": "sample-cluster.cluster-ctevjxdlur57.us-east-1.rds.amazonaws.com",
        "DBSubnetGroup": "default",
        "PreferredBackupWindow": "00:00-00:30",
        "EngineVersion": "3.4",
        "ClusterCreateTime": "2018-06-06T19:25:47.991Z",
        "IAMDatabaseAuthenticationEnabled": false
    }
}
```

需要几分钟时间才能应用更改。只有在实例状态为 *available (可用)* 时，才能使用集群。您可以使用控制台或 AWS CLI监控集群状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)。

------

# 确定待处理维护
<a name="db-cluster-determine-pending-maintenance"></a>

您可以通过确定是否有待处理的集群维护来确定您是否拥有最新的 Amazon DocumentDB 引擎版本。

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

您可以使用 AWS 管理控制台 来确定集群是否有待维护的状态。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 找到 **Maintenance (维护)** 列以确定集群是否有待处理维护。  
![\[显示 Amazon DocumentDB 集群维护字段的控制台屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-cluster-pending-maintenance.png)

   **None (无)** 表示集群运行的是最新的引擎版本。**Available (可用)** 表示集群有待处理维护，这可能意味着需要升级引擎。

1. 如果您的集群有待处理维护，请继续执行[对集群的引擎版本执行补丁更新](db-cluster-version-upgrade.md)中的步骤。

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

您可以使用带有以下参数的`describe-pending-maintenance-actions`操作 AWS CLI 来确定集群是否具有最新的引擎版本。

**参数**
+ **--resource-identifier**：可选。资源（集群）的 ARN。如果省略该参数，则列出所有集群的待处理维护操作。
+ **--region**：可选。要在其中运行该操作的 AWS 区域，例如 `us-east-1`。

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

```
aws docdb describe-pending-maintenance-actions \
   --resource-identifier arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster \
   --region us-east-1
```
对于 Windows：  

```
aws docdb describe-pending-maintenance-actions ^
   --resource-identifier arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster ^
   --region us-east-1
```
此操作的输出将类似于下文。  

```
{
    "PendingMaintenanceActions": [
        {
            "ResourceIdentifier": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster",
            "PendingMaintenanceActionDetails": [
                {
                    "Description": "New feature",
                    "Action": "db-upgrade",
                    "ForcedApplyDate": "2019-02-25T21:46:00Z",
                    "AutoAppliedAfterDate": "2019-02-25T07:41:00Z",
                    "CurrentApplyDate": "2019-02-25T07:41:00Z"
                }
            ]
        }
    ]
}
```

如果您的集群有待处理维护，请继续执行[对集群的引擎版本执行补丁更新](db-cluster-version-upgrade.md)中的步骤。

------

# 对集群的引擎版本执行补丁更新
<a name="db-cluster-version-upgrade"></a>

在本节中，我们将说明如何使用 AWS 管理控制台 或部署补丁更新 AWS CLI。补丁更新是相同引擎版本内的更新（例如，将 3.6 引擎版本更新到较新的 3.6 引擎版本）。您可以立即更新它，也可以在集群的下一个维护时段进行更新。要确定您的引擎是否需要更新，请参阅 [确定待处理维护](db-cluster-determine-pending-maintenance.md)。请注意，当您应用更新时，您的集群将出现短暂停机。

**注意**  
如果您正在尝试从一个主引擎版本升级到另一个主引擎版本（例如从 3.6 升级到 5.0），请参阅 [Amazon DocumentDB 主版本就地升级](docdb-mvu.md) 或 [使用升级您的亚马逊文档数据库集群 AWS Database Migration Service](docdb-migration.versions.md)。就地主版本升级仅支持将 docdb 5.0 作为目标引擎版本。

要获取集群的引擎版本的最新补丁更新，需要满足两个配置要求：
+ 集群状态必须为*可用*。
+ 该集群必须运行较早的引擎版本。

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

以下过程使用控制台对集群的引擎版本应用补丁更新。您可以选择立即更新，也可以选择在集群的下一维护时段期间更新。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 从 **Actions (操作)** 菜单中，选择以下选项之一。仅当您选择的集群未运行最新的引擎版本时，才可以选择这些菜单选项。  
![\[图像：Amazon DocumentDB 升级操作\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-upgrade-action.png)
   + **立即升级**：立即启动升级过程。集群升级到最新引擎版本时，集群将离线一段时间。
   + **在下一个时段升级**：在集群的下一维护时段内启动升级过程。集群升级到最新引擎版本时，它将离线一段时间。

1. 当确认窗口打开时，选择以下选项之一：
   + **升级**：根据上一步中选择的计划将集群升级到最新引擎版本。
   + **取消**：取消集群的引擎升级并继续使用集群的当前引擎版本。

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

您可以使用 AWS CLI 和带有以下参数的`apply-pending-maintenance-action`操作将补丁更新应用于您的集群。

**参数**
+ **--resource-identifier**：必填项。您要升级的 Amazon DocumentDB 集群的 ARN。
+ **--apply-action**：必填项。允许使用以下值。要升级集群的引擎版本，请使用 `db-upgrade`。
  + **db-upgrade**
  + **system-update**
+ **--opt-in-type**：必填项。允许使用以下值。
  + `immediate`：立即应用维护操作。
  + `next-maintenance`：在下一个维护时段内应用维护操作。
  + `undo-opt-in`：取消任何现有的 `next-maintenance` 加入请求。

**Example**  
以下示例将 `sample-cluster` 的引擎版本的补丁更新到版本 4.0.0。  
对于 Linux、macOS 或 Unix：  

```
aws docdb apply-pending-maintenance-action \
   --resource-identifier arn:aws:rds:us-east-1:123456789012\:cluster:sample-cluster \
   --apply-action db-upgrade \
   --opt-in-type immediate
```
对于 Windows：  

```
aws docdb apply-pending-maintenance-action ^
   --resource-identifier arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster ^
   --apply-action db-upgrade ^
   --opt-in-type immediate
```
此操作的输出将类似于以下内容：  

```
{
    "ResourcePendingMaintenanceActions": {
        "ResourceIdentifier": "arn:aws:rds:us-east-1:444455556666:cluster:docdb-2019-01-09-23-55-38",
        "PendingMaintenanceActionDetails": [
            {
                "CurrentApplyDate": "2019-02-20T20:57:06.904Z",
                "Description": "Bug fixes",
                "ForcedApplyDate": "2019-02-25T21:46:00Z",
                "OptInStatus": "immediate",
                "Action": "db-upgrade",
                "AutoAppliedAfterDate": "2019-02-25T07:41:00Z"
            }
        ]
    }
}
```

------

# 停止和启动 Amazon DocumentDB 集群
<a name="db-cluster-stop-start"></a>

停止和启动 Amazon DocumentDB 集群可以帮助您控制开发和测试环境的成本。当您不需要集群中的所有实例时，您可以暂时停止这些实例，而不是每次使用 Amazon DocumentDB 时创建和删除集群和实例。然后，当您恢复测试时，可以再次启动它们。

**Topics**
+ [停止和启动集群概述](#db-cluster-stop-start-overview)
+ [可以在已停止的集群上执行的操作](#db-cluster-stopped-operations)

## 停止和启动集群概述
<a name="db-cluster-stop-start-overview"></a>

在不需要使用 Amazon DocumentDB 集群期间，您可以同时停止该集群中的所有实例。然后，您可以在需要使用时再次启动集群。启动和停止简化了用于开发、测试或不需要持续可用性的类似活动的集群的设置和停用过程。无论集群中有多少实例，您都可以使用 AWS 管理控制台 或通过单个操作停止和启动集群。 AWS CLI 

当您的集群停止后，集群存储卷保持不变。您只需在指定的保留时段内为集群存储、手动快照和自动备份存储付费。您无需为任何实例小时数付费。Amazon DocumentDB 会在七天后自动重新启动您的集群，这样一来您的集群就可以及时获得任何所需的维护更新。当您的集群在 7 天后启动时，您将再次开始为集群中的实例付费。当您的集群停止时，您无法查询您的存储卷，因为查询需要实例处于可用状态。

当 Amazon DocumentDB 集群停止后，不能以任何方式修改该集群或其实例。这包括添加或删除实例，或者删除集群。

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

以下过程显示如何停止有一个或多个实例处于可用状态的集群或启动已停止的集群。

**停止或启动 Amazon DocumentDB 集群**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在集群列表中，选择要停止或启动的集群名称左侧的按钮。

1. 选择**操作**，然后选择您要在集群上执行的操作。
   + 如果您要停止集群且集群可用，则：

     1. 选择**停止**。  
![\[图像：停止集群\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-stop.png)

        为避免激活故障转移机制，停止操作先停止副本实例，然后停止主实例。

     1. 在确认对话框中，确认您要通过选择 **Stop cluster (停止集群)** 停止该集群；或者要保持集群运行，则选择**取消**。  
![\[图像：启动集群\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-stop-confirm.png)
   + 如果您要启动集群且集群处于停止状态，则选择**启动**。  
![\[图像：启动集群\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-start.png)

1. 监控集群的状态及其实例。如果您启动集群，则当集群及其实例处于*可用*时，您可以继续使用集群。有关更多信息，请参阅 [确定集群的状态](db-cluster-status.md)。  
![\[图像：集群停止和启动的状态\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-stop-start-status.png)

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

以下代码示例显示如何停止有一个或多个实例处于可用状态的集群或启动已停止的集群。

要使用停止具有一个或多个可用实例的集群 AWS CLI，请使用`stop-db-cluster`操作。要启动已停止的集群，请使用 `start-db-cluster` 操作。这两个操作都使用 `--db-cluster-identifier` 参数。

**参数：**
+ **--db-cluster-identifier**：必填项。要停止或启动的集群的名称。

**Example — 要停止集群，请使用 AWS CLI**  
以下代码停止集群 `sample-cluster`。集群必须有一个或多个实例处于可用状态。  
对于 Linux、macOS 或 Unix：  

```
aws docdb stop-db-cluster \
   --db-cluster-identifier sample-cluster
```
对于 Windows：  

```
aws docdb stop-db-cluster ^
   --db-cluster-identifier sample-cluster
```

**Example — 要启动集群，请使用 AWS CLI**  
下面的代码启动集群 `sample-cluster`。集群当前必须处于停止状态。  
对于 Linux、macOS 或 Unix：  

```
aws docdb start-db-cluster \
   --db-cluster-identifier sample-cluster
```
对于 Windows：  

```
aws docdb start-db-cluster ^
   --db-cluster-identifier sample-cluster
```

------

## 可以在已停止的集群上执行的操作
<a name="db-cluster-stopped-operations"></a>

当 Amazon DocumentDB 集群停止时，您可以 point-in-time恢复到指定的自动备份保留时间范围内的任何位置。有关进行 point-in-time恢复的详细信息，请参阅[还原到某个时间点](backup_restore-point_in_time_recovery.md)。

在停止 Amazon DocumentDB 集群后，您无法修改该集群或其任何实例的配置。您也无法在该集群中添加或删除实例，或者，如果仍具有任何关联的实例，则无法删除该集群。您必须在执行任何此类管理操作之前启动该集群。

仅当再次启动后， Amazon DocumentDB 才会将任何计划的维护应用于停止的集群。七天后，Amazon DocumentDB 自动启动停止的集群，以使其维护状态不会落后太多。当集群重新启动后，您将再次开始为集群中的实例付费。

集群停止后，Amazon DocumentDB 不会执行任何自动备份，也不会延长备份留存期。

# 删除 Amazon DocumentDB 集群
<a name="db-cluster-delete"></a>

您可以使用 AWS 管理控制台 或删除 Amazon DocumentDB 集群。 AWS CLI要删除集群，集群必须处于*可用* 状态，且不得有任何与其关联的实例。如果集群已停止，则首先启动集群，等待集群进入*可用* 状态，然后删除集群。有关更多信息，请参阅 [停止和启动 Amazon DocumentDB 集群](db-cluster-stop-start.md)。

## 删除保护
<a name="db-cluster-deletion-protection"></a>

为了防止您的集群遭到意外删除，您可以启用*删除保护*。在使用控制台创建集群时，将默认启用删除保护。但是，如果您使用 AWS CLI创建集群，将默认禁用删除保护。

Amazon DocumentDB 为集群实施删除保护，不论您是使用控制台还是 AWS CLI来执行删除操作。如果已启用删除保护，则无法删除集群。要删除启用了删除保护的实例，首先请修改该集群并禁用删除保护。

当在集群上启用数据保护的情况下使用控制台时，无法删除该集群的最后一个实例，因为这样也会删除集群。您可以使用 AWS CLI删除受删除保护的集群的最后一个实例。但是，集群本身仍然存在，您的数据将被保留。您可以通过为集群创建新实例来访问数据。有关启用和禁用删除保护的更多信息，请参阅：
+ [创建 Amazon DocumentDB 集群](db-cluster-create.md)
+ [修改 Amazon DocumentDB 集群](db-cluster-modify.md)

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

要使用删除集群 AWS 管理控制台，必须禁用删除保护。

**确定集群是否已启用删除保护：**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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/clusters.png)

1. 选择集群的名称，然后选择 **Configuration (配置)** 选项卡。在 **Cluster details (集群详细信息)** 部分中，找到 **Deletion protection (删除保护)**。如果已启用删除保护，则修改集群以禁用删除保护。有关修改集群的信息，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。

   禁用**删除保护**后，您就可以删除该集群了。

**删除集群：**

1. 在导航窗格中，选择**集群**。

1. 通过检查**集群标识符**列下方是否列有实例，来确定集群是否具有任何实例。在删除集群之前，必须先删除其所有实例。有关更多信息，请参阅 [删除 Amazon DocumentDB 实例](db-instance-delete.md)。

1. 根据您的集群是否有任何实例，请执行以下步骤之一。
   + 如果集群没有实例，请选择集群名称左侧的按钮，然后选择 **Actions (操作)**。从下拉菜单中，选择**删除**。填写**删除 <集群名称>** 对话框，然后选择**删除**。
   + 如果集群具有一个或多个实例，请执行以下操作：

     1. 在导航窗格中，选择**集群**。

     1. 通过选中集群名称左侧的复选框来删除集群的每个实例。选择 ** Actions (操作)**，然后选择 **Delete (删除)**。填写**删除 <集群名称>** 对话框，然后选择**删除**。

        当您删除最后一个实例时，集群也将被删除。有关删除实例的更多信息，请参阅 [删除 Amazon DocumentDB 实例](db-instance-delete.md)。

删除集群需要几分钟时间。要监控集群的状态，请参阅[监控 Amazon DocumentDB 集群的状态](monitoring_docdb-cluster_status.md)。

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

您不能删除具有任何关联实例的集群。要确定哪些实例与您的集群关联，请运行 `describe-db-clusters` 命令并删除集群的所有实例。然后，在需要时禁用集群的删除保护，最后删除集群。

1. **首先，删除集群的所有实例。**

   要确定需要删除的实例，请运行以下命令。

   ```
   aws docdb describe-db-clusters \
       --db-cluster-identifier sample-cluster \
       --query 'DBClusters[*].[DBClusterIdentifier,DBClusterMembers[*].DBInstanceIdentifier]'
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   [
       [
           "sample-cluster",
           [
               "sample-instance-1",
               "sample-instance-2"
           ]
       ]
   ]
   ```

   如果要删除的集群包含任何实例，请如下所示删除它们。

   ```
   aws docdb delete-db-instance \
       --db-instance-identifier sample-instance
   ```

1. **接下来，禁用删除保护。**

   使用删除 AWS CLI 集群的所有实例并不能删除集群。您还必须删除集群，但仅当删除保护处于禁用状态时才可以执行此操作。

   要确定集群是否已启用删除保护，请运行以下命令。
**提示**  
要查看所有 Amazon DocumentDB 集群的删除保护状态，请省略 `--db-cluster-identifier` 参数。

   ```
   aws docdb describe-db-clusters \
       --db-cluster-identifier sample-cluster \
       --query 'DBClusters[*].[DBClusterIdentifier,DeletionProtection]'
   ```

   此操作的输出将类似于下文。

   ```
   [
       [
           "sample-cluster",
           "true"
       ]
   ]
   ```

   如果集群已启用删除保护，则修改集群并禁用删除保护。要对集群禁用删除保护，请运行以下命令。

   ```
   aws docdb modify-db-cluster \
       --db-cluster-identifier sample-cluster \
       --no-deletion-protection \
       --apply-immediately
   ```

1. **最后，删除集群。**

   禁用删除保护后，您就可以删除该集群了。要删除集群，请使用带以下参数的 `delete-db-cluster` 操作。
   + **--db-cluster-identifier**：必填项。要删除的集群的标识符。
   + **--final-db-snapshot-identifier**：可选。如果您需要最终快照，则必须包含该参数和最终快照的名称。必须包含 `--final-db-snapshot-identifier` 或 `--skip-final-snapshot`。

     命名约束：
     + 长度为 [1-63] 个字母、数字或连字符。
     + 第一个字符必须是字母。
     + 不能以连字符结尾或包含两个连续的连字符。
     + 每个区域的 Amazon RDS、Amazon Neptune 和 Amazon DocumentDB 中的所有集群都必须是唯一 AWS 账户的。
   + **--skip-final-snapshot**：可选。仅当您不想在删除集群之前拍摄最终快照时，才使用此参数。默认设置是拍摄最终快照。必须包含 `--final-db-snapshot-identifier` 或 `--skip-final-snapshot`。

   以下 AWS CLI 代码删除`sample-cluster`带有最终快照的集群。如果有任何实例与集群关联，或者如果已启用删除保护，则此操作将失败。  
**Example**  

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb delete-db-cluster \
       --db-cluster-identifier sample-cluster \
       --final-db-snapshot-identifier sample-cluster-final-snapshot
   ```

   对于 Windows：

   ```
   aws docdb delete-db-cluster ^
       --db-cluster-identifier sample-cluster ^
       --final-db-snapshot-identifier sample-cluster-final-snapshot
   ```  
**Example**  

   以下 AWS CLI 代码在不拍摄最终快照`sample-cluster`的情况下删除集群。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb delete-db-cluster \
       --db-cluster-identifier sample-cluster \
       --skip-final-snapshot
   ```

   对于 Windows：

   ```
   aws docdb delete-db-cluster ^
       --db-cluster-identifier sample-cluster ^
       --skip-final-snapshot
   ```

   `delete-db-cluster` 操作的输出是您要删除的集群。

   删除集群需要几分钟时间。要监控集群的状态，请参阅[监控集群的状态](monitoring_docdb-cluster_status.md)。

------

# 扩展 Amazon DocumentDB 集群
<a name="db-cluster-manage-performance"></a>

Amazon DocumentDB 让您能够根据需求扩展集群中的存储和计算。本节介绍了如何使用存储扩展、实例扩展和读取扩展来管理 Amazon DocumentDB 集群和实例的性能和扩展。

**Topics**
+ [存储扩展](#db-cluster-manage-scaling-storage)
+ [实例扩展](#db-cluster-manage-scaling-instance)
+ [读取扩展](#db-cluster-manage-scaling-reads)
+ [写入扩展](#db-cluster-manage-scaling-writes)

## 存储扩展
<a name="db-cluster-manage-scaling-storage"></a>

Amazon DocumentDB 存储自动使用您的集群卷中的数据进行扩展。当数据量增多时，您的集群卷存储将以 10 GiB 增量递增，最多达 128 TiB。

## 实例扩展
<a name="db-cluster-manage-scaling-instance"></a>

您可通过修改集群中每个实例的实例类来按需扩展 Amazon DocumentDB 集群。Amazon DocumentDB 支持多个针对 Amazon DocumentDB 进行优化的实例类。

有关更多信息，请参阅 [修改 Amazon DocumentDB 实例](db-instance-modify.md)。

## 读取扩展
<a name="db-cluster-manage-scaling-reads"></a>

您可以通过在集群中创建最多 15 个 Amazon DocumentDB 副本来实现 Amazon DocumentDB 集群的读取扩展。每个 Amazon DocumentDB 副本从集群卷返回相同的数据，且副本滞后时间最短：通常少于主实例写入更新后的 100 毫秒。当读取流量增大时，可创建额外的 Amazon DocumentDB 副本并直接连接到这些副本，以便为您的数据库集群分配读取负载。Amazon DocumentDB 副本不必具有与主实例相同的实例类。

有关更多信息，请参阅 [向集群添加 Amazon DocumentDB 实例](db-instance-add.md)。

要对 Amazon DocumentDB 进行读取扩展，我们建议您以副本集形式连接到集群，并使用驱动程序的内置读取首选项功能将读取操作分布到副本实例。有关详细信息，请参阅[作为副本集连接到 Amazon DocumentDB](connect-to-replica-set.md)。

## 写入扩展
<a name="db-cluster-manage-scaling-writes"></a>

您可以通过增加 Amazon DocumentDB 集群的主实例的大小来扩展该集群上的写入容量。此部分提供了两种方法来根据您的需求扩展集群的主实例。第一种方法旨在最大程度地减小应用程序影响，但需要执行更多步骤才能完成。第二种方法经过了优化，需要的步骤更少，因此更简单，但它会对应用程序产生更多的潜在影响，这需要您做出权衡。

根据您的应用程序，可以从下面选择最适合您的方法。有关可用实例大小和成本的更多信息，请参阅 [Amazon DocumentDB 定价](https://aws.amazon.com/documentdb/pricing/)页面。

1. **优化以实现高可用性和性能**：如果您在[副本集模式](connect-to-replica-set.md)（推荐）下连接到集群，则可以使用以下过程将扩展主实例时对应用程序产生的影响减至最小。此方法可以最大程度地减小影响，因为它可确保集群的可用性保持一个较高的水平甚至更高，并且读取扩展目标将作为实例添加到集群中，而不是进行就地更新。

   1. 将较大的实例类型的一个或多个副本添加到集群中（请参阅[向集群添加 Amazon DocumentDB 实例](db-instance-add.md)）。我们建议所有副本具有与主实例相同的实例类型甚至更大的实例类型。这可避免因故障转移到较小的实例类型而意外降低写入性能。对于大多数客户而言，这意味着暂时将其集群中的实例数增加一倍，然后在扩展完成后删除较小的副本。

   1. 将所有新副本上的故障转移层设置为优先级零，并确保较小实例类型的副本具有最高的故障转移优先级。有关更多信息，请参阅 [控制失效转移目标](failover.md#failover-target_control)。

   1. 启动手动故障转移，这会将其中一个新副本提示为主实例。有关更多信息，请参阅 [测试故障转移](failover.md#failover-testing)。
**注意**  
这将导致您的集群停机约 30 秒。请相应地做好规划。

   1. 从集群中删除小于新主实例的实例类型的所有副本。

   1. 将所有实例的故障转移层设置回相同的优先级（通常，这意味着将其设置回 1）。

   例如，假设您的集群当前包含三个 `r5.large` 实例（一个主实例和两个副本实例），并且您希望扩展到一个 `r5.xlarge` 实例类型。为此，您首先将三个 `r5.xlarge` 副本实例添加到集群中，然后将新 `r5.xlarge` 副本的故障转移层设置为零。接下来，您将启动手动故障转移（这意味着您的应用程序将停机约 30 秒）。在故障转移完成后，您将从集群中删除所有三个 `r5.large` 实例，并让集群扩展到 `r5.xlarge` 实例。

   为了帮助优化成本，Amazon DocumentDB 实例以一秒为增量计费，最低收取 10 分钟的费用，然后提供可计费状态更改（例如创建、修改或删除实例）。有关更多信息，请参阅最佳实践文档中的[成本优化](best_practices.md#best_practices-cost_optimization)。

1. **优化以实现简易性**：此方法针对简易性进行了优化。它不会扩展和收缩集群，但可能会暂时减少您的读取容量。

   更改副本的实例类可能将会导致该实例在短时间内（从几秒钟到少于 30 秒）无法处理请求。如果您在[副本集模式](connect-to-replica-set.md)（推荐）下连接到集群，这将在扩展操作期间减少一个副本的读取容量（例如，在 3 节点集群中减少到 66% 的容量，或在 4 节点集群中减少到 75% 的容量等）。

   1. 扩展集群中的副本实例之一。有关更多信息，请参阅 [管理实例类](db-instance-classes.md)。

   1. 等待实例变为可用（请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)）。
**注意**  
这将导致您的集群停机约 30 秒。请相应地做好规划。

   1. 继续执行步骤 1 和 2，直到所有副本实例都逐一实现扩展。

   1. 启动手动失效转移。这会将其中一个副本提升为主实例。有关更多信息，请参阅 [Amazon DocumentDB 失效转移](failover.md)。
**注意**  
这将导致您的集群最多停机 30 秒，但所需的时间通常要更短。请相应地做好规划。

   1. 扩展以前的主（现在是副本）实例。

# 克隆 Amazon DocumentDB 集群卷
<a name="db-cluster-cloning"></a><a name="cloning"></a>

通过使用 Amazon DocumentDB 克隆功能，您可以创建一个新集群，该集群使用相同的 Amazon DocumentDB 集群卷并具有与原始集群卷相同的数据。该过程旨在快速且经济高效。我们将新集群及其关联的数据卷称为*克隆*。与使用其他技术（如还原快照）实际复制数据相比，创建克隆速度更快且空间利用效率更高。

Amazon DocumentDB 支持从预配置的 Amazon DocumentDB 集群创建 Amazon DocumentDB 预配置克隆。使用与源不同的部署配置创建克隆时，源的 Amazon DocumentDB 引擎的最新版本将被用于创建克隆。

当您从 Amazon DocumentDB 集群创建克隆时，将在您的账户（即拥有源 Amazon DocumentDB 集群的同一个账户）中 AWS 创建克隆。

**Topics**
+ [Amazon DocumentDB 克隆概述](#db-cloning-overview)
+ [Amazon DocumentDB 克隆的限制](#db-cloning-limitations)
+ [Amazon DocumentDB 克隆的工作原理](#db-how-db-cloning-works)
+ [创建 Amazon DocumentDB 克隆](#db-creating-db-clone)

## Amazon DocumentDB 克隆概述
<a name="db-cloning-overview"></a>

Amazon DocumentDB 使用*copy-on-write 协议*来创建克隆。此机制占用最少的额外空间来创建初始克隆。首次创建克隆时，Amazon DocumentDB 会保留源数据库集群和新（克隆的）Amazon DocumentDB 集群使用的数据的单个副本。只有当源 Amazon DocumentDB 集群或 Amazon DocumentDB 集群克隆对数据（在 Amazon DocumentDB 存储卷上）进行更改时，才会分配额外的存储空间。要了解有关该 copy-on-write协议的更多信息，请参阅[Amazon DocumentDB 克隆的工作原理](#db-how-db-cloning-works)。

Amazon DocumentDB 克隆非常适合使用您的生产数据快速设置测试环境，且不会有损坏数据的风险。您可以将克隆用于多种类型的应用程序，例如：
+ 对潜在的变化（例如模式变化和参数组变化）进行试验，以评估所有影响。
+ 执行工作负载密集型操作，例如导出数据或在克隆上运行分析查询。
+ 为开发、测试或其他用途创建生产数据库集群的副本。

您可以从同一个 Amazon DocumentDB 集群创建多个克隆。您还可以从另一个克隆创建多个克隆。

创建 Amazon DocumentDB 克隆后，您可以对 Amazon DocumentDB 实例实现与源 Amazon DocumentDB 集群不同的配置。例如，您可能不需要用于开发目的的克隆来满足与源生产 Amazon DocumentDB 集群相同的高可用性要求。在这种情况下，您可以使用单个 Amazon DocumentDB 实例来配置克隆，而不是使用 Amazon DocumentDB 集群使用的多个数据库实例。

当克隆完成测试、开发等使用目的时，您可以将其删除。

## Amazon DocumentDB 克隆的限制
<a name="db-cloning-limitations"></a>

Amazon DocumentDB 克隆目前具有以下限制：
+ 您可以根据需要创建任意数量的克隆，最多为 AWS 区域中允许的最大数据库集群数。但是，在创建 15 个克隆后，下一个克隆是完整副本。克隆操作就像 point-in-time恢复一样。
+ 您无法在与源 Amazon DocumentDB 集群不同的 AWS 区域创建克隆。
+ 您无法从没有数据库实例的 Amazon DocumentDB 集群创建克隆。您只能克隆具有至少一个数据库实例的 Amazon DocumentDB 集群。
+ 您可以在与 Amazon DocumentDB 集群不同的虚拟私有云（VPC）中创建克隆。如果这样做，则的子网 VPCs 必须映射到相同的可用区。

## Amazon DocumentDB 克隆的工作原理
<a name="db-how-db-cloning-works"></a>

Amazon DocumentDB 克隆运行于 Amazon DocumentDB 集群的存储层。就支持 Amazon DocumentDB 存储卷的底层耐用媒体而言，它使用的*copy-on-write*协议既快速又节省空间。您可以在 [管理 Amazon DocumentDB 集群](db-clusters.md) 中了解有关 Amazon DocumentDB 集群卷的更多信息。

**Topics**
+ [了解 copy-on-write协议](#db-copy-on-write-protocol)
+ [删除源集群卷](#db-deleting-source-cluster-volume)

### 了解 copy-on-write协议
<a name="db-copy-on-write-protocol"></a>

Amazon DocumentDB 集群将数据存储在底层 Amazon DocumentDB 存储卷的页面中。

例如，在下图中，您可以找到拥有四个数据页（1、2、3 和 4）的 Amazon DocumentDB 集群（A）。假设从 Amazon DocumentDB 集群创建了一个克隆 B。创建克隆时，未复制任何数据。相反，克隆指向与源 Amazon DocumentDB 集群相同的页面集。

![\[Amazon DocumentDB 集群卷包含 4 个页面，适用于源集群 A 和克隆 B\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-1.png)


创建克隆时，通常不需要额外的存储空间。该 copy-on-write协议在物理存储介质上使用与源数据段相同的分段。只有当源段的容量不足以容纳整个克隆段时，才需要额外的存储空间。如果是这种情况，源段将被复制到另一个物理设备。

在下图中，您可以找到使用相同集群 A 及其克隆 B 的 copy-on-write协议示例，如前所示。如果您对 Amazon DocumentDB 集群（A）进行更改，那么第 1 页上保存的数据也将随之而发生改变。Amazon DocumentDB 没有写入原始页面 1，而是创建了一个新页面 1[A]。集群（A）的 Amazon DocumentDB 集群卷现在指向页面 1[A]、2、3 和 4，而克隆（B）仍引用原始页面。

![\[Amazon DocumentDB 源数据库集群卷及其克隆，均已更改。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-2.png)


在克隆上，对存储卷的第 4 页进行了更改。Amazon DocumentDB 没有写入原始页面 4，而是创建了一个新页面 4[B]。克隆现在指向页面 1、2、3 和页面 4[B]，而集群（A）继续指向 1[A]、2、3 和 4。

![\[Amazon DocumentDB 源数据库集群卷及其克隆，均已更改。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-3.png)


随着时间推移，当源 Amazon DocumentDB 集群卷和克隆上出现了更多更改时，因此需要更多存储空间来捕获和存储更改。

### 删除源集群卷
<a name="db-deleting-source-cluster-volume"></a>

删除与一个或多个克隆关联的源集群卷时，克隆不会受到影响。克隆继续指向以前由源集群卷拥有的页面。

## 创建 Amazon DocumentDB 克隆
<a name="db-creating-db-clone"></a>

您可以在与源 Amazon DocumentDB 集群相同的 AWS 账户中创建克隆。为此，您可以使用 AWS 管理控制台 或 AWS CLI 以及以下步骤。

通过使用 Amazon DocumentDB 克隆，您可以从预配置的 Amazon DocumentDB 集群中创建预配置的 Amazon DocumentDB 集群克隆。

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

以下过程介绍了如何使用 AWS 管理控制台克隆 Amazon DocumentDB 集群。

使用带有一个 Amazon DocumentDB 实例的 Amazon DocumentDB 集群中的 AWS 管理控制台 结果创建克隆。

 这些说明适用于创建克隆的同一个 AWS 账户所拥有的数据库集群。数据库集群必须归同一个 AWS 账户所有，因为 Amazon DocumentDB 不支持跨账户克隆。

**要创建您的 AWS 账户拥有的数据库集群的克隆，请使用 AWS 管理控制台**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 从列表中选择您的 Amazon DocumentDB 集群，从**操作**中选择**创建克隆**。  
![\[创建克隆首先需要选择 Amazon DocumentDB 集群。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-1.png)

   “创建克隆”页面打开后，您可以配置 Amazon DocumentDB 集群克隆的**集群标识符**和**实例类**以及其他选项。

1. 在**设置**部分，执行以下操作：

   1. 在**集群标识符**中，请输入您要为克隆的 Amazon DocumentDB 集群拟定的名称。

   1. 对于**实例配置**，请为克隆的 Amazon DocumentDB 集群选择适当的**实例类**。  
![\[创建克隆首先需要选择 Amazon DocumentDB 集群并指定数据库实例大小。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-2.png)

   1.  对于**网络设置**，请选择使用案例的**子网组**和关联的 VPC 安全组。

   1.  对于 **E ncryption-at-rest**，如果源集群（正在克隆的集群）启用了加密，则克隆的集群还必须启用加密。如果这种情况适用，则**启用加密**选项将显示为灰色（禁用），但选中了**启用加密**选项。相反，如果源集群未启用加密，则**启用加密**选项可用，您可以选择启用或禁用加密。  
![\[为您的 Amazon DocumentDB 集群克隆指定网络和加密设置。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-3-nw-encryption.png)

   1. 通过选择要导出的日志类型（可选）、输入用于连接到集群的特定端口、以及启用防止意外删除集群的保护（默认启用），完成新的集群克隆配置。  
![\[通过选择性地选择要导出的日志类型、用于连接到集群的特定端口以及防止意外删除集群的保护，完成新的克隆配置。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-4-log-options-del-prot-b.png)

   1. 完成 Amazon DocumentDB 集群克隆的所有设置。要了解有关 Amazon DocumentDB 集群和实例设置的更多信息，请参阅 [管理 Amazon DocumentDB 集群](db-clusters.md)。

1. 选择**创建克隆**以启动所选 Amazon DocumentDB 集群的 Amazon DocumentDB 克隆。

克隆创建完成后，它将会与您的其他 Amazon DocumentDB 集群一起列在控制台**数据库**部分，而且其当前状态也会一起显示。当其状态为**可用**时，您的克隆即可以使用。

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

使用克隆您 AWS CLI 的 Amazon DocumentDB 集群需要几个步骤。

您使用的`restore-db-cluster-to-point-in-time` AWS CLI 命令会生成一个空的 Amazon DocumentDB 集群，其中包含 0 个亚马逊 DocumentDB 实例。也就是说，此命令仅还原 Amazon DocumentDB 集群，而不还原该集群的数据库实例。在克隆可用之后，您可以单独执行此操作。该过程的两个步骤如下：

1. 使用 [restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html) CLI 命令创建克隆。与此命令一起使用的参数控制正在创建的空 Amazon DocumentDB 集群（克隆）的容量类型和其他详细信息。

1. 使用 CL [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)I 命令在还原的 Amazon DocumentDB 集群中重新创建 Amazon DocumentDB 实例，为克隆创建亚马逊文档数据库实例。

以下命令假设 AWS CLI 已将您的 AWS 区域设置为默认区域。这种方法使您无需在每个命令中传递 `--region` 名称。有关更多信息，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。您还可以在后面的每个 CLI 命令中指定 `--region`。

**Topics**

**创建克隆**

您传递给 `[restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html)` CLI 命令的特定参数会有所不同。传递内容取决于您要创建的克隆类型。

使用以下过程从预配置的 Amazon DocumentDB 集群中创建预配置的 Amazon DocumentDB 克隆。

**创建与源 Amazon DocumentDB 集群具有相同引擎模式的克隆**
+ 使用 `[restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html)` CLI 命令并指定以下参数的值：
  + `--db-cluster-identifier`：为克隆选择一个有意义的名称。使用 [restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html) CLI 命令时可以为克隆命名。
  + `--restore-type`：使用 `copy-on-write` 创建源数据库集群的克隆。如果没有此参数，`restore-db-cluster-to-point-in-time` 将还原 Amazon DocumentDB 集群，而不会创建克隆。`restore-type` 的默认值为 `full-copy`。
  + `--source-db-cluster-identifier`：使用要克隆的源 Amazon DocumentDB 集群的名称。
  + `--use-latest-restorable-time`：此值指向克隆的最新可还原卷数据。此参数是 `restore-type copy-on-write` 所必需的，但是，您不能将 `restore-to-time parameter` 与它一起使用。

以下示例从名为 `my-source-cluster` 的集群创建一个名为 `my-clone` 的克隆。

对于 Linux、macOS 或 Unix：

```
aws docdb restore-db-cluster-to-point-in-time \
    --source-db-cluster-identifier my-source-cluster \
    --db-cluster-identifier my-clone \
    --restore-type copy-on-write \
    --use-latest-restorable-time
```

对于 Windows：

```
aws docdb restore-db-cluster-to-point-in-time ^
    --source-db-cluster-identifier my-source-cluster ^
    --db-cluster-identifier my-clone ^
    --restore-type copy-on-write ^
    --use-latest-restorable-time
```

该命令返回包含克隆详细信息的 JSON 对象。在尝试为您的克隆创建数据库实例之前，请检查以确保您的克隆数据库集群可用。有关更多信息，请参阅以下检查状态并获取克隆的详细信息：

**检查状态并获取克隆的详细信息**

您可以使用以下命令检查新创建的空数据库集群的状态。

```
$ aws docdb describe-db-clusters --db-cluster-identifier my-clone --query '*[].[Status]' --output text
```

或者，您可以使用以下 AWS CLI 查询获取为克隆创建数据库实例所需的状态和其他值：

对于 Linux、macOS 或 Unix：

```
aws docdb describe-db-clusters --db-cluster-identifier my-clone \
  --query '*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion}'
```

对于 Windows：

```
aws docdb describe-db-clusters --db-cluster-identifier my-clone ^
  --query "*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion}"
```

此查询返回类似于下述信息的输出：

```
[
  {
        "Status": "available",
        "Engine": "docdb",
        "EngineVersion": "4.0.0",
    }
]
```

**为您的克隆创建 Amazon DocumentDB 实例**

使用 C [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)LI 命令为您的克隆创建数据库实例。

`--db-instance-class` 参数仅用于预配置的 Amazon DocumentDB 集群。

对于 Linux、macOS 或 Unix：

```
aws docdb create-db-instance \
    --db-instance-identifier my-new-db \
    --db-cluster-identifier my-clone \
    --db-instance-class  db.r5.4xlarge \
    --engine docdb
```

对于 Windows：

```
aws docdb create-db-instance ^
    --db-instance-identifier my-new-db ^
    --db-cluster-identifier my-clone ^
    --db-instance-class  db.r5.4xlarge ^
    --engine docdb
```

**用于克隆的参数**

下表总结了与 `restore-db-cluster-to-point-in-time` 一起用于克隆 Amazon DocumentDB 集群的各种参数。


| 参数 | 说明 | 
| --- | --- | 
|  --source-db-cluster-identifier | 使用要克隆的源 Amazon DocumentDB 集群的名称。 | 
|  --db-cluster-identifier | 为克隆选择一个有意义的名称。您可以使用 ` restore-db-cluster-to-point-in-time` 命令为您的克隆命名。然后将此名称传递给 `create-db-instance` 命令。 | 
|  --restore-type | 将 `copy-on-write` 指定为 `--restore-type` 以创建源数据库集群的克隆，而不是还原源 Amazon DocumentDB 集群。 | 
|  --use-latest-restorable-time | 此值指向克隆的最新可还原卷数据。 | 

------

# 了解 Amazon DocumentDB 集群容错能力
<a name="db-cluster-fault-tolerance"></a>

Amazon DocumentDB 集群设计为具有容错能力。每个集群的卷跨越单个可用区 AWS 区域，每个可用区都包含集群卷数据的副本。此功能意味着您的集群可容忍可用区故障，而不发生任何数据丢失，只是会短暂中断服务。

如果集群中的主实例失败，Amazon DocumentDB 可通过两种方式之一来自动将失效转移到新的主实例：
+ 通过将现有 Amazon DocumentDB 副本提升为根据每个副本的提升层设置所选择的新主实例，然后为以前的主实例创建一个替换项。失效转移到副本实例通常可在不到 30 秒的时间内完成。在此期间，读取和写入操作可能会出现短暂中断。要提高集群的可用性，建议您在两个或更多不同的可用区中创建至少一个或多个 Amazon DocumentDB 副本。
+ 创建新的主实例。只有当您的集群中没有副本实例并且可能需要几分钟才能完成时，才会发生这种情况。

如果集群具有一个或多个 Amazon DocumentDB 副本，则 Amazon DocumentDB 副本将在故障事件期间被提升为主实例。故障事件将导致短暂中断，其间的读取和写入操作将失败并引发异常。不过，服务通常会在 120 秒内 (经常在 60 秒内) 还原。要提高集群的可用性，建议您在两个或更多不同的可用区中创建至少一个或多个 Amazon DocumentDB 副本。

您可以通过为每个副本分配一个优先级来自定义发生故障后将 Amazon DocumentDB 副本提升为主实例的顺序。优先级介于 0（最高优先级）和 15（最低优先级）之间。如果主实例失败，则将具有最高优先级的 Amazon DocumentDB 副本提升为新的主实例。您可以随时修改 Amazon DocumentDB 副本的优先级。修改优先级不会触发失效转移。您可以对 `modify-db-instance` 操作使用 `--promotion-tier` 参数。有关自定义实例的故障转移优先级的更多信息，请参阅[Amazon DocumentDB 失效转移](failover.md)。

多个 Amazon DocumentDB 副本可同属一个优先级，这会产生提升层问题。如果两个或更多 Amazon DocumentDB 副本具有相同优先级，则最大的副本将被提升为主实例。如果两个或多个 Amazon DocumentDB 副本具有同一优先级和大小，那么将提升同一提升层中的任意副本。

如果集群不包含任何 Amazon DocumentDB 副本，则将在故障事件期间重新创建主实例。故障事件将导致中断，其间的读取和写入操作将失败并引发异常。创建新的主实例时将还原服务，该操作所需的时间通常在 10 分钟内。将 Amazon DocumentDB 副本提升为主实例要比创建新的主实例快得多。

# 管理 Amazon DocumentDB 实例
<a name="db-instances"></a>

以下主题提供可帮助您管理 Amazon DocumentDB 实例的信息。其中包括有关实例类和状态的详细信息，以及如何创建、删除和修改实例。

**Topics**
+ [确定实例的状态](#db-instance-status)
+ [实例生命周期](db-instance-life-cycle.md)
+ [管理实例类](db-instance-classes.md)
+ [NVMe 支持的实例](db-instance-nvme.md)

## 确定实例的状态
<a name="db-instance-status"></a>

要查看有效实例的状态、其含义以及如何确定您的实例的状态，请参阅[监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

# Amazon DocumentDB 实例生命周期
<a name="db-instance-life-cycle"></a>

Amazon DocumentDB 实例的生命周期包括创建、修改、维护并升级、执行备份和还原、重启以及删除实例。本节提供有关如何完成这些过程的信息。

**Topics**
+ [添加实例](db-instance-add.md)
+ [描述实例](db-instance-view-details.md)
+ [修改实例](db-instance-modify.md)
+ [重启实例](db-instance-reboot.md)
+ [删除实例](db-instance-delete.md)

您可以使用 AWS 管理控制台 或创建新的 Amazon DocumentDB 实例。 AWS CLI要将实例添加到集群，该集群必须处于*可用* 状态。您无法将实例添加到已停止的集群。如果集群已停止，则首先启动集群，等待集群进入*可用* 状态，然后添加实例。有关更多信息，请参阅 [停止和启动 Amazon DocumentDB 集群](db-cluster-stop-start.md)。

**注意**  
如果您使用控制台创建 Amazon DocumentDB 集群，则同时会自动为您创建实例。如果您要创建其他实例，请使用以下过程之一。

# 向集群添加 Amazon DocumentDB 实例
<a name="db-instance-add"></a>

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

使用以下过程通过 Amazon DocumentDB 控制台为集群创建实例。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 要选择希望将实例添加到的集群，请选择该集群名称左侧的按钮。

1. 选择 **Actions (操作)**，然后选择 **Add instance (添加实例)**。

1. 在 **Add instance to: (将实例添加到:)<cluster-name>** 页面中，对要添加到集群的每个实例重复以下步骤。您最多可以有 15。

   1. **Instance identifier (实例标识符)**：您可以输入此实例的唯一标识符，或允许 Amazon DocumentDB 基于集群标识符提供实例标识符。

      实例命名约束：
      + 长度为 [1-63] 个字母、数字或连字符。
      + 第一个字符必须是字母。
      + 不能以连字符结尾或包含两个连续的连字符。
      + 每个区域的 Amazon RDS、Neptune 和 Amazon DocumentDB 中的所有实例都必须是唯一 AWS 账户的。

   1. **Instance class (实例类)**：从下拉列表中，为该实例选择所需的实例类型。

   1. **Promotion tier (提升层)**：从下拉列表中，选择该实例的提升层，或者选择* No preference (无首选项) *以允许 Amazon DocumentDB 为您的实例设置提升层。数字越小，意味着优先级越高。有关更多信息，请参阅 [控制失效转移目标](failover.md#failover-target_control)。

   1. 要添加更多实例，请选择 **Add additional instances (添加额外实例)**，并重复步骤 a、b 和 c。

1. 完成此操作。
   + 要将实例添加到集群，请选择 **Create (创建)**。
   + 要取消操作，请选择**取消**。

创建实例需要几分钟时间。您可以使用控制台或 AWS CLI 查看实例的状态。有关更多信息，请参阅 [监控实例的状态](monitoring_docdb-instance_status.md)。

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

使用带有以下参数的`create-db-instance` AWS CLI 操作为您的集群创建主实例。
+ **--db-instance-class**：必需。实例的计算和内存容量，例如，`db.m4.large`。并非所有实例类在所有 AWS 区域中都可用。
+ **--db-instance-identifier**：必需。标识实例的一个 字符串。

  实例命名约束：
  + 长度为 [1-63] 个字母、数字或连字符。
  + 第一个字符必须是字母。
  + 不能以连字符结尾或包含两个连续的连字符。
  + 每个区域的 Amazon RDS、Neptune 和 Amazon DocumentDB 中的所有实例都必须是唯一 AWS 账户的。
+ **--engine**：必需。必须是 `docdb`。
+ **--availability-zone**：可选。要在其中创建此实例的可用区。使用此参数在不同可用区中找到您的实例，以增强容错能力。有关更多信息，请参阅 [Amazon DocumentDB 高可用性和复制](replication.md)。
+ **--promotion-tier**：可选。此实例的失效转移优先级层。必须介于 0 与 15 之间，数字越小，优先级越高。有关更多信息，请参阅 [控制失效转移目标](failover.md#failover-target_control)。

1. **首先，确定您可以在哪些可用区中创建您的实例。**

   如果要在创建实例前指定可用区，请运行以下命令以确定哪些可用区可用于您的 Amazon DocumentDB 集群。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-clusters \
          --query 'DBClusters[*].[DBClusterIdentifier,AvailabilityZones[*]]'
   ```

   对于 Windows：

   ```
   aws docdb describe-db-clusters ^
          --query 'DBClusters[*].[DBClusterIdentifier,AvailabilityZones[*]]'
   ```

   此操作的输出将类似于下文。

   ```
   [
       [
           "sample-cluster",
           [
               "us-east-1c",
               "us-east-1b",
               "us-east-1a"
           ]
       ]
   ]
   ```

1. **其次，确定您可以在您的区域中创建哪些实例类。**

   要确定您所在区域中可用的实例类，请运行以下命令。从输出中，为要添加到 Amazon DocumentDB 集群的实例选择实例类。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-orderable-db-instance-options \
           --engine docdb \
           --query 'OrderableDBInstanceOptions[*].DBInstanceClass'
   ```

   对于 Windows：

   ```
   aws docdb describe-orderable-db-instance-options ^
           --engine docdb ^
           --query 'OrderableDBInstanceOptions[*].DBInstanceClass'
   ```

   此操作的输出将类似于下文。

   ```
   [
       "db.r5.16xlarge",
       "db.r5.2xlarge",
       "db.r5.4xlarge",
       "db.r5.8xlarge",
       "db.r5.large",
       "db.r5.xlarge"
   ]
   ```

1. **最后，将实例添加到您的 Amazon DocumentDB 集群。**

   要将实例添加到您的 Amazon DocumentDB 集群，请运行以下命令。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb create-db-instance \
          --db-cluster-identifier sample-cluster \
          --db-instance-identifier sample-instance-2 \
          --availability-zone us-east-1b \
          --promotion-tier 2 \
          --db-instance-class db.r5.xlarge \
          --engine docdb
   ```

   对于 Windows：

   ```
   aws docdb create-db-instance ^
          --db-cluster-identifier sample-cluster ^
          --db-instance-identifier sample-instance-2 ^
          --availability-zone us-east-1b ^
          --promotion-tier 2 ^
          --db-instance-class db.r5.xlarge ^
          --engine docdb
   ```

   此操作的输出将类似于下文。

   ```
   {
       "DBInstance": {
           "DBInstanceIdentifier": "sample-instance-2",
           "DBInstanceClass": "db.r5.xlarge",
           "Engine": "docdb",
           "DBInstanceStatus": "creating",
           "PreferredBackupWindow": "02:00-02:30",
           "BackupRetentionPeriod": 1,
           "VpcSecurityGroups": [
               {
                   "VpcSecurityGroupId": "sg-abcd0123",
                   "Status": "active"
               }
           ],
           "AvailabilityZone": "us-east-1b",
           "DBSubnetGroup": {
               "DBSubnetGroupName": "default",
               "DBSubnetGroupDescription": "default",
               "VpcId": "vpc-6242c31a",
               "SubnetGroupStatus": "Complete",
               "Subnets": [
                   {
                       "SubnetIdentifier": "subnet-abcd0123",
                       "SubnetAvailabilityZone": {
                           "Name": "us-west-2a"
                       },
                       "SubnetStatus": "Active"
                   },
                   {
                       "SubnetIdentifier": "subnet-wxyz0123",
                       "SubnetAvailabilityZone": {
                           "Name": "us-west-2b"
                       },
                       "SubnetStatus": "Active"
                   }
               ]
           },
           "PreferredMaintenanceWindow": "sun:11:35-sun:12:05",
           "PendingModifiedValues": {},
           "EngineVersion": "3.6.0",
           "AutoMinorVersionUpgrade": true,
           "PubliclyAccessible": false,
           "DBClusterIdentifier": "sample-cluster",
           "StorageEncrypted": true,
           "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key",
           "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
           "CACertificateIdentifier": "rds-ca-2019",
           "PromotionTier": 2,
           "DBInstanceArn": "arn:aws:rds:us-east-1:<accountID>:db:sample-instance-2"
       }
   }
   ```

创建实例需要几分钟时间。您可以使用控制台或 AWS CLI 查看实例的状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

------

# 描述 Amazon DocumentDB 实例
<a name="db-instance-view-details"></a>

您可以使用 Amazon DocumentDB 管理控制台或查看与您的 Amazon DocumentDB 实例相关的连接终端节点、安全组 VPCs、证书颁发机构和参数组等详细信息。 AWS CLI 

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

要使用 AWS 管理控制台查看实例的详细信息，请执行以下步骤。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择 **Clusters（集群）**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[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/choose-clusters.png)

1. 在实例列表中，选择要查看其详细信息的实例的名称。有关实例的信息分为以下几组：
   + **Summary (摘要)**：有关实例的一般信息，包括引擎版本、类、状态和所有待处理维护。
   + **Connectivity & Security (连接性和安全性)**：**Connect (连接) **部分列出要使用 mongo Shell 或应用程序连接到此实例的连接端点。**Security Groups (安全组)** 部分列出与此实例关联的安全组及其 VPC ID 和描述。
   + **配置**：**详情**部分列出了实例的配置和状态，包括实例的 Amazon 资源名称 (ARN)、端点、角色、类和证书颁发机构。其中还列出实例的安全性和网络设置以及备份信息。**Cluster details (集群详细信息)** 部分列出此实例所属集群的详细信息。**Cluster instances (集群实例)** 部分列出属于集群的所有实例，其中包括每个实例的角色和集群参数组状态。
**注意**  
您可以通过选择紧邻 **集群详情**标题的**修改**，修改与您的实例关联的集群。有关更多信息，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。
   + **监控**- CloudWatch 记录此实例的指标。有关更多信息，请参阅 [使用以下方式监控亚马逊 DocumentDB CloudWatch](cloud_watch.md)。
   + **事件和标签**：**最近事件**部分列出了这个实例的最近事件。Amazon DocumentDB 记录与集群、实例、快照、安全组和集群参数组相关的事件。此信息包括与每个事件关联的日期、时间和消息。**Tags (标签)** 部分列出附加该集群的标签。有关更多信息，请参阅 [标记 Amazon DocumentDB 资源](tagging.md)。

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

要使用查看您的 Amazon DocumentDB 实例的详细信息 AWS CLI，请使用如下示例所示的`describe-db-clusters`命令。有关更多信息，请参阅 *Amazon DocumentDB 资源管理 API 参考*中的 [https://docs.aws.amazon.com/documentdb/latest/developerguide/API_DescribeDBInstances.html](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_DescribeDBInstances.html)。

**注意**  
对于某些管理功能（如集群和实例生命周期管理），Amazon DocumentDB 利用与 Amazon RDS 共享的操作技术。`filterName=engine,Values=docdb` 筛选条件参数仅返回 Amazon DocumentDB 集群。

1. **列出所有 Amazon DocumentDB 实例。**

   以下 AWS CLI 代码列出了某个区域中所有 Amazon DocumentDB 实例的详细信息。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-instances \
       --filter Name=engine,Values=docdb
   ```

   对于 Windows：

   ```
   aws docdb describe-db-instances \
       --filter Name=engine,Values=docdb
   ```

1. **列出指定 Amazon DocumentDB 实例的所有详细信息**

   以下代码列出了 `sample-cluster-instance` 的详细信息。将 `--db-instance-identifier` 参数包含在实例名称中，会将输出限制为该特定实例的信息。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-instances \
       --db-instance-identifier sample-cluster-instance
   ```

   对于 Windows：

   ```
   aws docdb describe-db-instances \
       --db-instance-identifier sample-cluster-instance
   ```

   此操作的输出将类似于以下内容：

   ```
   {
       "DBInstances": [
           {
               "DbiResourceId": "db-BJKKB54PIDV5QFKGVRX5T3S6GM",
               "DBInstanceArn": "arn:aws:rds:us-east-1:012345678901:db:sample-cluster-instance-00",
               "VpcSecurityGroups": [
                   {
                       "VpcSecurityGroupId": "sg-77186e0d",
                       "Status": "active"
                   }
               ],
               "DBInstanceClass": "db.r5.large",
               "DBInstanceStatus": "creating",
               "AutoMinorVersionUpgrade": true,
               "PreferredMaintenanceWindow": "fri:09:32-fri:10:02",
               "BackupRetentionPeriod": 1,
               "StorageEncrypted": true,
               "DBClusterIdentifier": "sample-cluster",
               "EngineVersion": "3.6.0",
               "AvailabilityZone": "us-east-1a",
               "Engine": "docdb",
               "PromotionTier": 2,
               "DBInstanceIdentifier": "sample-cluster-instance",
               "PreferredBackupWindow": "00:00-00:30",
               "PubliclyAccessible": false,
               "DBSubnetGroup": {
                   "DBSubnetGroupName": "default",
                   "Subnets": [
                       {
                           "SubnetIdentifier": "subnet-4e26d263",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1a"
                           },
                           "SubnetStatus": "Active"
                       },
                       {
                           "SubnetIdentifier": "subnet-afc329f4",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1c"
                           },
                           "SubnetStatus": "Active"
                       },
                       {
                           "SubnetIdentifier": "subnet-b3806e8f",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1e"
                           },
                           "SubnetStatus": "Active"
                       },
                       {
                           "SubnetIdentifier": "subnet-53ab3636",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1d"
                           },
                           "SubnetStatus": "Active"
                       },
                       {
                           "SubnetIdentifier": "subnet-991cb8d0",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1b"
                           },
                           "SubnetStatus": "Active"
                       },
                       {
                           "SubnetIdentifier": "subnet-29ab1025",
                           "SubnetAvailabilityZone": {
                               "Name": "us-east-1f"
                           },
                           "SubnetStatus": "Active"
                       }
                   ],
                   "VpcId": "vpc-91280df6",
                   "DBSubnetGroupDescription": "default",
                   "SubnetGroupStatus": "Complete"
               },
               "PendingModifiedValues": {},
               "KmsKeyId": "arn:aws:kms:us-east-1:012345678901:key/0961325d-a50b-44d4-b6a0-a177d5ff730b"
           }
       ]
   }
   ```

------

# 修改 Amazon DocumentDB 实例
<a name="db-instance-modify"></a>

您可以使用 AWS 管理控制台 或修改您的 Amazon DocumentDB 实例。 AWS CLI要修改某个实例，该实例必须处于*可用* 状态。您无法修改已停止的实例。如果集群已停止，则首先启动集群，等待实例进入*可用* 状态，然后进行所需修改。有关更多信息，请参阅 [停止和启动 Amazon DocumentDB 集群](db-cluster-stop-start.md)。

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

要使用控制台修改特定的 Amazon DocumentDB 实例，请完成以下步骤。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择 **Clusters（集群）**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[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/choose-clusters.png)

1. 勾选您希望修改的实例左侧的复选框。

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

1. 在 **Modify instance: <instance-name> (修改实例: <instance-name>>)** 窗格中，进行所需更改。您可以进行以下更改：
   + **实例规范**：实例标识符和类。实例标识符命名约束：
     + **实例标识符**-输入一个名称，该名称对于您在 AWS 账户 当前地区拥有的所有实例都具有唯一性。实例标识符必须包含 [1-63] 个字母数字字符或连字符，以字母作为首字符，并且不能以连字符结尾或不能包含两个连续连字符。
     + **实例类**：从下拉菜单中，为您的 Amazon DocumentDB 实例选择一个实例类。有关更多信息，请参阅 [管理实例类](db-instance-classes.md)。
   + **证书颁发机构**：此实例的服务器证书。有关更多信息，请参阅 [更新您的 Amazon DocumentDB TLS 证书](ca_cert_rotation.md)。
   + **失效转移**：在失效转移期间，具有最高提升层的实例将被提升为主实例。有关更多信息，请参阅 [Amazon DocumentDB 失效转移](failover.md)。
   + **维护**：在维护窗口中将待处理的修改或修补程序应用于集群中的实例。

1. 完成后，选择 **Continue (继续)** 以查看更改摘要。

1. 在确认您的更改后，您可以立即应用这些更改，也可以在 **Scheduling of modifications (修改计划)** 下的下一个维护时段内应用这些更改。选择 **Modify instance (修改实例)** 以保存更改。或者，您可以选择 **Cancel (取消)** 以放弃更改。

需要几分钟时间才能应用更改。只有在实例状态为 *available (可用)* 时，才能使用实例。您可以使用控制台或 AWS CLI监控实例状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

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

要使用修改特定的 Amazon DocumentDB 实例 AWS CLI，请使用`modify-db-instance`带以下参数的。有关更多信息，请参阅[修改DBInstance](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_ModifyDBInstance.html)。以下代码为实例 `sample-instance` 将实例类修改为 `db.r5.large`。

**参数**
+ **--db-instance-identifier**：必需。要修改的实例的标识符。
+ **--db-instance-class**：可选。实例的新计算和内存容量；例如，`db.r5.large`。并非所有实例类型在所有 AWS 区域中都可用。如果您修改实例类，则在更改期间会发生中断。更改在下一个维护时段内应用，除非此请求的 `ApplyImmediately` 指定为真实。
+ **--apply-immediately** 或 **--no-apply-immediately**：可选。指定应立即应用此修改，还是等到下一个维护时段。如果省略此参数，则会在下一个维护时段执行修改。

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

```
aws docdb modify-db-instance \
       --db-instance-identifier sample-instance \
       --db-instance-class db.r5.large \
       --apply-immediately
```
对于 Windows：  

```
aws docdb modify-db-instance ^
       --db-instance-identifier sample-instance ^
       --db-instance-class db.r5.large ^
       --apply-immediately
```
此操作的输出将类似于下文。  

```
{
    "DBInstances": [
        {
            "DBInstanceIdentifier": "sample-instance-1",
            "DBInstanceClass": "db.r5.large",
            "Engine": "docdb",
            "DBInstanceStatus": "modifying",
            "Endpoint": {                     
                "Address": "sample-instance-1.node.us-east-1.docdb.amazonaws.com",
                "Port": 27017,   
                "HostedZoneId": "ABCDEFGHIJKLM"
            },
            "InstanceCreateTime": "2020-01-10T22:18:55.921Z",
            "PreferredBackupWindow": "02:00-02:30",
            "BackupRetentionPeriod": 1,
            "VpcSecurityGroups": [
                {                             
                    "VpcSecurityGroupId": "sg-abcd0123",
                    "Status": "active"
                }
            ],
            "AvailabilityZone": "us-east-1a",
            "DBSubnetGroup": {
                "DBSubnetGroupName": "default",
                "DBSubnetGroupDescription": "default",
                "VpcId": "vpc-abcd0123",
                "SubnetGroupStatus": "Complete",
                "Subnets": [
                    {
                        "SubnetIdentifier": "subnet-abcd0123",
                        "SubnetAvailabilityZone": {
                            "Name": "us-east-1a"
                        },
                        "SubnetStatus": "Active"
                    },
                    {
                        "SubnetIdentifier": "subnet-abcd0123",
                        "SubnetAvailabilityZone": {
                            "Name": "us-east-1b"
                        },
                        "SubnetStatus": "Active"
                    }
                ]
            },
            "PreferredMaintenanceWindow": "sun:10:57-sun:11:27",
            "PendingModifiedValues": {
                "DBInstanceClass": "db.r5.large"
            },
            "EngineVersion": "3.6.0",
            "AutoMinorVersionUpgrade": true,
            "PubliclyAccessible": false,
            "DBClusterIdentifier": "sample-cluster",
            "StorageEncrypted": true,
            "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
            "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
            "CACertificateIdentifier": "rds-ca-2019",
            "PromotionTier": 1,                     
            "DBInstanceArn": "arn:aws:rds:us-east-1:123456789012:db:sample-instance-1",
            "EnabledCloudwatchLogsExports": [
                "profiler"
            ]
        }
    ]
}
```

需要几分钟时间才能应用修改。只有在实例状态为 *available (可用)* 时，才能使用实例。您可以使用 AWS 管理控制台 或监控实例的状态 AWS CLI。有关更多信息，请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

------

# 重启 Amazon DocumentDB 实例
<a name="db-instance-reboot"></a>

有时您可能需要重启 Amazon DocumentDB 实例，这通常是出于维护原因。如果您进行了某些更改，例如更改与集群关联的集群参数组，则必须重启集群中的实例才能使更改生效。您可以使用 AWS 管理控制台 或重启指定的实例 AWS CLI。

重启实例会重新启动数据库引擎服务。重启将导致短暂中断，在此期间，实例的状态将设置为 `rebooting`。重新启动完成后，即会创建 Amazon DocumentDB 事件。

重启实例不会导致失效转移。要对 Amazon DocumentDB 集群进行故障转移，请使用 AWS 管理控制台 或操作。 AWS CLI `failover-db-cluster`有关更多信息，请参阅 [Amazon DocumentDB 失效转移](failover.md)。

如果实例未处于 *available (可用)* 状态，则无法重启该实例。数据库可能会由于几个原因而不可用，例如，以前请求的修改或维护时段操作。有关实例状态的更多信息，请参阅[监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

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

以下过程将使用控制台重启您指定的实例。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择 **Clusters（集群）**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[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/choose-clusters.png)

1. 勾选您希望重启的实例左侧的复选框。

1. 选择 **Actions (操作)**、**Reboot (重启)**，然后选择 **Reboot (重启)** 以确认重启。

实例重启需要几分钟时间。只有在实例状态为 *available (可用)* 时，才能使用实例。您可以使用控制台或 AWS CLI监控实例状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

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

要重启 Amazon DocumentDB 实例，请使用具有 `--db-instance-identifier` 参数的 `reboot-db-instance` 操作。此参数指定要重启的实例的标识符。

以下代码将重启实例 `sample-instance`。

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

```
aws docdb reboot-db-instance \
       --db-instance-identifier sample-instance
```
对于 Windows：  

```
aws docdb reboot-db-instance ^
       --db-instance-identifier sample-instance
```
此操作的输出将类似于下文。  

```
{
    "DBInstance": {
        "DBInstanceIdentifier": "sample-instance",
        "DBInstanceClass": "db.r5.large",
        "Engine": "docdb",
        "DBInstanceStatus": "rebooting",
        "Endpoint": {
            "Address": "sample-instance.node.us-east-1.docdb.amazonaws.com",
            "Port": 27017,   
            "HostedZoneId": "ABCDEFGHIJKLM"
        },
        "InstanceCreateTime": "2020-03-27T08:05:56.314Z",
        "PreferredBackupWindow": "02:00-02:30",
        "BackupRetentionPeriod": 1,
        "VpcSecurityGroups": [
            {
                "VpcSecurityGroupId": "sg-abcd0123",
                "Status": "active"
            }
        ],
        "AvailabilityZone": "us-east-1c",
        "DBSubnetGroup": {
            "DBSubnetGroupName": "default",
            "DBSubnetGroupDescription": "default",
            "VpcId": "vpc-abcd0123",
            "SubnetGroupStatus": "Complete",
            "Subnets": [
                {
                    "SubnetIdentifier": "subnet-abcd0123",
                    "SubnetAvailabilityZone": {
                        "Name": "us-east-1a"
                    },
                    "SubnetStatus": "Active"
                },
                {
                    "SubnetIdentifier": "subnet-wxyz0123",
                    "SubnetAvailabilityZone": {
                        "Name": "us-east-1b"
                    },
                    "SubnetStatus": "Active"
                }
            ]
        },
        "PreferredMaintenanceWindow": "sun:06:53-sun:07:23",
        "PendingModifiedValues": {},
        "EngineVersion": "3.6.0",
        "AutoMinorVersionUpgrade": true,
        "PubliclyAccessible": false,
        "DBClusterIdentifier": "sample-cluster",
        "StorageEncrypted": true,
        "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key",
        "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "CACertificateIdentifier": "rds-ca-2019",
        "PromotionTier": 1,
        "DBInstanceArn": "arn:aws:rds:us-east-1:<accountID>:db:sample-instance",
        "EnabledCloudwatchLogsExports": [
            "profiler"
        ]
    }
}
```

实例重启需要几分钟时间。只有在实例状态为 *available (可用)* 时，才能使用实例。您可以使用控制台或 AWS CLI监控实例状态。有关更多信息，请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

------

# 删除 Amazon DocumentDB 实例
<a name="db-instance-delete"></a>

您可以使用 AWS 管理控制台 或删除您的 Amazon DocumentDB 实例。 AWS CLI要删除某个实例，该实例必须处于*可用* 状态。您无法删除已停止的实例。如果包含您的实例的 Amazon DocumentDB 集群已停止，则首先启动集群，等待实例进入*可用*状态，然后删除实例。有关更多信息，请参阅 [停止和启动 Amazon DocumentDB 集群](db-cluster-stop-start.md)。

**注意**  
Amazon DocumentDB 将所有数据都存储在集群卷中。即使您从集群中删除所有实例，数据仍会保留在该集群卷中。如果您需要再次访问数据，则可随时向该集群中添加实例，并在停止处恢复操作。

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

以下过程使用控制台删除指定的 Amazon DocumentDB 实例。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择 **Clusters（集群）**。
**提示**  
如果您在屏幕左侧没有看到导航窗格，请在页面左上角选择菜单图标 (![\[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/choose-clusters.png)

1. 勾选您希望删除的实例左侧的复选框。

1. 选择 ** Actions (操作)**，然后选择 **Delete (删除)**。

   1. 如果您要删除集群中的最后一个实例：
      + **Create final cluster snapshot? (是否创建最终集群快照?)** — 如果要在删除集群之前创建最终快照，请选择** Yes (是)**。否则，请选择 **No**。
      + **Final snapshot name (最终快照名称)**：如果您选择创建最终快照，请输入所创建的新集群快照的集群快照标识符。
      + **Delete <instance-name> instance? (是否删除 <instance-name> 实例?)** — 在此字段中输入** delete entire cluster (删除整个集群) **短语以确认删除。

   1. 如果您不删除集群中的最后一个实例：
      + **Delete <instance-name> instance? (是否删除 <instance-name> 实例?)** — 在此字段中输入** delete me (删除我)** 短语以确认删除。

1. 选择 **Delete (删除)** 以删除实例。

删除实例需要几分钟时间。要监控实例的状态，请参阅[监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

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

以下过程使用 AWS CLI删除 Amazon DocumentDB 实例。

1. **首先，确定您的 Amazon DocumentDB 集群中有多少个实例：**

   要确定集群中有多少个实例，请运行 `describe-db-clusters` 命令，如下所示。

   ```
   aws docdb describe-db-clusters \
       --db-cluster-identifier sample-cluster \
       --query 'DBClusters[*].[DBClusterIdentifier,DBClusterMembers[*].DBInstanceIdentifier]'
   ```

   此操作的输出将类似于下文。

   ```
   [
       [
           "sample-cluster",
           [
               "sample-instance-1",
               "sample-instance-2"
           ]
       ]
   ]
   ```

1. **如果您的 Amazon DocumentDB 集群中有多个实例：**

   要删除指定的 Amazon DocumentDB 实例，请使用带 `--db-instance-identifier` 参数的 `delete-db-instance` 命令，如下所示。删除实例需要几分钟时间。要监控实例的状态，请参阅[监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)。

   ```
   aws docdb delete-db-instance \
          --db-instance-identifier sample-instance-2
   ```

   此操作的输出将类似于下文。

   ```
   {
       "DBInstance": {
           "DBInstanceIdentifier": "sample-instance-2",
           "DBInstanceClass": "db.r5.large",
           "Engine": "docdb",
           "DBInstanceStatus": "deleting",
           "Endpoint": {
               "Address": "sample-instance-2.node.us-east-1.docdb.amazonaws.com",
               "Port": 27017,
               "HostedZoneId": "ABCDEFGHIJKLM"
           },
           "InstanceCreateTime": "2020-03-27T08:05:56.314Z",
           "PreferredBackupWindow": "02:00-02:30",
           "BackupRetentionPeriod": 1,
           "VpcSecurityGroups": [
               {
                   "VpcSecurityGroupId": "sg-abcd0123",
                   "Status": "active"
               }
           ],
           "AvailabilityZone": "us-east-1c",
           "DBSubnetGroup": {
               "DBSubnetGroupName": "default",
               "DBSubnetGroupDescription": "default",
               "VpcId": "vpc-6242c31a",
               "SubnetGroupStatus": "Complete",
               "Subnets": [
                   {
                       "SubnetIdentifier": "subnet-abcd0123",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1a"
                       },
                       "SubnetStatus": "Active"
                   },
                   {
                       "SubnetIdentifier": "subnet-wxyz0123",
                       "SubnetAvailabilityZone": {
                           "Name": "us-east-1b"
                       },
                       "SubnetStatus": "Active"
                   }
               ]
           },
           "PreferredMaintenanceWindow": "sun:06:53-sun:07:23",
           "PendingModifiedValues": {},
           "EngineVersion": "3.6.0",
           "AutoMinorVersionUpgrade": true,
           "PubliclyAccessible": false,
           "DBClusterIdentifier": "sample-cluster",
           "StorageEncrypted": true,
           "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key",
           "DbiResourceId": "db-ABCDEFGHIJKLMNOPQRSTUVWXYZ",
           "CACertificateIdentifier": "rds-ca-2019",
           "PromotionTier": 1,
           "DBInstanceArn": "arn:aws:rds:us-east-1:<accountID>:db:sample-instance-2",
           "EnabledCloudwatchLogsExports": [
               "profiler"
           ]
       }
   }
   ```

1. **如果要删除的实例是 Amazon DocumentDB 集群中的最后一个实例：**

   如果您删除 Amazon DocumentDB 集群中的最后一个实例，则还会删除该集群以及与该集群关联的自动快照和持续备份。

   要删除集群中的最后一个实例，您可以删除此集群并可以选择创建最终快照。有关更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。

------

## 删除保护
<a name="db-instance-delete-deletion-protection"></a>

删除 Amazon DocumentDB 集群的最后一个实例也将删除该集群，以及与该集群关联的自动快照和连续备份。无论您使用还是执行删除操作，Amazon DocumentDB 都会对集群强制执行删除保护。 AWS 管理控制台 AWS CLI如果已启用删除保护，则无法删除集群。

要删除启用了删除保护的实例，首先请修改该集群并禁用删除保护。有关更多信息，请参阅 [删除 Amazon DocumentDB 集群](db-cluster-delete.md)。

# 管理实例类
<a name="db-instance-classes"></a>

该实例类确定 Amazon DocumentDB（与 MongoDB 兼容）实例的计算和内存容量。您需要的实例类取决于您的处理能力和内存要求。

Amazon DocumentDB 支持 R4、R5、R6G、R8G、T3 和 T4G 系列的实例类。这些是最新一代的实例类，针对内存密集型应用程序进行了优化。有关这些实例类的规格，请参阅 [实例类规格](#db-instance-class-specs)。

**Topics**
+ [确定实例类](#db-instance-class-determining)
+ [更改实例的类](#db-instance-class-changing)
+ [不同区域支持的实例类](#db-instance-classes-by-region)
+ [实例类规格](#db-instance-class-specs)

## 确定实例类
<a name="db-instance-class-determining"></a>

要确定实例的类别，您可以使用 AWS 管理控制台 或`describe-db-instances` AWS CLI 操作。

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

要确定您的集群实例的实例类，请在控制台中完成以下步骤。

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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/choose-clusters.png)

1. 在实例列表中，展开集群以找到您感兴趣的实例。查找您想要的实例。然后查看实例行的 **大小** 列，以看到实例类。

   在下图中，实例 `robo3t` 的实例类为 `db.r5.4xlarge`。  
![\[“集群”表中的实例列表，其中“大小”列显示了实例类型。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/instance-class.png)

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

要使用确定实例的类别 AWS CLI，请使用带有以下参数的`describe-db-instances`操作。
+ **--db-instance-identifier**— 可选。指定要查找其实例类的实例。如果省略该参数，`describe-db-instances` 将返回最多 100 个实例的描述。
+ **--query**：可选。指定结果中要包含的实例成员。如果省略该参数，则返回所有实例成员。

**Example**  
以下示例为实例 `sample-instance-1` 找到实例名称和类。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceClass]' \
    --db-instance-identifier sample-instance-1
```
对于 Windows：  

```
aws docdb describe-db-instances ^
    --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceClass]' ^
    --db-instance-identifier sample-instance-1
```
此操作的输出将类似于下文。  

```
[
    [
        "sample-instance-1",
        "db.r5.large"
    ]
```

**Example**  
以下示例为多达 100 个 Amazon DocumentDB 实例找到实例名称和类。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-instances \
    --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceClass]' \
    --filter Name=engine,Values=docdb
```
对于 Windows：  

```
aws docdb describe-db-instances ^
    --query 'DBInstances[*].[DBInstanceIdentifier,DBInstanceClass]' ^
    --filter Name=engine,Values=docdb
```
此操作的输出将类似于下文。  

```
[
    [
        "sample-instance-1",
        "db.r5.large"
    ],
    [
        "sample-instance-2",
        "db.r5.large"
    ],
    [
        "sample-instance-3",
        "db.r5.4xlarge"
    ],
    [
        "sample-instance-4",
        "db.r5.4xlarge"
    ]
]
```

有关更多信息，请参阅 [描述 Amazon DocumentDB 实例](db-instance-view-details.md)。

------

## 更改实例的类
<a name="db-instance-class-changing"></a>

您可以使用 AWS 管理控制台 或更改实例的实例类别 AWS CLI。有关更多信息，请参阅 [修改 Amazon DocumentDB 实例](db-instance-modify.md)。

## 不同区域支持的实例类
<a name="db-instance-classes-by-region"></a>

Amazon DocumentDB 支持以下数据库实例类：
+ `R8G`—最新一代内存优化型实例由基于 ARM 的 AWS Graviton4 处理器提供支持，其性能比 R6G 实例提高多达 30%。
+ `R6G`—由基于 ARM 的 AWS Graviton2 处理器提供支持的内存优化型实例，其性能比 R5 实例提高多达 30%，成本降低 5%。
+ `R6GD`—内存优化型 R6G 实例，具有基于本地非易失性存储器 express (NVMe) 的固态硬盘 (SSD) 存储，用于存储临时数据。
+ `R5`：对于相同实例成本提供胜过 R4 实例多达 100% 更好性能的内存优化型实例。
+ `R4`：上一代内存优化型实例。
+ `T4G`—最新一代低成本可突发通用实例类型由基于 ARM 的 AWS Graviton2 处理器提供支持，可提供基准 CPU 性能，性价比比 T3 实例高出 35%，非常适合运行 CPU 使用率中等、使用量暂时激增的应用程序。
+ `T3`：低成本可突增通用实例类型，它提供基准级别的 CPU 性能，有能力根据需要随时突增 CPU 使用率。

有关实例类的详细规格，请参阅 [实例类规格](#db-instance-class-specs)。

**注意**  
I/O 优化存储仅在引擎版本 5.0 和 8.0（基于实例的集群）上可用。

特定实例类在给定区域可能受或可能不受支持。下表指定了在每个区域哪些实例类受 Amazon DocumentDB 支持。


**不同区域支持的实例类**  

|  | 实例类 | Region | R8G | R6GD | R6G | R5 | R4 | T4G | T3 | Serverless | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 美国东部（俄亥俄州） | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 
| 美国东部（弗吉尼亚州北部） | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 
| 美国西部（俄勒冈州） | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 
| 非洲（开普敦） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 南美洲（圣保罗） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（香港） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（海得拉巴） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（马来西亚） |  |  | 支持 |  |  | 支持 | 支持 |  | 
| 亚太地区（孟买） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（大阪） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 |  | 
| 亚太地区（首尔） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（悉尼） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（雅加达） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 |  | 
| 亚太地区（墨尔本） |  |  | 支持 | 支持 |  | 支持 | 支持 |  | 
| 亚太地区（新加坡） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 亚太地区（泰国） |  |  | 支持 |  |  | 支持 | 支持 |  | 
| 亚太地区（东京） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 加拿大（中部） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲地区（法兰克福） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲（苏黎世） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 |  | 
| 欧洲地区（爱尔兰） | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 
| 欧洲地区（伦敦） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲地区（米兰） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲地区（巴黎） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲（西班牙） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 欧洲地区（斯德哥尔摩） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 |  | 
| 墨西哥（中部） |  |  | 支持 |  |  | 支持 | 支持 |  | 
| 中东（阿联酋）： |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 中国（北京） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 中国（宁夏） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| 以色列（特拉维夫） |  |  | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| AWS GovCloud （美国西部） | 支持 | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 
| AWS GovCloud （美国东部） |  | 支持 | 支持 | 支持 |  | 支持 | 支持 | 支持 | 

## 实例类规格
<a name="db-instance-class-specs"></a>

下表提供 Amazon DocumentDB 实例类的详细信息，包括每个类支持哪些实例类型。可在表下方找到每个表列的说明。


| 实例类 | vCPU1 | 内存 (GiB)2 | NVMe 固态硬盘分层缓存 (GiB) 3 | 最大存储温度 (GiB) 4 | 基准/突增带宽（Gbps）5 | 支持引擎 6 | 
| --- | --- | --- | --- | --- | --- | --- | 
| R8G：基于 Graviton4 的当前代内存优化型实例类 R8G 是最新的实例系列 (Graviton4)，仅在引擎版本 5.0 和 8.0 上可用。db.r8g.24xlarge 和 db.r8g.48xlarge 的尺寸尚不可用。 | 
| db.r8g.large | 2 | 16 | - | 30 | 0.937 / 12.5 | 5.0.0 和 8.0.0 | 
| db.r8g.xlarge | 4 | 32 | - | 60 | 1.875 / 12.5 | 5.0.0 和 8.0.0 | 
| db.r8g.2xlarge | 8 | 64 | - | 121 | 3.75 / 15.0 | 5.0.0 和 8.0.0 | 
| db.r8g.4xlarge | 16 | 128 | - | 243 | 7.5 / 15.0 | 5.0.0 和 8.0.0 | 
| db.r8g.8xlarge | 32 | 256 | - | 488 | 15 | 5.0.0 和 8.0.0 | 
| db.r8g.12xlarge | 48 | 384 | - | 732 | 22 | 5.0.0 和 8.0.0 | 
| db.r8g.16xlarge | 64 | 512 | - | 987 | 30 | 5.0.0 和 8.0.0 | 
| R6G：基于 Graviton2 的当前代内存优化型实例类 | 
| db.r6g.large | 2 | 16 | - | 32 | 0.75/ 10 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.xlarge | 4 | 32 | - | 63 | 1.25/ 10 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.2xlarge | 8 | 64 | - | 126 | 2.5/ 10 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.4xlarge | 16 | 128 | - | 252 | 5.0/ 10 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.8xlarge | 32 | 256 | - | 504 | 12 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.12xlarge | 48 | 384 | - | 756 | 20 | 4.0.0、5.0.0 和 8.0.0 | 
| db.r6g.16xlarge | 64 | 512 | - | 1008 | 25 | 4.0.0、5.0.0 和 8.0.0 | 
| R6GD — 基于 Graviton2 的由最新一代 NVMe支持的实例类 | 
| db.r6gd.xlarge | 4 | 32 | 173 | 64 | 1.25/ 10 | 5.0.0 和 8.0.0 | 
| db.r6gd.2xlarge | 8 | 64 | 346 | 128 | 2.5/ 10 | 5.0.0 和 8.0.0 | 
| db.r6gd.4xlarge | 16 | 128 | 694 | 256 | 5.0/ 10 | 5.0.0 和 8.0.0 | 
| db.r6gd.8xlarge | 32 | 256 | 1388 | 512 | 12 | 5.0.0 和 8.0.0 | 
| db.r6gd.12xlarge | 48 | 384 | 2082 | 768 | 20 | 5.0.0 和 8.0.0 | 
| db.r6gd.16xlarge | 64 | 512 | 2776 | 1024 | 25 | 5.0.0 和 8.0.0 | 
| R5：上一代内存优化型实例类 | 
| db.r5.large | 2 | 16 | - | 31 | 0.75/ 10 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.xlarge | 4 | 32 | - | 62 | 1.25/ 10 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.2xlarge | 8 | 64 | - | 124 | 2.5/ 10 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.4xlarge | 16 | 128 | - | 249 | 5.0/ 10 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.8xlarge | 32 | 256 | - | 504 | 10 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.12xlarge | 48 | 384 | - | 748 | 12 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.16xlarge | 64 | 512 | - | 1008 | 20 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| db.r5.24xlarge | 96 | 768 | - | 1500 | 25 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
| R4：上一代内存优化型实例类 只有引擎版本 3.6 支持 R4 实例。请注意，亚马逊 DocumentDB 3.6 将于 2026 年 3 月 30 日终止标准支持。Extended Support（付费）有效期至 2029 年 3 月。 | 
| db.r4.large | 2 | 15.25 | - | 30 | 0.75/ 10 | 仅 3.6.0 | 
| db.r4.xlarge | 4 | 30.5 | - | 60 | 1.25/ 10 | 仅 3.6.0 | 
| db.r4.2xlarge | 8 | 61 | - | 120 | 2.5/ 10 | 仅 3.6.0 | 
| db.r4.4xlarge | 16 | 122 | - | 240 | 5.0 /10 | 仅 3.6.0 | 
| db.r4.8xlarge | 32 | 244 | - | 480 | 10 | 仅 3.6.0 | 
| db.r4.16xlarge | 64 | 488 | - | 960 | 25 | 仅 3.6.0 | 
| T4G：基于 Graviton2 的最新一代可突增性能实例类 T 系列实例在无限 CPU 突发模式下运行。超出基准的突发使用量将额外收费。不支持全局群集。 | 
| db.t4g.medium | 2 | 4 | - | 8.13 | 0.256/ 5 | 4.0.0、5.0.0 和 8.0.0 | 
| T3：上一代可突增性能实例类 | 
| db.t3.medium | 2 | 4 | - | 7.5 | 0.256/ 5 | 3.6.0、4.0.0、5.0.0 和 8.0.0 | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/db-instance-classes.html)  | 

# NVMe 支持的实例
<a name="db-instance-nvme"></a>

对于所含大型数据集超过常规实例内存的应用程序，NVMe 支持的实例可将查询性能提升高达 7 倍。这些实例利用 r6gd 实例上可用的基于本地非易失性存储器规范（NVMe）的固态硬盘（SSD）存储来存储临时数据，从而减少基于网络的存储访问，改善读取延迟和提高吞吐量。

本地 SSD 空间分为两个部分：
+ **分层缓存** – 将大约 73% 的本地 SSD 分配为数据库缓存，与仅使用主内存相比，使系统能够存储多达五倍的数据库页面。本地 SSD 充当第二层缓存，而现有的内存缓冲区缓存仍作为第一层缓存。仅当缓冲区缓存和 SSD 缓存都未命中时，查询才会访问外部存储。
+ **临时存储** – 剩余的 27% 用于非永久性临时文件存储，用于涉及排序的复杂查询或资源密集型操作（如索引构建）。在常规实例中，临时空间位于 Amazon Elastic Block Store（EBS）卷上。SSD 上本地托管的临时存储可将涉及排序的查询延迟最多减少两倍，并加快索引构建等资源密集型操作的速度。

有关 NVMe 支持的实例类型及其规格的详细信息，请参阅 [实例类规格](db-instance-classes.md#db-instance-class-specs)。

**Topics**
+ [NVMe 支持的实例的推荐使用案例](#nvme-use-cases)
+ [在 Amazon DocumentDB 中使用 NVMe 支持的实例](#using-nvme)
+ [监控 NVMe 支持的实例](#monitoring-nvme)

## NVMe 支持的实例的推荐使用案例
<a name="nvme-use-cases"></a>

我们建议您在以下场景中使用 NVMe 支持的实例：
+ **读取密集型工作负载** – 如果您的工作负载是读取密集型工作负载，并且您的数据集大于缓冲区缓存（由低 `BufferCacheHitRatio` 和高 `ReadIOPS` 指标指示），则 NVMe 支持的实例可以提供性能优势。
+ **更新密集型工作负载** – 如果您的工作负载是更新密集型工作负载，并且由于网络存储读取延迟而导致垃圾回收无法跟上，则 NVMe 支持的实例可以帮助缓解此问题。

NVMe 支持的实例可以从各种使用案例中受益，包括：
+ **互联网规模的应用程序** – 支付处理、计费和电子商务等具有严格性能服务水平协议（SLA）的应用程序可以利用 NVMe 支持的实例的性能优势。
+ **实时报告控制面板** – 需运行数百次指标/数据收集查询的控制面板可以受益于 NVMe 支持的实例的低延迟和高吞吐量。
+ **生成式人工智能应用程序** – 使用向量搜索在数百万个向量嵌入中查找精确邻居或最近邻居的应用程序可以利用 NVMe 支持的实例的高性能。

## 在 Amazon DocumentDB 中使用 NVMe 支持的实例
<a name="using-nvme"></a>

要使用 Amazon DocumentDB 的 NVMe 支持的实例：
+ 创建 Amazon DocumentDB 集群，并添加一个 NVMe 支持的实例类。有关更多信息，请参阅 [创建 Amazon DocumentDB 集群](db-cluster-create.md)。
+ 或者，修改现有的 Amazon DocumentDB 集群，以使用一个 NVMe 支持的实例类。有关更多信息，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。

要查看不同 AWS 区域中 NVMe 支持的实例的可用性，请参阅 [不同区域支持的实例类](db-instance-classes.md#db-instance-classes-by-region)。

如果您想要从 NVMe 支持的实例切换回常规实例，请将 Amazon DocumentDB 实例的数据库实例类修改为不含 NVMe 存储的类似实例类。例如，如果当前实例类是“db.r6gd.4xlarge”，请选择“db.r6g.4xlarge”以切换回该实例类。有关更多信息，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。

## 监控 NVMe 支持的实例
<a name="monitoring-nvme"></a>

除了 Amazon CloudWatch 中提供的常规实例指标外，NVMe 支持的实例还会发出特定于基于 NVMe 的 SSD 存储、IOPS 和吞吐量的额外指标。

```
NVMeStorageCacheHitRatio
FreeNVMeStorage
ReadIOPSNVMeStorage
ReadLatencyNVMeStorage
ReadThroughputNVMeStorage
WriteIOPSNVMeStorage
WriteLatencyNVMeStorage
WriteThroughputNVMeStorage
```

有关这些指标的更多信息，请参阅 [NVMe支持的实例指标](cloud_watch.md#nvme-metrics)。

# 管理 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
```
该操作不会生成任何输出。

------

# Amazon DocumentDB 高可用性和复制
<a name="replication"></a>

通过使用副本实例，可以在 Amazon DocumentDB（与 MongoDB 兼容）中实现高可用性和读取扩展。单个 Amazon DocumentDB 集群支持单个主实例和最多 15 个副本实例。这些实例可以分布在集群区域的多个可用区中。主实例接受读取和写入流量，而副本实例仅接受读取请求。

集群卷由该集群的多个数据副本组成。不过，集群卷中的数据，对于主实例和数据库集群中的 Amazon DocumentDB 副本表示为单个逻辑卷。副本实例具有最终一致性。它们返回具有最短副本滞后的查询结果 - 通常远远少于主实例写入更新后的 100 毫秒。副本滞后因数据库更改速率而异。也就是说，在对数据库执行大量写入操作期间，您可能发现副本滞后时间变长。

## 读取扩展
<a name="replication.read-scaling"></a>

Amazon DocumentDB 副本十分适用于读取扩展，因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。集群卷在集群中的所有实例之间共享。因此，您不必为每个 Amazon DocumentDB 副本复制和维护数据副本。

## 高可用性
<a name="replication.high-availability"></a>

在创建 Amazon DocumentDB 集群时，根据子网组中的可用区数（必须至少为两个），Amazon DocumentDB 将在这些可用区中预置实例。在集群中创建实例时，Amazon DocumentDB 会自动在子网组的可用区中分发实例来平衡集群。此操作还会阻止所有实例位于同一可用区中。

**示例**  
为了说明这一点，请考虑以下示例：创建一个集群，其中包含一个具有三个可用区（*AZ1*、*AZ2* 和 *AZ3*）的子网组。

在创建集群中的第一个实例时，它是主实例并位于其中的一个可用区中。在本示例中，它位于 *AZ1* 中。创建的第二个实例是副本实例，它位于另外两个可用区之一中，例如，*AZ2*。创建的第三个实例是副本实例，它位于剩余的可用区 *AZ3* 中。如果创建更多的实例，它们将分布在多个可用区中，以便在集群中实现平衡。

如果在主实例 (AZ1) 中发生故障，则会触发失效转移，并将其中的一个现有副本提升为主实例。在旧的主实例恢复时，它将变为预置它的同一可用区 (AZ1) 中的副本。当您配置一个三实例集群时，Amazon DocumentDB 继续保留这个三实例集群。Amazon DocumentDB 自动处理实例故障的检测、失效转移和恢复，无需任何手动干预。

在 Amazon DocumentDB 执行失效转移并恢复实例时，恢复的实例保留在最初预置它的可用区中。但是，此实例的角色可能从主实例变为副本。这样做是为了防止出现以下情况：一系列失效转移可能导致所有实例位于同一可用区中。

您可以将 Amazon DocumentDB 副本指定为失效转移目标。即，如果主实例发生故障，指定的 Amazon DocumentDB 副本或某个层中的副本将提升为主实例。提升过程只造成短暂的中断，在此期间，对主实例发出的读写请求将失败，并且会出现异常。如果您的 Amazon DocumentDB 集群不包含任何 Amazon DocumentDB 副本，则会在主实例失败期间重新创建主实例。提升 Amazon DocumentDB 副本要比重新创建主实例快得多。

对于高可用性场景，建议您创建一个或多个 Amazon DocumentDB 副本。您的 Amazon DocumentDB 集群应该与主实例具有相同的实例类，并且位于不同可用区中。

有关更多信息，请参阅下列内容：
+ [了解 Amazon DocumentDB 集群容错能力](db-cluster-fault-tolerance.md)
+ [Amazon DocumentDB 失效转移](failover.md)
  + [控制失效转移目标](failover.md#failover-target_control)

### 全局集群可用性高
<a name="replication.high-availability.global-clusters"></a>

为了跨多个 AWS 区域 可用性高，您可以设置 [Amazon DocumentDB 全局集群](https://docs.aws.amazon.com/documentdb/latest/developerguide/global-clusters.html)。每个全球集群均跨越多个区域，可在跨 AWS 区域 中实现低延迟的全局读取以及从停机中进行灾难恢复。Amazon DocumentDB 自动处理从主区域到每个辅助区域的数据复制以及更新。

## 添加 副本
<a name="replication.adding-replicas"></a>

添加到集群的第一个实例是主实例。在第一个实例之后添加的每一个实例都是副本实例。除主实例之外，每个集群最多可拥有 15 个副本实例。

如果您使用 AWS 管理控制台 创建集群，则同时会自动创建主实例。创建集群和主实例的同时还要创建副本，请选择 **Create replica in different zone (在其他区域创建副本)**。有关更多信息，请参阅 [创建 Amazon DocumentDB 集群](db-cluster-create.md) 中的步骤 4.d。要将更多副本添加到 Amazon DocumentDB 集群，请参阅[向集群添加 Amazon DocumentDB 实例](db-instance-add.md) 。

在使用 AWS CLI 创建集群时，必须明确地创建主实例和副本实例。有关更多信息，请参阅以下主题的“使用 AWS CLI”部分：
+ [创建 Amazon DocumentDB 集群](db-cluster-create.md)
+ [向集群添加 Amazon DocumentDB 实例](db-instance-add.md)

# Amazon DocumentDB 失效转移
<a name="failover"></a>

在某些情况下，例如某些类型的计划维护，或出现不太可能出现的主节点或可用区故障时，Amazon DocumentDB（与 MongoDB 兼容）会检测故障并替换主节点。在故障转移期间，写入停机时间将最小化。因为主节点的角色故障转移到一个只读副本，而不是必须创建和设置新的主节点。此故障检测和副本提升可确保在提升完成后，您可以马上继续写入新的主节点。

要使失效转移起作用，您的集群必须至少具有两个实例——一个主实例和至少一个副本实例。

**注意**  
本主题仅适用于 Amazon DocumentDB 基于实例的原始集群。不适用于弹性集群或全局集群。

## 控制失效转移目标
<a name="failover-target_control"></a>

Amazon DocumentDB 提供失效转移层作为方法来控制在发生失效转移时，将哪个副本实例提升为主实例。

**故障转移层**  
每个副本实例都与一个失效转移层 (0—15) 关联。当因为维护或意外硬件故障而发生失效转移时，主实例将故障转移到具有最高优先级（最低编号层）的副本。如果多个副本具有相同的优先级层，则主实例将故障转移到大小与前主实例最接近的层的副本。

通过将一组选择副本的故障转移层设置为 `0`（最高优先级），可以确保故障转移将提升该组中的副本之一。您可以通过为特定副本分配低优先级层（编号高）来有效阻止这些副本在发生故障转移时被提升为主实例。当特定副本被应用程序大量使用并且故障转移到其中一个副本会对关键应用程序产生不利影响时，此方法很有用。

您可以在创建实例时或稍后通过修改实例来设置它的故障转移层。通过修改实例来设置实例故障转移不会触发故障转移。有关更多信息，请参阅以下主题：
+ [向集群添加 Amazon DocumentDB 实例](db-instance-add.md)
+ [修改 Amazon DocumentDB 实例](db-instance-modify.md)

手动启动故障转移时，可通过两种方法来控制将哪些副本实例提升为主实例：前面介绍的故障转移层和 `--target-db-instance-identifier` 参数。

**--`target-db-instance-identifier`**  
为了进行测试，您可以使用 `failover-db-cluster` 操作强制故障转移事件。您可以使用 `--target-db-instance-identifier` 参数指定将哪个副本实例提升为主实例。使用 `--target-db-instance-identifier` 参数取代故障转移优先级层。如果您不指定 `--target-db-instance-identifier` 参数，主故障转移将与故障转移优先级层保持一致。



## 失效转移过程中发生的事件
<a name="failover-what_happens"></a>

Amazon DocumentDB 将自动处理失效转移，以便应用程序尽快恢复数据库操作而无需管理干预。
+ 如果您在相同或不同的可用区中有 Amazon DocumentDB 副本实例，当进行故障转移时：Amazon DocumentDB 会翻转您的实例的规范名称记录（CNAME），以指向运行状态正常的副本；相应地，此副本会晋升为新的主实例。从开始到结束，故障转移通常会在 30 秒内完成。
+ 如果您没有 Amazon DocumentDB 副本实例（例如，单个实例集群）： Amazon DocumentDB 将尝试在与原始实例相同的可用区中创建新实例。原实例会尽量替换，但可能不会成功，例如出现全面影响该可用区的问题时。

您的应用程序应在连接丢失时重试数据库连接。

## 测试故障转移
<a name="failover-testing"></a>

集群的失效转移会将集群中的 Amazon DocumentDB 副本之一（只读实例）提升为主实例（集群写入器）。

当主实例发生故障时，Amazon DocumentDB 将自动故障转移到 Amazon DocumentDB 副本（如果存在）。当您要模拟主实例的故障以进行测试时，可以强制进行故障转移。集群中的每个实例都有自己的终端节点地址。因此，您需要在故障转移完成后清理并重新建立使用这些终端节点地址的任何现有连接。

要强制进行故障转移，请使用带以下参数的 `failover-db-cluster` 操作。
+ `--db-cluster-identifier` – 必填项。要进行故障转移的集群的名称。
+ `--target-db-instance-identifier`—可选。要提升为主实例的实例的名称。

**Example**  
以下操作将强制对 `sample-cluster` 集群进行故障转移。它不指定哪个实例要成为新的主实例，因此 Amazon DocumentDB 将根据失效转移层优先级来选择实例。  
对于 Linux、macOS 或 Unix：  

```
aws docdb failover-db-cluster \
   --db-cluster-identifier sample-cluster
```
对于 Windows：  

```
aws docdb failover-db-cluster ^
   --db-cluster-identifier sample-cluster
```
以下操作将强制 `sample-cluster` 集群进行故障转移，同时指定将 `sample-cluster-instance` 提升为主角色。（请注意输出中的 `"IsClusterWriter": true`。）  
对于 Linux、macOS 或 Unix：  

```
aws docdb failover-db-cluster \
   --db-cluster-identifier sample-cluster \
   --target-db-instance-identifier sample-cluster-instance
```
对于 Windows：  

```
aws docdb failover-db-cluster ^
   --db-cluster-identifier sample-cluster ^
   --target-db-instance-identifier sample-cluster-instance
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "DBCluster": {
        "HostedZoneId": "Z2SUY0A1719RZT",
        "Port": 27017,
        "EngineVersion": "3.6.0",
        "PreferredMaintenanceWindow": "thu:04:05-thu:04:35",
        "BackupRetentionPeriod": 1,
        "ClusterCreateTime": "2018-06-28T18:53:29.455Z",
        "AssociatedRoles": [],
        "DBSubnetGroup": "default",
        "MasterUsername": "master-user",
        "Engine": "docdb",
        "ReadReplicaIdentifiers": [],
        "EarliestRestorableTime": "2018-08-21T00:04:10.546Z",
        "DBClusterIdentifier": "sample-cluster",
        "ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com",
        "DBClusterMembers": [
            {
                "DBInstanceIdentifier": "sample-cluster-instance",
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "IsClusterWriter": true
            },
            {
                "DBInstanceIdentifier": "sample-cluster-instance-00",
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "IsClusterWriter": false
            },
            {
                "DBInstanceIdentifier": "sample-cluster-instance-01",
                "DBClusterParameterGroupStatus": "in-sync",
                "PromotionTier": 1,
                "IsClusterWriter": false
            }
        ],
        "AvailabilityZones": [
            "us-east-1b",
            "us-east-1c",
            "us-east-1a"
        ],
        "DBClusterParameterGroup": "default.docdb3.6",
        "Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com",
        "IAMDatabaseAuthenticationEnabled": false,
        "AllocatedStorage": 1,
        "LatestRestorableTime": "2018-08-22T21:57:33.904Z",
        "PreferredBackupWindow": "00:00-00:30",
        "StorageEncrypted": false,
        "MultiAZ": true,
        "Status": "available",
        "DBClusterArn": "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-12345678"
            }
        ],
        "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    }
}
```

## 复制滞后
<a name="troubleshooting.replication-lag"></a>

复制延迟通常为 50 毫秒或更短。副本延迟增长的最常见原因是：
+ 主服务器上高写入速率导致只读副本落后于主副本。
+ 长时间运行的查询（例如，大型顺序扫描、聚合查询）与传入性写入复制之间的只读副本争用。
+ 只读副本上有数目非常庞大的并发查询。

要最大限度减少复制延迟，请尝试以下故障排除技术：
+ 如果您的写入速率高或 CPU 使用率较高，我们建议您纵向扩展集群中的实例。
+ 如果您的只读副本上有长时间运行的查询，并且对正在查询的文档更新非常频繁，请考虑更改长时间运行的查询，或者针对主/写副本运行这些查询，以避免只读副本争用。
+ 如果只读副本上数目非常庞大的并发查询，或者仅只读副本上 CPU 使用率高，则另一种选项是横向扩展只读副本的数目以分散工作负载。
+ 由于复制延迟是高写入吞吐量和长时间运行查询的结果，因此我们建议将 dbClusterReplicalagMaximum CW 指标与慢速查询记录器和 `WriteThroughput`/`WriteIOPS` 指标结合使用，对复制延迟进行故障排除。

通常，我们建议您的所有副本都属于相同实例类型，从而群集失效转移将不导致性能下降。

如果您正在在纵向扩展与横向扩展（例如，六个较小实例与三个较大实例）之间选择，我们通常建议您在扩展之前尝试纵向扩展（较大实例），因为您将获得每个 DB 实例更大的缓冲区缓存。

您应该前瞻性设置复制延迟警报，并将其阈值设置成这样一个值，您认为该值是副本实例上您的数据在它开始影响应用程序的功能之前可以落后（或“过时”）多久的上限。通常，由于工作负载转瞬即逝，我们将建议报警之前复制延迟阈值应被超过几个数据点。

**注意**  
此外，我们建议您为超过 10 秒的复制延迟设置另一个警报。如果您超越这个阈值延续多个数据点，我们建议您纵向扩展您的实例或降低主实例上的写入吞吐量。

# 管理 Amazon DocumentDB 索引
<a name="managing-indexes"></a>

**Topics**
+ [Amazon DocumentDB 索引创建](#index-creation)
+ [维护 Amazon DocumentDB 索引](#maintaining-indexes)

## Amazon DocumentDB 索引创建
<a name="index-creation"></a>

在 Amazon DocumentDB 中创建索引需要做出一些决定：
+ 需要多久完成？
+ 在构建过程中无法访问该集合吗？
+ 一个实例的计算能力有多少可以分配给构建？
+ 应该创建什么类型的索引？

本节将帮助您回答这些问题，并提供用于在基于实例的集群集合上创建 Amazon DocumentDB 索引的命令和监控示例。

### 指南要求
<a name="indexing-guidelines"></a>

以下指南包括创建新索引时的基本限制和配置权衡：
+ **Amazon DocumentDB 版本支持** – 虽然所有版本的 Amazon DocumentDB 都支持单工作进程索引，但只有 Amazon DocumentDB 版本 4.0 和 5.0 支持多工作进程索引。
+ **性能权衡** - 在索引创建过程中增加工作进程数量会增加 Amazon DocumentDB 数据库主实例上的 CPU 利用率和读取 IO。创建新索引所需的资源将无法用于正在运行的工作负载。
+ **弹性集群** - Amazon DocumentDB 弹性集群不支持并行索引。
+ **最大工作进程** - 您可以配置的最大工作进程取决于数据库集群中主实例的大小。它是数据库集群主实例CPUs 上 v 总数的一半。例如，在具有 64 v 的 db.r6g.16xlarge 实例上，你最多可以运行 32 个工作程序。CPUs
**注意**  
2xlarge 及更低版本的实例类不支持并行工作进程。
+ **最少工作进程** - 您可以配置的最小工作进程为 1。在基于实例的集群上创建索引的默认设置是两个工作进程。但是，您可以使用“工作线程”选项将工作进程减少到一个。这将使用单工作进程运行该进程。
+ **索引压缩** - Amazon DocumentDB 不支持索引压缩。索引的数据大小可能比您使用其他选项时更大。
+ **索引多个集合**-数据库集群主实例CPUs 上的 v 的一半可用于配置好的工作线程对多个集合执行索引创建。
+ **索引类型** - 有关 Amazon DocumentDB 上支持的索引类型的完整说明，请参阅[此博客文章](https://aws.amazon.com/blogs/database/how-to-index-on-amazon-documentdb-with-mongodb-compatibility/)。

### 开始使用
<a name="index-build-get-started"></a>

要开始在集合上创建索引，请使用 `createIndexes` 命令。默认情况下，该命令将运行两个并行工作进程，可将索引创建过程的速度提高两倍。

例如，以下命令过程演示了如何为文档中的 “user\$1name” 字段创建索引，并将索引处理速度提至四个工作进程：

1. 在集群上使用两个并行工作进程创建索引：

   ```
   db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx"}]})
   ```

1. 要优化索引创建过程的速度，您可以使用 `db.runCommand createIndexes` 命令中的“工作线程”选项（`"workers":<number>`）指定工作进程数。

   将处理速度提至四个并行工作进程：

   ```
   db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
   ```
**注意**  
工作进程数越多，则索引创建速度越快。但是，工作线程数量增加得越多，主实例的 v CPUs 和读取 IO 的负载增加就越大。确保您的集群配置充足，足以应对增加的负担，不会使其他工作负载降级。

### 索引进度状态
<a name="index-build-status"></a>

索引创建过程的工作原理是初始化、扫描集合、排序键，最后通过索引生成器插入键。在前台运行时，该过程最多有六个阶段，在后台运行时，则最多有九个阶段。您可以逐阶段查看状态指标，例如完成百分比、扫描的存储块总数、已排序键和已插入键。

使用 mongo Shell 中的`db.currentOp()`命令监控索引过程进度。最后一个阶段的 100% 已完成表示所有索引都已成功创建：

```
db.currentOp({"command.createIndexes": { $exists : true } })
```

**注意**  
仅支持在 Amazon DocumentDB 5.0 上查看索引进度状态。

#### 索引构建类型
<a name="index-build-types"></a>

索引构建的四种类型是：
+ **前台** – 在创建索引之前，前台索引构建将阻止所有其他数据库操作。Amazon DocumentDB 前台构建由五个阶段组成。
+ **前台（唯一）**– 单个文档（唯一）前台索引构建将阻止其他数据库操作，例如常规前台构建。与基本前台构建不同，唯一构建使用额外的阶段（排序键 2）来查找重复的键。前台（唯一）构建由六个阶段组成。
+ **后台** – 后台索引构建允许创建索引时在前台运行其他数据库操作。Amazon DocumentDB 后台构建由八个阶段组成。
+ **后台（唯一）**– 单个文档（唯一）后台索引构建允许在创建索引时在前台运行其他数据库操作。与基本背景构建不同，唯一构建使用额外的阶段（排序键 2）来查找重复的键。后台（唯一）构建由九个阶段组成。

#### 索引构建阶段
<a name="index-build-stages"></a>


| 舞台 | 前台 | 前台（唯一） | 背景 | 背景（唯一） | 
| --- | --- | --- | --- | --- | 
|  INITIALIZING  |  1  |  1  |  1  |  1  | 
|  构建索引：初始化  |  2  |  2  |  2  |  2  | 
|  构建索引：扫描集合  |  3  |  3  |  3  |  3  | 
|  构建索引：排序键 1  |  4  |  4  |  4  |  4  | 
|  构建索引：排序键 2  |    |  5  |    |  5  | 
|  构建索引：插入键  |  5  |  6  |  5  |  6  | 
|  验证：扫描索引  |    |    |  6  |  7  | 
|  验证：排序元组  |    |    |  7  |  8  | 
|  验证：扫描集合  |    |    |  8  |  9  | 
+ **正在初始化** - createIndex 正在准备索引生成器。该阶段应该非常短暂。
+ **构建索引：正在初始化** - 索引生成器正在准备创建索引。该阶段应该非常短暂。
+ **构建索引：扫描集合** - 索引生成器正在执行集合扫描以收集索引秘钥。测量单位是“块”。
**注意**  
如果为索引构建配置了多个工作进程，则在此阶段将显示该工作进程。“扫描集合”阶段是在索引构建过程中使用多个工作进程的唯一阶段。所有其他阶段将显示单工作进程。
+ **构建索引：排序键 1** - 索引生成器正在排序已收集的索引键。测量单位是“键”。
+ **构建索引：排序键 2** - 索引生成器正在对收集的与死元组相对应的索引键进行排序。此阶段仅适用于唯一索引构建。测量单位是“键”。
+ **构建索引：插入键** - 索引生成器正在将索引键插入到新索引中。测量单位是“键”。
+ **验证：扫描索引** - createIndex 正在扫描索引以查找需要验证的键。测量单位是“块”。
+ **验证：排序元组** - createIndex 正在排序索引扫描阶段的输出。
+ **验证：扫描集合** - CreateIndex 正在扫描集合以验证在前两个阶段中找到的索引键。测量单位是“块”。

#### 索引构建输出示例
<a name="w2aac33c19b5c13c15"></a>

在如下输出示例（前台索引构建）中，显示了索引创建的状态。“msg”字段通过指示构建的阶段和完成百分比来汇总构建进度。“工作进程”字段表示在该索引构建阶段使用的工作进程数。“进度”字段显示用于计算完成百分比的实际数字。

**注意**  
亚马逊 DocumentDB 版本 4.0 不支持 “currentIndexBuild姓名”、“消息” 和 “进度” 字段。

```
{
    "inprog" : [{
    … 
        "command": {
            "createIndexes": "test",
            "indexes": [{
                "v": 2,
                "key": {
                    "user_name": 1
                },
                "name": "user_name_1"
            }],
            "lsid": {
                "id": UUID(“094d0fba-8f41-4373-82c3-7c4c7b5ff13b”)
            },
            "$db": "test"
        },
        "currentIndexBuildName": user_name_1,
        "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%",
        "workers": 1,
        "progress": {
            "done": 656861,
            "total": 1003520
        },
    … 
    ],
 
    "ok" : 1
}
```

## 维护 Amazon DocumentDB 索引
<a name="maintaining-indexes"></a>

**Topics**
+ [索引膨胀](#db-index-bloat)
+ [使用 `reIndex` 进行索引维护](#reIndex)

### 索引膨胀
<a name="db-index-bloat"></a>

Amazon DocumentDB 使用多版本并发控制（MVCC）来管理并发事务。删除或更新文档后，其先前版本将作为“失效”版本保留在集合和索引中。垃圾回收过程会自动从这些失效版本中回收空间以用于未来的操作。

当集合的索引因失效或过时的索引条目累积或页面内的碎片累积而变大时，就会出现索引膨胀。报告的百分比表示未来索引条目可以使用的索引空间量。此膨胀会同时消耗缓冲区缓存和存储空间中的空间。如果要消除膨胀，则需要重建索引。

**Example 示例**  
运行以下命令以确定索引未使用的存储空间：  

```
db.coll.aggregate({$indexStats:{}});
```
结果类似如下：  

```
{ 
    "name" : "_id_",
    "key" : { 
        "_id" : 1 
    },
    "host" : "devbox-test.localhost.a2z.com:27317",
    "size" : NumberLong(827392),
    "accesses" : {
        "ops" : NumberLong(40000),
        "docsRead" : NumberLong(46049),
        "since" : ISODate("2025-04-03T21:44:51.251Z") 
    },
    "cacheStats" : {
        "blksRead" : NumberLong(264),
        "blksHit" : NumberLong(140190),
        "hitRatio" : 99.8121
    }, 
    "unusedStorageSize" : {
        "unusedSizeBytes" : 409600,
        "unusedSizePercent" : 49.51
    }
}
```

使用 `reIndex` 命令无需停机即可重建索引，该命令需要扫描整个集合。请参阅[使用 `reIndex` 进行索引维护](#reIndex)。

### 使用 `reIndex` 进行索引维护
<a name="reIndex"></a>

`reIndex` 是用于重建索引的命令。通常在索引损坏或效率低下时使用。随着时间的推移，索引会因为多次更新、插入或删除而积累未使用的空间，从而导致性能下降。重新编制索引有助于删除此类未使用的空间并恢复索引的效率。

#### `reIndex` 准则
<a name="w2aac33c19b7b7b5"></a>
+ `reIndex` 目前仅在 Amazon DocumentDB 5.0 上受支持。
+ Amazon DocumentDB 支持在后台进行单个索引的 `reindex`，以便多个工作人员操作。在 `reIndex` 程序运行时，查询可以使用旧索引。
+ Amazon DocumentDB 支持通过 `currentOp` 发布索引进度报告。您可以看到与创建索引时看到的 [索引构建阶段](#index-build-stages) 类似的索引构建阶段。唯一的区别是 `reIndex` 始终有八个阶段，无论它是否唯一。没有“构建索引：排序键 2”阶段。
+ `reIndex` 可以与同一个集合上的任何命令同时运行，但与索引相关的下列命令除外：`createIndexes`、`dropIndexes`、`collMod` 和 `renameCollection`。
+ `reIndex` 目前不支持文本索引、地理空间索引、向量索引和部分索引。

##### `reIndex` 构建
<a name="w2aac33c19b7b7b5b5"></a>

使用以下命令来重建索引：

```
db.runCommand({ reIndex: "collection-name", index: "index-name"})
```

您也可以选择控制分配给重建过程的工作人员的人数：

```
db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })
```

# 管理集合级文档压缩
<a name="doc-compression"></a>

Amazon DocumentDB 5.0 馆藏级文档压缩允许您通过压缩馆藏中的文档来降低存储和 IO 成本。您可以在集合层面启用文档压缩，并通过用压缩指标（例如已压缩文档的存储大小和压缩状态）衡量存储增益，根据需要查看压缩指标。亚马逊 DocumentDB 5.0 使用 LZ4 压缩算法来压缩文档。

Amazon DocumentDB 从版本 5.0 开始支持文档压缩。以下是集合级文档压缩功能：
+ **默认行为**-5.0 集群上新集合的默认压缩设置由群集参数确定`default_collection_compression`。默认情况下，该参数设置为“禁用”。
+ **压缩现有集合** - 可以使用 `collMod` 命令更改现有集合的压缩设置。
+ **更改压缩阈值** - 默认压缩阈值为 2 KB。可以使用 `createCollection` 命令为新集合指定此值，也可以使用 `collMod` 命令为现有集合更改此值。

**注意**  
Amazon DocumentDB 版本 3.6 和 4.0 不支持 Amazon DocumentDB 文档压缩。

**Topics**
+ [管理文档压缩](#manage-compression)
+ [监控文档压缩](#monitoring-compression)

## 管理文档压缩
<a name="manage-compression"></a>

### 在集合中启用文档压缩
<a name="enabling-collection-compression"></a>

使用`db.createCollection()`以下方法在 Amazon DocumentDB 5.0 上创建馆藏时启用文档压缩：

```
db.createCollection( sample_collection,{
    storageEngine : {
        documentDB: {
            compression:{enable: <true | false>}
        }
    }
})
```

### 在集群中启用文档压缩
<a name="enabling-cluster-compression"></a>

默认情况下，可以通过将集群参数 `default_collection_compression` 设置为“启用”，为所有新集合启用集群级的文档压缩。当此参数设置为“启用”时，集群上新创建的集合将默认启用压缩功能，压缩阈值为 2 KB。

### 压缩现有集合
<a name="compress-existing-collections"></a>

您还可以使用 `collMod` 操作并指定以下 `storageEngine` 配置来修改现有集合的压缩设置。请注意，使用此命令所做的更改仅适用于新 inserted/updated 文档，以前插入的文档的压缩效果不会改变。

```
db.runCommand({ 
    collMod: "orders", 
    storageEngine: { 
        documentDB: {compression: {enable: <true | false>} }
    }
})
```

### 设置压缩阈值
<a name="set-compression-threshold"></a>

在默认情况下，压缩集合的压缩阈值为 2032 字节。在创建一个启用压缩的新集合时，可以在 `createCollection` 命令中设置此阈值：

```
db.createCollection( sample_collection, {
    storageEngine : {
        documentDB: {
            compression: {
                enable: true,
                threshold: <128 - 8000>
            }
        }
    }
})
```

您还可以使用 `collMod` 操作并指定以下 `storageEngine` 配置来修改现有压缩集合的压缩阈值：

```
db.runCommand({ 
    collMod: "orders", 
    storageEngine: { 
        documentDB: {
            compression: {
                enable: true,
                threshold: <128 - 8000>
            }
        }
    }
})
```

请注意，压缩阈值只能设置为 128 和 8000 字节之间的值。此外，在指定压缩阈值时，`enable` 选项需要设置为“true”。

## 监控文档压缩
<a name="monitoring-compression"></a>

您可以检查某集合是否已压缩如下计算其压缩率。

通过运行来自 mongo Shell 的 `db.printCollectionStats()` 或 `db.collection.stats()` 命令查看压缩统计量。输出向您显示原始大小和压缩后的大小，您可以比较这些大小来分析来自文档压缩的存储增益。在此示例中，集合“sample\$1collection”的统计量显示如下：下面使用 1024\$11024 的缩放因子来输出 `size` 和 `storageSize` 值，单位为 MB。

```
db.sample_collection.stats(1024*1024)
```

以下是上述命令的输出示例：

```
{
    "ns" : "test.sample_collection",
    "count" : 1000000,
    "size" : 3906.3,
    "avgObjSize" : 4096,
    "storageSize" : 1953.1, 
    compression:{"enabled" : true,"threshold" : 2032},
    ...
}
```
+ **大小** -文档集合原始大小。
+ **avgObjSize**-压缩前的平均文档大小四舍五入到小数点后第一位。计量单位是字节。
+ **storageSize** - 压缩后集合的存储空间大小。计量单位是字节。
+ **启用** - 指示压缩是启用还是禁用。

要计算实际压缩率，请将集合大小除以存储空间大小（大小/storageSize）。对于以上示例，计算结果为 3906.3/1953.1，这转换成 2:1 压缩率。

# 在 Amazon DocumentDB 8.0 中管理基于字典的压缩
<a name="dict-compression"></a>

Amazon DocumentDB 8.0 引入了一种新的文档压缩算法 zstd，作为一种改进的替代算法。 LZ4当您通过选择 Zstd 作为压缩算法对 Amazon DocumentDB 8.0 集合启用字典压缩时，将对您的馆藏中的文档进行采样以创建自定义压缩字典。使用此字典和 zstd 算法压缩新的和更新的文档。与标准压缩方法相比，这种方法通常可以实现更高的压缩率，特别是对于具有一致文档架构或重复字段名的集合。

Lz4 是一种专为快速压缩和解压缩而设计的算法。众所周知，它对CPU的影响很小，同时可以实现明显的压缩。Zstd 是一种通用算法，在默认设置下，它会消耗更多的 CPU，但压缩率比 lz4 更好。字典的使用进一步提高了大多数 JSON 文档的压缩率。Zstd 算法的一些优点是：
+ 降低存储成本：更高的压缩比意味着更少的存储使用量和更低的成本。
+ 较低I/O: Compressed documents require less I/O，可能会提高性能。
+ 针对您的馆藏进行了优化：该词典是专门针对您的馆藏的数据模式进行训练的。

**注意**  
亚马逊 DocumentDB 3.6、4.0 和 5.0 版本不支持基于字典的压缩。

## 性能注意事项
<a name="perf-considerations"></a>

Zstd 压缩涉及以下权衡：
+ 存储与 CPU：Zstd 压缩可实现更好的压缩率，但与 LZ4 压缩相比，使用的 CPU 资源可能会稍多一些。
+ 初始压缩：在插入足够的文档来训练有效的字典之前，新集合可能无法实现最佳压缩。当前，如果字典集合了至少 100 个文档，则会对其进行训练。
+ 工作负载类型：由于解压缩开销，所有数据都存入缓冲区缓存的读取密集型工作负载可能会增加延迟和 CPU 使用率。

Zstd 压缩对于包含小型文档、文档数组和重复字段名的集合特别有效。

## 启用基于字典的压缩
<a name="enabling-zstd"></a>

对于新的集合，您可以使用以下命令启用 Zstd 压缩：

```
db.createCollection("myCollection", 
    { 
        storageEngine: { 
            documentDB: { 
                compression: {
                    enable: true,
                    algorithm: "zstd"
                } 
            }
        }
    }
 )
```

您也可以对现有集合启用或修改压缩：

```
db.runCommand({ 
    collMod: "myCollection", 
    storageEngine: { 
        documentDB: { 
            compression: {
                enable: true,
                algorithm: "zstd"
            } 
        }
    }
 })
```

要在集群上的所有集合中启用 Zstd 算法，您可以修改集群参数组以选择 “zstd” 作为参数 “default\$1collection\$1compression” 的值。

## 开始使用
<a name="getting-started"></a>

亚马逊 DocumentDB 8.0 默认开启了 Zstd 压缩。您可以随时通过在集群参数组中将 “default\$1compression” 的值设置为禁用来将其关闭。必须注意的是，从 Amazon DocumentDB 8.0 开始，“启用” 不再是默认压缩的有效选择，您必须从 Zstd 和中进行选择。 LZ4

## 监控
<a name="monitoring"></a>

您可以使用以下命令之一查看集合的压缩信息：
+ db.runCommand (\$1collstats: “myCollection”\$1) 或
+ db.collection.stats ()

以下命令返回可用于计算压缩率的密钥统计信息：
+ compression.algorith：使用的算法（“lz4” 或 “zstd”）
+ 存储大小：压缩后集合使用的实际存储空间。请注意，此数字包括碎片（即数据库页面中未使用的空间）
+ avgObjSize：解压缩后的馆藏文档的平均逻辑大小。请注意，如果您的馆藏包含超过 2 万个文档，则此数字将是基于 2 万个文档样本的近似值。
+ size：未压缩的集合的逻辑大小。该数字是 avgObjSize 通过乘以集合中的文档总数得出的，因此，如果 avgObjSize 是近似值，则该数字也将是近似值。
+ count：馆藏中的文档数 

在评估基于字典的压缩时，以下 CloudWatch 指标可能会有所帮助：
+ CPUUtilization
+ FreeableMemory
+ VolumeBytesUsed
+ VolumeReadIOPs
+ VolumeWriteIOPs

CollStats 指标：
+ storageSize
+ size

此外，跟踪特定于您的应用程序的指标（例如延迟和每种查询类型或 API 的吞吐量）也很有用。

# 管理 Amazon DocumentDB 事件
<a name="managing-events"></a>

Amazon DocumentDB（与 MongoDB 兼容）记录与集群、实例、快照、安全组和集群参数组相关的事件。此信息包含事件的日期和时间、事件的源名称和源类型以及一条与事件相关的消息。

**重要**  
对于某些管理功能，Amazon DocumentDB 使用与 Amazon RDS 和 Amazon Neptune 共享的操作技术。区域限制是指在区域级别管理，在 Amazon DocumentDB、Amazon RDS 和 Amazon Neptune 之间共有的限制。有关更多信息，请参阅 [区域配额](limits.md#limits-regional_quotas)。

**Topics**
+ [查看 Amazon DocumentDB 事件类别](#viewing-event-categories)
+ [查看 Amazon DocumentDB 事件](#viewing-events)

## 查看 Amazon DocumentDB 事件类别
<a name="viewing-event-categories"></a>

每种 Amazon DocumentDB 资源类型具有与其关联的特定类型的事件。您可以使用 AWS CLI `describe-event-categories` 操作查看事件类型和 Amazon DocumentDB 资源类型之间的映射。

**参数**
+ **--source-type**—可选。可以使用 `--source-type` 参数查看特定源类型的事件类别。以下是允许的值：
  + `db-cluster`
  + `db-instance`
  + `db-parameter-group`
  + `db-security-group`
  + `db-cluster-snapshot`
+ **--filters**—可选。要仅查看 Amazon DocumentDB 的事件类别，请使用筛选器 `--filter Name=engine,Values=docdb`。

**Example**  
以下代码列出了与集群关联的事件类别。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-event-categories \
    --filter Name=engine,Values=docdb \
    --source-type db-cluster
```
对于 Windows：  

```
aws docdb describe-event-categories ^
    --filter Name=engine,Values=docdb ^
    --source-type db-cluster
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "EventCategoriesMapList": [
        {
            "EventCategories": [
                "notification",
                "failure",
                "maintenance",
                "failover"
            ],
            "SourceType": "db-cluster"
        }
    ]
}
```
以下代码列出了与每种 Amazon DocumentDB 源类型关联的事件类别。  

```
aws docdb describe-event-categories
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "EventCategoriesMapList": [
        {
            "SourceType": "db-instance",
            "EventCategories": [
                "notification",
                "failure",
                "creation",
                "maintenance",
                "deletion",
                "recovery",
                "restoration",
                "configuration change",
                "read replica",
                "backtrack",
                "low storage",
                "backup",
                "availability",
                "failover"
            ]
        },
        {
            "SourceType": "db-security-group",
            "EventCategories": [
                "configuration change",
                "failure"
            ]
        },
        {
            "SourceType": "db-parameter-group",
            "EventCategories": [
                "configuration change"
            ]
        },
        {
            "SourceType": "db-cluster",
            "EventCategories": [
                "notification",
                "failure",
                "maintenance",
                "failover"
            ]
        },
        {
            "SourceType": "db-cluster-snapshot",
            "EventCategories": [
                "backup"
            ]
        }
    ]
}
```

## 查看 Amazon DocumentDB 事件
<a name="viewing-events"></a>

您可通过 Amazon DocumentDB 控制台（显示过去 24 小时的事件）检索 Amazon DocumentDB 资源的事件。您还可以通过使用 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/docdb/describe-events.html) AWS CLI 命令或 [DescribeEvents](https://docs.aws.amazon.com/documentdb/latest/developerguide/API_DescribeEvents.html) Amazon DocumentDB API 操作来检索 Amazon DocumentDB 资源的事件。如果您使用 AWS CLI 或 Amazon DocumentDB API 查看事件，则可检索长达过去 14 天的事件。

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

**查看过去 24 小时的所有 Amazon DocumentDB 实例事件**

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

1. 在导航窗格中，选择 **Events (事件)**。列表中显示可用的事件。

1. 使用 **Filter (筛选条件)** 列表按类型筛选事件。在文本框中输入期限以进一步筛选结果。例如，以下屏幕截图显示针对*快照*事件筛选所有 Amazon DocumentDB 事件。  
![\[显示为快照筛选事件的事件部分的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/events-filtering.png)

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

**查看过去 7 天的所有 Amazon DocumentDB 实例事件**  
通过使用 [describe-events](https://docs.aws.amazon.com/cli/latest/reference/docdb/describe-events.html) AWS CLI 命令并将 `--duration` 参数设置为 `10080` （10,080 分钟），您可查看过去 7 天的所有 Amazon DocumentDB 实例事件。

```
aws docdb describe-events --duration 10080
```

**筛选 Amazon DocumentDB 事件**

要查看特定 Amazon DocumentDB 事件，请使用带有以下参数的 `describe-events` 操作。

**参数**
+ **--filter**—必需，用于限制 Amazon DocumentDB 事件的返回值。使用 **Name=engine,Values=docdb** 仅筛选 Amazon DocumentDB 的所有事件。
+ **--source-identifier**—可选。为其返回事件的事件源的标识符。如果省略，则在结果中包含来自所有源的事件。
+ **--source-type**—可选，除非提供 `--source-identifier`，则为必需。如果提供 `--source-identifier`，则 `--source-type` 必须与 `--source-identifier` 的类型一致。以下是允许的值：
  + `db-cluster`
  + `db-instance`
  + `db-parameter-group`
  + `db-security-group`
  + `db-cluster-snapshot`

以下示例列出您的所有 Amazon DocumentDB 事件。

```
aws docdb describe-events --filters Name=engine,Values=docdb
```

此操作的输出将类似于下文（JSON 格式）。

```
{
    "Events": [
        {
            "SourceArn": "arn:aws:rds:us-east-1:123SAMPLE012:db:sample-cluster-instance3",
            "Message": "instance created",
            "SourceType": "db-instance",
            "Date": "2018-12-11T21:17:40.023Z",
            "SourceIdentifier": "sample-cluster-instance3",
            "EventCategories": [
                "creation"
            ]
        },
        {
            "SourceArn": "arn:aws:rds:us-east-1:123SAMPLE012:db:docdb-2018-12-11-21-08-23",
            "Message": "instance shutdown",
            "SourceType": "db-instance",
            "Date": "2018-12-11T21:25:01.245Z",
            "SourceIdentifier": "docdb-2018-12-11-21-08-23",
            "EventCategories": [
                "availability"
            ]
        },
        {
            "SourceArn": "arn:aws:rds:us-east-1:123SAMPLE012:db:docdb-2018-12-11-21-08-23",
            "Message": "instance restarted",
            "SourceType": "db-instance",
            "Date": "2018-12-11T21:25:11.441Z",
            "SourceIdentifier": "docdb-2018-12-11-21-08-23",
            "EventCategories": [
                "availability"
            ]
        }
    ]
}
```

------

有关更多信息，请参阅 [审核 Amazon DocumentDB 事件](event-auditing.md)。

# 选择区域和可用区
<a name="regions-and-azs"></a>

Amazon 云计算资源在全球多个位置托管。这些位置包括 AWS 区域 和可用区。每个 *AWS 区域* 都是一个单独的地理区域。每个区域都有多个相互隔离的位置，称为*可用区*。借助 Amazon DocumentDB，您可以将资源（如实例）和数据放置在多个位置。 AWS 区域 除非你特别这样做，否则资源不会被复制到其他地方。

Amazon 运行着具有高可用性的高级数据中心。数据中心有时会发生影响托管于同一位置的所有实例的可用性的故障，虽然这种故障极少发生。如果您将所有实例都托管在受此类故障影响的同一个位置，则您的所有实例都将不可用。下图显示了 AWS 区域 具有三个可用区域的。

![\[此表包含三个可用区的区域 a、b 和 c。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/RegionsAndAZs.png)


需要牢记的是，每个区域都是独立的，这一点非常重要。您启动的任何 Amazon DocumentDB 活动（例如创建实例或列出可用实例）都只会在您当前的默认 AWS 区域运行。您可以通过设置 `EC2_REGION` 环境变量在控制台上更改默认区域。或者，通过使用 AWS CLI中的 `--region` 参数进行覆盖。有关更多信息，请参阅[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)（具体 AWS Command Line Interface而言）有关环境变量和命令行选项的部分。

当您使用 Amazon DocumentDB 控制台创建集群并选择在不同的可用区中创建副本时，Amazon DocumentDB 会创建两个实例。它在一个可用区中创建主实例，在另一个可用区中创建副本实例。集群卷始终跨三个可用区复制。

要创建或使用特定的 Amazon DocumentDB 实例 AWS 区域，请使用相应的区域服务终端节点。

## 区域可用性
<a name="regions-and-azs-availability"></a>

亚马逊 DocumentDB 可在以下 AWS 区域使用。

**Amazon DocumentDB 支持的区域**


| 区域名称 | Region | 可用区（计算） | 
| --- | --- | --- | 
| 美国东部（俄亥俄州） | `us-east-2` | 3 | 
| 美国东部（弗吉尼亚州北部） | `us-east-1` | 6 | 
| 美国西部（俄勒冈州） | `us-west-2` | 4 | 
| 非洲（开普敦） | `af-south-1` | 3 | 
| 南美洲（圣保罗） | `sa-east-1` | 3 | 
| 亚太地区（香港） | `ap-east-1` | 3 | 
| 亚太地区（海得拉巴） | `ap-south-2` | 3 | 
| 亚太地区（马来西亚） | `ap-southeast-5` | 3 | 
| 亚太地区（孟买） | `ap-south-1` | 3 | 
| 亚太地区（大阪） | `ap-northeast-3` | 3 | 
| 亚太地区（首尔） | `ap-northeast-2` | 4 | 
| 亚太地区（新加坡） | `ap-southeast-1` | 3 | 
| 亚太地区（悉尼） | `ap-southeast-2` | 3 | 
| 亚太地区（雅加达） | `ap-southeast-3` | 3 | 
| 亚太地区（墨尔本） | `ap-southeast-4` | 3 | 
| 亚太地区（泰国） | `ap-southeast-7` | 3 | 
| 亚太地区（东京） | `ap-northeast-1` | 3 | 
| 加拿大（中部） | `ca-central-1` | 3 | 
| 中国（北京）区域 | `cn-north-1` | 3 | 
| 中国（宁夏） | `cn-northwest-1` | 3 | 
| 欧洲地区（法兰克福） | `eu-central-1` | 3 | 
| 欧洲（苏黎世） | `eu-central-2` | 3 | 
| 欧洲地区（爱尔兰） | `eu-west-1` | 3 | 
| 欧洲地区（伦敦） | `eu-west-2` | 3 | 
| 欧洲地区（米兰） | `eu-south-1` | 3 | 
| 欧洲地区（巴黎） | `eu-west-3` | 3 | 
| 欧洲（西班牙） | `eu-south-2` | 3 | 
| 欧洲地区（斯德哥尔摩） | `eu-north-1` | 3 | 
| 墨西哥（中部） | `mx-central-1` | 3 | 
| 中东（阿联酋）： | `me-central-1` | 3 | 
| 以色列（特拉维夫） | `il-central-1` | 3 | 
| AWS GovCloud （美国西部） | `us-gov-west-1` | 3 | 
| AWS GovCloud （美国东部） | `us-gov-east-1` | 3 | 

默认情况下，Amazon DocumentDB 数据库群集的时区是协调世界时 (UTC)。

有关查找特定区域中集群和实例的连接端点的信息，请参阅[了解 Amazon DocumentDB 端点](endpoints.md)。

# 管理 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups"></a>

您可以通过使用集群参数组中的参数来管理 Amazon DocumentDB 引擎配置。*集群参数组*是 Amazon DocumentDB 配置值的集合，这个集合让管理 Amazon DocumentDB 集群的参数更轻松。集群参数组就像是引擎配置值的容器，这些值可应用于集群中的所有实例。

本节介绍如何创建、查看和修改集群参数组。它还介绍了您可以怎样确定哪个集群参数组与给定集群关联。

**Topics**
+ [描述集群参数组](cluster_parameter_groups-describe.md)
+ [创建集群参数组](cluster_parameter_groups-create.md)
+ [修改集群参数组](cluster_parameter_groups-modify.md)
+ [修改集群以使用自定义的集群参数组](cluster_parameter_groups-modify_clusters.md)
+ [复制集群参数组](cluster_parameter_groups-copy.md)
+ [重置集群参数组](cluster_parameter_groups-reset.md)
+ [删除集群参数组](cluster_parameter_groups-delete.md)
+ [集群参数参考](cluster_parameter_groups-list_of_parameters.md)

# 描述 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-describe"></a>

当您在新区域创建第一个 Amazon DocumentDB 集群或使用新引擎时，`default` 集群参数组自动创建。在同一区域创建且具有相同引擎版本的后续集群将以 `default` 集群参数组创建。

**Topics**
+ [描述集群参数组详情](#cluster_parameter_groups-describe_details)
+ [确定集群的参数组](#cluster_parameter_groups-determine)
+ [确定与集群参数组关联的集群和实例](#cluster_parameter_groups-count)

## 描述 Amazon DocumentDB 集群参数组详情
<a name="cluster_parameter_groups-describe_details"></a>

要描述给定群集参数组的详细信息，请使用 AWS 管理控制台 或 AWS Command Line Interface (AWS CLI) 完成以下步骤。

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

****

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在**集群参数组**窗格中，选择要查看其详细信息的参数组的名称。

1. 所得页面显示参数组的参数、最近活动和标签。
   + 在**集群参数**下，您可以看到该参数的名称、当前值、允许值、该参数是否可修改、其应用值、数据类型和描述。您可以修改各个参数，方法是：选择该参数，然后在**集群参数**部分，选择**编辑**。有关更多信息，请参阅 [修改 Amazon DocumentDB 集群参数](cluster_parameter_groups-parameters.md)。
   + 在**近期事件**下，您可以看到该参数组的最新事件。您可以使用本部分的搜索栏筛选这些事件。有关更多信息，请参阅 [管理 Amazon DocumentDB 事件](managing-events.md)。
   + 在 **Tags (标签)**下，您可以看到此集群参数组上的标签。您可以通过在**标签**部分选择**编辑**来添加或移除标签。有关更多信息，请参阅 [标记 Amazon DocumentDB 资源](tagging.md)。

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

您可以使用`describe-db-cluster-parameter-groups` AWS CLI 命令查看您为 Amazon DocumentDB 拥有的单个集群参数组或所有集群参数组的亚马逊资源名称 (ARN)、系列、描述和名称。您还可以使用`describe-db-cluster-parameters` AWS CLI 命令查看单个集群参数组中的参数及其详细信息。
+ **--describe-db-cluster-parameter-groups**：查看所有集群参数组的列表及其详细信息。
  + **--db-cluster-parameter-group-name**：可选。您想描述的集群参数组的名称。如果忽略此参数，则将描述所有集群参数组。
+ **--describe-db-cluster-parameters**：列出参数组中的所有参数及其值。
  + **--db-cluster-parameter-group name**：必需。您想描述的集群参数组的名称。

**Example**  
以下代码列出了最多 100 个集群参数组及其 ARN、族、描述和名称。  

```
aws docdb describe-db-cluster-parameter-groups
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
          "DBClusterParameterGroups": [
              {
                  "DBClusterParameterGroupArn": "arn:aws:rds:us-east-1:012345678912:cluster-pg:default.docdb4.0",
                  "DBParameterGroupFamily": "docdb4.0",
                  "Description": "Default cluster parameter group for docdb4.0",
                  "DBClusterParameterGroupName": "default.docdb4.0"
              },
              {
                  "DBClusterParameterGroupArn": "arn:aws:rds:us-east-1:012345678912:cluster-pg:sample-parameter-group",
                  "DBParameterGroupFamily": "docdb4.0",
                  "Description": "Custom docdb4.0 parameter group",
                  "DBClusterParameterGroupName": "sample-parameter-group"
              }
          ]
}
```

**Example**  
以下代码列出了 `sample-parameter-group` 的 ARN、族、描述和名称。  
对于 Linux、macOS 或 Unix：  

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

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

```
{
          "DBClusterParameterGroups": [
              {
                  "DBClusterParameterGroupArn": "arn:aws:rds:us-east-1:123456789012:cluster-pg:sample-parameter-group",
                  "Description": "Custom docdb4.0 parameter group",
                  "DBParameterGroupFamily": "docdb4.0",
                  "DBClusterParameterGroupName": "sample-parameter-group"
              }
          ]
}
```

**Example**  
以下代码列出了 `sample-parameter-group` 中参数的值。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-cluster-parameters \
    --db-cluster-parameter-group-name sample-parameter-group
```
对于 Windows：  

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

```
{
   "Parameters": [
         {
            "ParameterName": "audit_logs",
            "ParameterValue": "disabled",
            "Description": "Enables auditing on cluster.",
            "Source": "system",
            "ApplyType": "dynamic",
            "DataType": "string",
            "AllowedValues": "enabled,disabled",
            "IsModifiable": true,
            "ApplyMethod": "pending-reboot"
         },
         {
            "ParameterName": "change_stream_log_retention_duration",
            "ParameterValue": "17777",
            "Description": "Duration of time in seconds that the change stream log is retained and can be consumed.",
            "Source": "user",
            "ApplyType": "dynamic",
            "DataType": "integer",
            "AllowedValues": "3600-86400",
            "IsModifiable": true,
            "ApplyMethod": "pending-reboot"
         }
   ]
}
```

------

## 确定 Amazon DocumentDB 集群的参数组
<a name="cluster_parameter_groups-determine"></a>

要确定哪个参数组与特定集群相关联，请使用 AWS 管理控制台 或完成以下步骤 AWS CLI。

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

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在左侧导航窗格中，选择**集群**。

1. 从集群列表中，选择您感兴趣的集群的名称。

1. 生成的页面将显示所选集群的详细信息。向下滚动到 **Cluster details (集群详细信息)**。在此部分的底部，在 **Cluster parameter group (集群参数组)** 的下方找到参数组的名称。  
![\[屏幕截图：显示集群的参数组。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-determine-parameter-group.png)

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

以下 AWS CLI 代码确定哪个参数组正在控制集群`sample-cluster`。

```
aws docdb describe-db-clusters \
      --db-cluster-identifier sample-cluster \
      --query 'DBClusters[*].[DBClusterIdentifier,DBClusterParameterGroup]'
```

此操作的输出将类似于下文（JSON 格式）。

```
[
       [
           "sample-cluster",
           "sample-parameter-group"
       ]
]
```

------

## 确定与 Amazon DocumentDB 集群参数组关联的集群和实例
<a name="cluster_parameter_groups-count"></a>

要确定与每个参数组关联的集群和实例数量，请使用完成以下步骤 AWS CLI。

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

以下 AWS CLI 代码确定了与多少集群和实例相关联`sample-parameter-group`。

对于 Linux、macOS 或 Unix：

```
aws docdb describe-db-clusters \
      --query 'DBClusters[*].[DBClusterParameterGroup,DBClusterIdentifier,DBClusterMembers[*].DBInstanceIdentifier]' \
      --output json | \
      jq -r 'group_by(.[0]) | map({
         parameter_group_name: .[0][0],
         total_clusters: length,
         total_instances: map(.[2] | length) | add // 0
      }) | .[]'
```

对于 Windows：

```
aws docdb describe-db-clusters ^
      --query 'DBClusters[*].[DBClusterParameterGroup,DBClusterIdentifier,DBClusterMembers[*].DBInstanceIdentifier]' ^
      --output json | ^
      jq -r 'group_by(.[0]) | map({
         parameter_group_name: .[0][0],
         total_clusters: length,
         total_instances: map(.[2] | length) | add // 0
      }) | .[]'
```

此操作的输出将类似于下文（JSON 格式）。

```
{
   "parameter_group_name": "sample-parameter-group",
   "total_clusters": 50,
   "total_instances": 150
}
```

------

# 创建 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-create"></a>

当您使用新引擎版本和在新区域创建集群时创建的默认集群参数组，例如 `default.docdb5.0`、`default.docdb4.0` 或 `default.docdb3.6`。在此区域创建且具有相同引擎版本的后续集群将继承 `default` 集群参数组。一经创建，`default` 参数组就无法删除或重命名。您可以通过创建带有首选参数值的自定义参数组并将其附加到 Amazon DocumentDB 集群来修改集群实例的引擎行为。

以下过程指导您完成集群参数组的创建。然后，您可以[修改该参数组中的参数](https://docs.aws.amazon.com//documentdb/latest/developerguide/cluster_parameter_groups-modify.html)。

**注意**  
创建一个集群参数组之后，您应至少等 5 分钟，再使用特定的集群参数组。这样，在将集群参数组用于新集群之前，Amazon DocumentDB 可以完成全部 `create` 操作。您可以使用 AWS 管理控制台 或`describe-db-cluster-parameter-groups` AWS CLI 操作来验证您的集群参数组是否已创建。有关更多信息，请参阅 [描述 Amazon DocumentDB 集群参数组](cluster_parameter_groups-describe.md)。

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

**要创建集群参数组**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在**集群参数组**窗格中，选择**创建**。

1. 在**创建集群参数组**窗格中，输入以下内容：

   1. **新集群参数组名称**：为集群参数组输入一个名称。例如 `sample-parameter-group`。集群参数组具有以下命名限制：
      + 长度为 [1-255] 个字母数字字符。
      + 第一个字符必须是字母。
      + 不能以连字符结尾或包含两个连续的连字符。

   1. **系列**：选择要用于集群的 DocumentDB 版本。

   1. **描述**：为此集群参数组提供一个描述。

1. 要创建集群参数组，请选择**创建**。要取消操作，请选择**取消**。

1. 选择**创建**后，以下文本将显示于页面顶部，以验证集群参数组是否已成功创建：

   ```
   Successfully created cluster parameter group 'sample-parameter-group'.
   ```

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

要为 Amazon DocumentDB 4.0 集群创建新的集群参数组，请使用带有以下参数的 AWS CLI `create-db-cluster-parameter-group`操作：
+ **--db-cluster-parameter-group-name**：自定义集群参数组的名称。例如 `sample-parameter-group`。
+ **--db-cluster-parameter-group-family**：用作自定义集群参数组模板的集群参数组族。
+ **--description**：用户提供的此集群参数组的描述。下面的示例使用了“`Custom docdb4.0 parameter group`”。

对于 Linux、macOS 或 Unix：

**Example**  

```
aws docdb create-db-cluster-parameter-group \
 --db-cluster-parameter-group-name sample-parameter-group \
 --db-parameter-group-family docdb5.0 \
 --description "Custom docdb5.0 parameter group"
```
对于 Windows：  

```
aws docdb create-db-cluster-parameter-group ^
 --db-cluster-parameter-group-name sample-parameter-group ^
 --db-parameter-group-family docdb5.0 ^
 --description "Custom docdb5.0 parameter group"
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "DBClusterParameterGroup": {
        "DBClusterParameterGroupName": "sample-parameter-group",
        "DBParameterGroupFamily": "docdb5.0",
        "Description": "Custom docdb4.0 parameter group",
        "DBClusterParameterGroupArn": "sample-parameter-group-arn"
    }
}
```

------

# 修改 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-modify"></a>

本节介绍如何修改*自定义* Amazon DocumentDB 参数组。在 Amazon DocumentDB 中，您不能修改自己使用新引擎版本在新区域首次创建集群时所创建的 `default` 集群参数组。如果您的 Amazon DocumentDB 集群正使用默认集群参数组，而您想要修改其中的值，则您必须首先[创建新的参数组](https://docs.aws.amazon.com//documentdb/latest/developerguide/cluster_parameter_groups-create.html)或[复制现有参数组](https://docs.aws.amazon.com//documentdb/latest/developerguide/cluster_parameter_groups-copy.html)，修改它，并且将修改的参数组应用于您的集群。

请完成以下步骤以修改自定义集群参数组。修改操作可能耗费一段时间来传播。请等待修改的集群参数组变为可用，之后将其附加到您的集群。您可以使用 AWS 管理控制台 或 AWS CLI `describe-db-cluster-parameters`操作来验证您的集群参数组是否已被修改。有关更多信息，请参阅 [描述集群参数组](cluster_parameter_groups-describe.md)。

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

遵循以下步骤修改自定义 Amazon DocumentDB 参数组。您无法修改 `default` 参数组。如果要修改 `default` 参数组中的值，您可以[复制默认的集群参数组](https://docs.aws.amazon.com//documentdb/latest/developerguide/cluster_parameter_groups-copy.html)，修改它，然后将修改后的参数组应用于您的集群。有关将参数组应用于您的集群的更多信息，请参阅 [修改 Amazon DocumentDB 集群](db-cluster-modify.md)。

**修改自定义集群参数组**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 对于要修改的参数组中的每个参数，执行以下操作：

   1. 找到要修改的参数，并通过核查该参数是否在**可修改**列下作为 `true` 列出，验证该参数是否可修改。

   1. 如果该参数可修改，请选择它并从控制台页面的右上角选择**编辑**。

   1. 在**修改 `<parameter-name>`** 对话框中，进行所需的更改。然后，选择**修改集群参数**或选择**取消**以放弃更改。

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

您可以使用 AWS CLI，修改 Amazon DocumentDB 集群参数组中任何可修改参数的 `ParameterValue`、`Description` 或 `ApplyMethod`。您无法直接对默认的集群参数组进行修改。

要修改自定义集群参数组的参数，请使用带以下参数的 `modify-db-cluster-parameter-group` 操作。
+ **--db-cluster-parameter-group-name**：必需。您正在修改的集群参数组的名称。
+ **--parameters**：必需。您正在修改的参数。有关适用于 Amazon DocumentDB 集群中所有实例的参数列表，请参阅 [Amazon DocumentDB 集群参数参考](cluster_parameter_groups-list_of_parameters.md)。每个参数条目必须包含以下内容：
  + **ParameterName**：您正在修改的参数的名称。
  + **ParameterValue**：此参数的新值。
  + **ApplyMethod**：您希望如何应用对此参数的更改。允许的值为 `immediate` 和 `pending-reboot`。
**注意**  
带 `static` 的 `ApplyType` 参数必须具有 `pending-reboot` 的 `ApplyMethod`。

**Example - 修改参数的值**  
在此示例中，您列出 `sample-parameter-group` 的参数值并修改 `tls` 参数。然后，等待 5 分钟后，再次列出 `sample-parameter-group` 的参数值以查看更改后的参数值。  

1. 列出 `sample-parameter-group` 的参数及其值。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-cluster-parameters \
          --db-cluster-parameter-group-name sample-parameter-group
   ```

   对于 Windows：

   ```
   aws docdb describe-db-cluster-parameters ^
          --db-cluster-parameter-group-name sample-parameter-group
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
          "Parameters": [
              {
                  "Source": "system",
                  "ApplyType": "static",
                  "AllowedValues": "disabled,enabled",
                  "ParameterValue": "enabled",
                  "ApplyMethod": "pending-reboot",
                  "DataType": "string",
                  "ParameterName": "tls",
                  "IsModifiable": true,
                  "Description": "Config to enable/disable TLS"
              },
              {
                  "Source": "user",
                  "ApplyType": "dynamic",
                  "AllowedValues": "disabled,enabled",
                  "ParameterValue": "enabled",
                  "ApplyMethod": "pending-reboot",
                  "DataType": "string",
                  "ParameterName": "ttl_monitor",
                  "IsModifiable": true,
                  "Description": "Enables TTL Monitoring"
              }
          ]
   }
   ```

1. 修改 `tls` 参数，以便其值为 `disabled`。

   您无法修改 `ApplyMethod`，因为 `ApplyType` 是 `static`。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb modify-db-cluster-parameter-group \
          --db-cluster-parameter-group-name sample-parameter-group \
          --parameters "ParameterName"=tls,"ParameterValue"=disabled,"ApplyMethod"=pending-reboot
   ```

   对于 Windows：

   ```
   aws docdb modify-db-cluster-parameter-group ^
          --db-cluster-parameter-group-name sample-parameter-group ^
          --parameters "ParameterName"=tls,"ParameterValue"=disabled,"ApplyMethod"=pending-reboot
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
          "DBClusterParameterGroupName": "sample-parameter-group"
      }
   ```

1. 至少等 5 分钟。

1. 列出 `sample-parameter-group` 的参数值以验证 `tls` 参数是否修改过。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-cluster-parameters \
          --db-cluster-parameter-group-name sample-parameter-group
   ```

   对于 Windows：

   ```
   aws docdb describe-db-cluster-parameters ^
          --db-cluster-parameter-group-name sample-parameter-group
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
          "Parameters": [
              {
                  "ParameterValue": "false",
                  "ParameterName": "enable_audit_logs",
                  "ApplyType": "dynamic",
                  "DataType": "string",
                  "Description": "Enables auditing on cluster.",
                  "AllowedValues": "true,false",
                  "Source": "system",
                  "IsModifiable": true,
                  "ApplyMethod": "pending-reboot"
              },
              {
                  "ParameterValue": "disabled",
                  "ParameterName": "tls",
                  "ApplyType": "static",
                  "DataType": "string",
                  "Description": "Config to enable/disable TLS",
                  "AllowedValues": "disabled,enabled",
                  "Source": "system",
                  "IsModifiable": true,
                  "ApplyMethod": "pending-reboot"
              }
          ]
   }
   ```

------

# 修改 Amazon DocumentDB 集群以使用自定义集群参数组
<a name="cluster_parameter_groups-modify_clusters"></a>

当您创建 Amazon DocumentDB 集群时，将自动为该集群创建一个 `default.docdb4.0` 参数值。您不能修改 `default` 集群参数组。相反，您可以修改您的 Amazon DocumentDB 集群，以将新的定制化参数组与其关联。

本节介绍如何使用 AWS 管理控制台 和 AWS Command Line Interface ()AWS CLI修改现有 Amazon DocumentDB 集群以使用自定义集群参数组。

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

**修改 Amazon DocumentDB 集群以使用新的非默认集群参数组**

1. 开始之前，请确保您已创建一个 Amazon DocumentDB 集群和集群参数组。有关更多说明，请参阅 [创建 Amazon DocumentDB 集群](db-cluster-create.md) 和 [创建 Amazon DocumentDB 集群参数组](cluster_parameter_groups-create.md)。

1. 创建集群参数组后，请在 [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb) 打开 Amazon DocumentDB 控制台。在导航窗格中，选择 **集群**以将新参数组添加到集群。

1. 选择您想将其与您的参数组关联起来的集群。选择**操)**，然后选择 **修改**以修改您的集群。

1. 在**集群选项**下，选择要与您的集群关联的新参数组。

1. 选择 **Continue (继续)** 以查看修改摘要。

1. 在确认您的更改后，您可以立即应用这些更改，也可以在 **Scheduling of modifications (修改计划)** 下的下一个维护时段内应用这些更改。

1. 选择 **Modify cluster (修改集群)** 以使用新参数组更新您的集群。

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

开始之前，请确保您已创建一个 Amazon DocumentDB 集群和集群参数组。您可以使用操作[创建 Amazon DocumentDB 集群](https://docs.aws.amazon.com//documentdb/latest/developerguide/db-cluster-create.html)。 AWS CLI `create-db-cluster`您可以使用 AWS CLI `create-db-cluster-parameter-group`操作[创建集群参数组](https://docs.aws.amazon.com//documentdb/latest/developerguide/cluster_parameter_groups-create.html)。

要将新的集群参数组添加到集群，请使用带有以下参数的 AWS CLI `modify-db-cluster`操作。
+ **--db-cluster-identifier** — 集群的名称（例如，`sample-cluster`）。
+ **--db-cluster-parameter-group-nam** e-您要与集群关联的参数组的名称（例如，`sample-parameter-group`）。

**Example**  

```
aws docdb modify-db-cluster \
    --db-cluster-identifier sample-cluster \
    --db-cluster-parameter-group-name sample-parameter-group
```
此操作的输出将类似于下文（JSON 格式）。  

```
"DBCluster": {
    "AvailabilityZones": [
            "us-west-2c",
            "us-west-2b",
            "us-west-2a"
    ],
    "BackupRetentionPeriod": 1,
    "DBClusterIdentifier": "sample-cluster",
    "DBClusterParameterGroup": "sample-parameter-group",
    "DBSubnetGroup": "default",
   ...
}
```

------

# 复制 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-copy"></a>

您可以使用 AWS 管理控制台 或 AWS Command Line Interface ()AWS CLI复制 Amazon DocumentDB 中的集群参数组。

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

以下规程指导您通过复制现有集群参数组创建新的集群参数组。

**复制一个集群参数组**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**参数组**。

1. 在**集群参数组**窗格中，选择您要复制的集群参数组的名称。

1. 选择**操作**，然后选择**复制**以复制该参数组。

1. 在**复制选项**下，输入新集群参数组的名称和描述。然后选择**复制**以保存更改。

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

要复制一个集群参数组，请使用带以下参数的 `copy-db-cluster-parameter-group` 操作。
+ **--source-db-cluster-parameter-group-identifier**：必需。您想要复制的集群参数组的名称或 Amazon 资源名称（ARN）。

  如果源集群参数组和目标集群参数组相同 AWS 区域，则标识符可以是名称或 ARN。

  如果源集群参数组和目标集群参数组不同 AWS 区域，则标识符必须是 ARN。
+ **--target-db-cluster-parameter-group-identifier**：必需。集群参数组副本的名称 或 ARN。

  约束：
  + 不能为 null 或空。
  + 必须包含 1-255 个字母、数字或连字符。
  + 第一个字符必须是字母。
  + 不能以连字符结尾或包含两个连续的连字符。
+ **--target-db-cluster-parameter-group-description**：必需。用户提供的对集群参数组的描述。

**Example**  
以下代码将创建 `sample-parameter-group` 的副本，将副本命名为 `sample-parameter-group-copy`。  
对于 Linux、macOS 或 Unix：  

```
aws docdb copy-db-cluster-parameter-group \
    --source-db-cluster-parameter-group-identifier sample-parameter-group \
    --target-db-cluster-parameter-group-identifier sample-parameter-group-copy \
    --target-db-cluster-parameter-group-description "Copy of sample-parameter-group"
```
对于 Windows：  

```
aws docdb copy-db-cluster-parameter-group ^
    --source-db-cluster-parameter-group-identifier sample-parameter-group ^
    --target-db-cluster-parameter-group-identifier sample-parameter-group-copy ^
    --target-db-cluster-parameter-group-description "Copy of sample-parameter-group"
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "DBClusterParameterGroup": {
        "DBClusterParameterGroupArn": "arn:aws:rds:us-east-1:123456789012:cluster-pg:sample-parameter-group-copy",
        "DBClusterParameterGroupName": "sample-parameter-group-copy",
        "DBParameterGroupFamily": "docdb4.0",
        "Description": "Copy of sample-parameter-group"
    }
}
```

------

# 重置 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-reset"></a>

您可以使用或 AWS Command Line Interface (AWS CLI) 重置集群参数组，将 Amazon DocumentDB 集群参数组的部分 AWS 管理控制台 或全部参数值重置为默认值。

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

按照以下步骤将将部分或全部集群参数组的参数值重置为默认值。

**要重置集群参数组的参数值**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在控制台左侧的导航窗格中，选择**参数组**。

1. 在**集群参数组**窗格中，选择要对其复置的集群参数组的名称。

1. 选择**操作**，然后选择**重置**以重置该参数组。

1. 在所得的**集群参数组重置确认**页面上，确认您想要将该参数组的所有集群参数重置为默认值。然后，选择**重置**以重置您的参数组。您也可以选择**取消**以放弃所做更改。

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

要将部分或全部集群参数组的参数值重置为其默认值，请使用带有以下参数的 `reset-db-cluster-parameter-group` 操作。
+ **--db-cluster-parameter-group-name**：必需。要重置的集群参数组的名称。
+ **--parameters**：可选。集群参数组中要重置为其默认值的 `ParameterName` 和 `ApplyMethod` 列表。静态参数必须设置成 `pending-reboot` 才能在下次实例重启或 `reboot-db-instance` 请求时生效。对于集群中您希望更新的静态参数应用于的每个实例，您必须调用 `reboot-db-instance`。

  此参数和 `--reset-all-parameters` 相互排斥：您可以使用这两个参数之一，但不能同时使用二者。
+ **--reset-all-parameters** 或 **--no-reset-all-parameters**：可选。指定是否将所有参数 (`--reset-all-parameters` ) 或仅部分参数 (`--no-reset-all-parameters`) 重置为其默认值。`--reset-all-parameters` 参数和 `--parameters` 相互排斥：您可以使用这两个参数之一，但不能同时使用二者。

  当您重置整个组时，动态参数立即更新。将静态参数设置成 `pending-reboot`，以便在下次实例重启或 `reboot-db-instance` 请求时生效。对于集群中您希望更新的静态参数应用于的每个实例，您必须调用 `reboot-db-instance`。

**Example**  
**示例 1：将所有参数重置为其默认值**  
以下代码将集群参数组 `sample-parameter-group` 中的所有参数重置成它们的默认值。
对于 Linux、macOS 或 Unix：  

```
aws docdb reset-db-cluster-parameter-group \
       --db-cluster-parameter-group-name sample-parameter-group \
       --reset-all-parameters
```
对于 Windows：  

```
aws docdb reset-db-cluster-parameter-group ^
       --db-cluster-parameter-group-name sample-parameter-group ^
       --reset-all-parameters
```
**示例 2：将指定的参数重置为其默认值**  
以下代码将集群参数组 `sample-parameter-group` 中的 `tls` 参数重置成它的默认值。
对于 Linux、macOS 或 Unix：  

```
aws docdb reset-db-cluster-parameter-group \
       --db-cluster-parameter-group-name sample-parameter-group \
       --no-reset-all-parameters \
       --parameters ParameterName=tls,ApplyMethod=pending-reboot
```
对于 Windows：  

```
aws docdb reset-db-cluster-parameter-group ^
       --db-cluster-parameter-group-name sample-parameter-group ^
       --no-reset-all-parameters ^
       --parameters ParameterName=tls,ApplyMethod=pending-reboot
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
       "DBClusterParameterGroupName": "sample-parameter-group"
   }
```
**重启集群实例**  
在更改静态参数的值之前，必须重新启动集群实例。重启集群中您希望将更新的静态参数应用到的每个实例。
对于 Linux、macOS 或 Unix：  

```
aws docdb reboot-db-instance \
       --db-instance-identifier sample-cluster-instance
```
对于 Windows：  

```
aws docdb reboot-db-instance ^
       --db-instance-identifier sample-cluster-instance
```

------

# 删除 Amazon DocumentDB 集群参数组
<a name="cluster_parameter_groups-delete"></a>

您可以使用 AWS 管理控制台 或 AWS Command Line Interface ()AWS CLI删除自定义 Amazon DocumentDB 集群参数组。您不能删除 `default.docdb4.0` 集群参数组。

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

**删除集群参数组**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在**参数组**窗格中，选择要删除的集群参数组左侧的单选按钮。

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

1. 在**删除**确认窗格中，选择**删除**以删除集群参数组。要保留集群参数组，请选择**取消**。

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

要删除集群参数组，请使用带以下参数的 `delete-db-cluster-parameter-group` 操作。
+ **--db-cluster-parameter-group-name**：必需。要删除的集群参数组的名称。它必须是现有集群参数组。*您无法删除`default.docdb4.0` 集群参数组。*

**Example 删除集群参数组**  
以下示例引导您通过三个步骤来删除集群参数组：  

1. 找到您要删除的集群参数组的名称。

1. 删除指定的集群参数组。

1. 正在验证集群参数组是否已删除。
**1. 找到您要删除的集群参数组的名称。**  
以下代码列出了所有集群参数组的名称。
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-cluster-parameter-groups \
       --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName]'
```
对于 Windows：  

```
aws docdb describe-db-cluster-parameter-groups ^
       --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName]'
```
上一个操作的输出是集群参数组名称的一个列表，与以下（JSON 格式）类似。  

```
[
       [
           "default.docdb4.0"
       ],
       [
           "sample-parameter-group"
       ],
       [
           "sample-parameter-group-copy"
       ]
   ]
```
**2. 删除特定的集群参数组。**  
以下代码将删除集群参数组 `sample-parameter-group-copy`。
对于 Linux、macOS 或 Unix：  

```
aws docdb delete-db-cluster-parameter-group \
       --db-cluster-parameter-group-name sample-parameter-group-copy
```
对于 Windows：  

```
aws docdb delete-db-cluster-parameter-group ^
       --db-cluster-parameter-group-name sample-parameter-group-copy
```
没有来自此操作的输出。  
**3. 验证指定的集群参数组是否已删除。**  
以下代码列出了所有其余集群参数组的名称。
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-cluster-parameter-groups \
       --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName]'
```
对于 Windows：  

```
aws docdb describe-db-cluster-parameter-groups ^
       --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName]'
```
上一个操作的输出是集群参数组的一个列表，与以下（JSON 格式）类似。您刚刚删除的集群参数组不应在列表中。  
此操作的输出将类似于下文（JSON 格式）。  

```
[
       [
           "default.docdb4.0"
       ],
       [
           "sample-parameter-group"
       ]
   ]
```

------

# Amazon DocumentDB 集群参数参考
<a name="cluster_parameter_groups-list_of_parameters"></a>

当您更改动态参数并保存集群参数组时，更改将立即应用，而不管*立即应用*的设置如何。当您更改静态参数并保存集群参数组时，参数更改将在您手动重启实例后生效。您可以使用 Amazon DocumentDB 控制台或通过明确调用 `reboot-db-instance` 来重启实例。

下表显示了适用于 Amazon DocumentDB 集群中所有实例的参数。


**Amazon DocumentDB 集群级参数**  

| 参数 | 默认 值 | 有效值 | 可修改 | 应用类型 | 数据类型 | 说明 | 
| --- | --- | --- | --- | --- | --- | --- | 
| audit\$1logs | disabled | 已启用、已禁用、ddl、dml\$1read、dml\$1write、全部、无 | 是 | 动态 | 字符串 | 定义是否启用 Amazon CloudWatch 审计日志。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| change\$1stream\$1log\$1retention\$1duration | 10800 | 3600-604800 | 是 | 动态 | 整数 | 定义变更流日志保留和可以使用的以秒计的时间长度。 | 
| default\$1collection\$1compression | disabled | 已启用、已禁用（亚马逊 DocumentDB 5.0）/zstd、lz4、无（亚马逊文档 .0）DB8 | 是 | 动态 | 字符串 | 定义集群中新集合的默认压缩设置 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| profiler | disabled | 启用，禁用 | 是 | 动态 | 字符串 | 为慢速操作启用分析。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| profiler\$1sampling\$1rate | 1.0 | 0.0-1.0 | 是 | 动态 | 浮点型 | 定义已记录操作的采样率。 | 
| profiler\$1threshold\$1ms | 100 | 50-2147483646 | 是 | 动态 | 整数 | 为 profiler 定义阈值。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| planner\$1version | 3.0 | 1.0、2.0、3.0 | 是 | 动态 | 浮点型 | 定义用于查询的查询计划器版本。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| tls | 已启用 | enabled、disabled、fips-140-3、tls1.2\$1、tls1.3\$1 | 是 | 静态 | 字符串 | 定义是否需要传输层安全性 (TLS) 连接。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 
| ttl\$1monitor | 已启用 | 启用，禁用 | 是 | 动态 | 字符串 | 定义是否为集群启用有效时间 (TTL) 监控。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/cluster_parameter_groups-list_of_parameters.html) | 

# 修改 Amazon DocumentDB 集群参数
<a name="cluster_parameter_groups-parameters"></a>

在 Amazon DocumentDB 中，*集群参数组*由适用于您在该集群中创建的所有实例的*参数*组成。对于自定义集群参数组，您可以随时修改参数值，也可以将所有参数值重置为您创建的参数组的默认值。本节介绍如何查看构成 Amazon DocumentDB 集群参数组的参数及其值，以及您可以如何更改或更新这些值。

参数可以是*动态*或*静态*的。当您更改动态参数并保存集群参数组时，更改将立即应用，而不管 `Apply Immediately` 的设置如何。当您更改静态参数并保存集群参数组时，参数更改仅在您手动重启实例后生效。

## 查看 Amazon DocumentDB 集群参数组的参数
<a name="cluster_parameter_groups-describe_details_parameters"></a>

您可以使用或查看 Amazon DocumentDB 集群的参数及其值。 AWS 管理控制台 AWS CLI

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

**要查看集群参数组的详细信息**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在 **Parameter groups (参数组)** 窗格中，选择要查看其详细信息的集群参数组的名称。

1. 生成的页面显示每个参数的以下值：参数的名称、当前值、允许的值、参数是否可修改、应用类型、数据类型和描述。  
![\[屏幕截图：参数名称和值。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/docdb-determine-parameter-value.png)

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

要查看集群参数组的参数及其值，请使用带有以下参数的 `describe-db-cluster-parameters` 操作。
+ **--db-cluster-parameter-group-name**：必需。您想要详细参数列表的集群参数组的名称。
+ **--source**：可选。如果提供特定源，仅返回参数。参数源可以是 `engine-default`、`system` 或 `user`。

**Example**  
以下代码列出了 `custom3-6-param-grp` 参数组的所有参数及其值。有关参数组的更多信息，请省略 `--query` 行。有关所有参数组的信息，请省略 `--db-cluster-parameter-group-name` 行。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-cluster-parameters \
   --db-cluster-parameter-group-name custom3-6-param-grp \
   --query 'Parameters[*].[ParameterName,ParameterValue]'
```
对于 Windows：  

```
aws docdb describe-db-cluster-parameters ^
   --db-cluster-parameter-group-name custom3-6-param-grp ^
   --query 'Parameters[*].[ParameterName,ParameterValue]'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    [
        "audit_logs",
        "disabled"
    ],
    [
        "tls",
        "enabled"
    ],
    [
        "ttl_monitor",
        "enabled"
    ]
]
```

------

## 修改 Amazon DocumentDB 集群参数组的参数
<a name="cluster_parameter_groups-modify_parameters"></a>

您可以使用 AWS 管理控制台 或修改参数组的参数 AWS CLI。

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

**要更新集群参数组的参数**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在**参数组** 窗格中，选择要更新其参数的集群参数组的名称。

1. 所得页面显示该集群参数组的参数及它们的相应详情。选择要更新的参数。

1. 在页面右上角，选择**编辑**以更改参数的值。有关集群参数类型的更多信息，请参阅 [Amazon DocumentDB 集群参数参考](cluster_parameter_groups-list_of_parameters.md)。

1. 进行更改，然后选择**修改集群参数**以保存更改。要放弃更改，请选择**取消**。

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

要修改集群参数组的参数，请使用带以下参数的 `modify-db-cluster-parameter-group` 操作：
+ **--db-cluster-parameter-group-name**：必需。您正在修改的集群参数组的名称。
+ **--parameters**：必需。您正在修改的参数。每个参数条目必须包含以下内容：
  + **ParameterName**：您正在修改的参数的名称。
  + **ParameterValue**：此参数的新值。
  + **ApplyMethod**：您希望如何应用对此参数的更改。允许的值为 `immediate` 和 `pending-reboot`。
**注意**  
带 `static` 的 `ApplyType` 参数必须具有 `pending-reboot` 的 `ApplyMethod`。

**更改集群参数组参数 (AWS CLI) 的值**

以下示例将更改 `tls` 参数。

1. **列出 `sample-parameter-group`** 的参数及其值。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-cluster-parameters \
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   对于 Windows：

   ```
   aws docdb describe-db-cluster-parameters ^
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
       "Parameters": [
           {
               "Source": "system",
               "ApplyType": "static",
               "AllowedValues": "disabled,enabled",
               "ParameterValue": "enabled",
               "ApplyMethod": "pending-reboot",
               "DataType": "string",
               "ParameterName": "tls",
               "IsModifiable": true,
               "Description": "Config to enable/disable TLS"
           },
           {
               "Source": "user",
               "ApplyType": "dynamic",
               "AllowedValues": "disabled,enabled",
               "ParameterValue": "enabled",
               "ApplyMethod": "pending-reboot",
               "DataType": "string",
               "ParameterName": "ttl_monitor",
               "IsModifiable": true,
               "Description": "Enables TTL Monitoring"
           }
       ]
   }
   ```

1. **修改 `tls` 参数，以便其值为 `disabled`**。您无法修改 `ApplyMethod`，因为 `ApplyType` 是 `static`。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb modify-db-cluster-parameter-group \
       --db-cluster-parameter-group-name sample-parameter-group \
       --parameters "ParameterName"=tls,ParameterValue=disabled,ApplyMethod=pending-reboot"
   ```

   对于 Windows：

   ```
   aws docdb modify-db-cluster-parameter-group ^
       --db-cluster-parameter-group-name sample-parameter-group ^
       --parameters "ParameterName=tls,ParameterValue=disabled,ApplyMethod=pending-reboot"
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
       "DBClusterParameterGroupName": "sample-parameter-group"
   }
   ```

1. **至少等 5 分钟。**

1. **列出 `sample-parameter-group` 的参数值。**

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-cluster-parameters \
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   对于 Windows：

   ```
   aws docdb describe-db-cluster-parameters ^
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
       "Parameters": [
           {
               "ParameterName": "audit_logs",
               "ParameterValue": "disabled",
               "Description": "Enables auditing on cluster.",
               "Source": "system",
               "ApplyType": "dynamic",
               "DataType": "string",
               "AllowedValues": "enabled,disabled",
               "IsModifiable": true,
               "ApplyMethod": "pending-reboot"
           },
           {
               "ParameterName": "tls",
               "ParameterValue": "disabled",
               "Description": "Config to enable/disable TLS",
               "Source": "user",
               "ApplyType": "static",
               "DataType": "string",
               "AllowedValues": "disabled,enabled",
               "IsModifiable": true,
               "ApplyMethod": "pending-reboot"
           }
       ]
   }
   ```

------

# 了解 Amazon DocumentDB 端点
<a name="endpoints"></a>

您可以使用 Amazon DocumentDB（与 MongoDB 兼容）端点连接到集群或实例。Amazon DocumentDB 有三种不同类型的端点，各自具有自身用途。

**Topics**
+ [查找集群的端点](db-cluster-endpoints-find.md)
+ [查找实例的端点](db-instance-endpoint-find.md)
+ [连接到端点](endpoints-connecting.md)

**集群端点**  
集群端点是用于 Amazon DocumentDB 集群的端点，连接到该集群的当前主实例。每个 Amazon DocumentDB 集群都具有单个集群端点和一个主实例。在失效转移情况下，集群端点重新映射到新的主实例。

**读取器端点**  
读取器端点是 Amazon DocumentDB 集群的一个端点，连接到该集群的可用副本之一。每个 Amazon DocumentDB 集群都具有一个读取器端点。如果有多个副本，则读取器端点会将每个连接请求定向到 Amazon DocumentDB 副本之一。

**实例端点**  
实例终端节点是连接到特定实例的终端节点。集群中的每个实例（不论其是主实例还是副本实例）都有各自唯一的实例终端节点。最好不要使用应用程序中的实例端点。这是因为它们在发生失效转移时会更改角色，从而需要在应用程序中更改代码。

# 查找集群的端点
<a name="db-cluster-endpoints-find"></a>

您可以使用 Amazon DocumentDB 控制台或 AWS CLI 查找集群的集群端点和读取器端点。

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

**要使用控制台查找集群的端点：**

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

1. 在导航窗格中，选择**集群**。

1. 从集群列表中，选择感兴趣的集群的名称。

1. 在集群详细信息页面上，选择**配置**选项卡。您将在**配置和状态**部分中找到**集群端点**和**读取器端点**。  
![\[“配置和状态”部分显示了集群和读取器端点。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-endpoints.png)

1. 要连接到此集群，请选择**连接和安全**选项卡。查找 `mongo` Shell 的连接字符串以及可在应用程序代码中用于连接到集群的连接字符串。  
![\[“连接”部分显示了一个用于通过 mongo Shell 连接到实例的字符串以及一个用于通过应用程序连接到集群的字符串。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/cluster-connection-strings.png)

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

要使用 AWS CLI 查找集群的集群和读取器终端节点，请运行具有以下参数的 `describe-db-clusters` 命令。

**参数**
+ **--db-cluster-identifier**—可选。指定要返回端点的集群。如果省略，则返回多达 100 个集群的端点。
+ **--query**—可选。指定要显示的字段。因减少您为查找端点所需查看的数据量而有益。如果省略，则返回有关集群的全部信息。
+ **--region**—可选。使用 `--region` 参数指定要将命令应用到的区域。如果省略，则使用默认区域。

**Example**  
以下示例将返回 `DBClusterIdentifier` 的 `ReaderEndpoint`、终端节点（集群终端节点）和 `sample-cluster`。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-clusters \
   --region us-east-1 \
   --db-cluster-identifier sample-cluster \
   --query 'DBClusters[*].[DBClusterIdentifier,Port,Endpoint,ReaderEndpoint]'
```
对于 Windows：  

```
aws docdb describe-db-clusters ^
   --region us-east-1 ^
   --db-cluster-identifier sample-cluster ^
   --query 'DBClusters[*].[DBClusterIdentifier,Port,Endpoint,ReaderEndpoint]'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
  [
     "sample-cluster",
     27017,
     "sample-cluster.cluster-corlsfccjozr.us-east-1.docdb.amazonaws.com",
     "sample-cluster.cluster-ro-corlsfccjozr.us-east-1.docdb.amazonaws.com"
  ]
]
```

现在您已拥有集群端点，可以使用 `mongo` 或 `mongodb` 连接到集群。有关更多信息，请参阅 [连接到端点](endpoints-connecting.md)。

------

# 查找实例的端点
<a name="db-instance-endpoint-find"></a>

您可使用 Amazon DocumentDB 控制台或 AWS CLI 查找实例的端点。

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

**要使用控制台查找实例的端点**

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/choose-clusters.png)

1. 选中您感兴趣的实例左侧的框。

1. 向下滚动至 **Details (详细信息)** 部分，然后找到实例终端节点。  
![\[控制台屏幕截图显示了突出显示实例端点的详情页面。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-instance-endpoint.png)

1. 要连接到这个实例，请向上滚动到**连接**部分。定位 `mongo` Shell 的连接字符串和一个可在应用程序代码中用来连接到您实例的连接字符串。  
![\[控制台屏幕截图显示了突出显示 mongo Shell 和应用程序连接字符串的“连接”部分。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/instance-connection-strings.png)

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

要使用 AWS CLI 查找实例终端节点，请运行带有以下参数的命令。

**参数**
+ **--db-instance-identifier**—可选。指定要返回端点的实例。如果省略， 将返回多达 100 个实例的端点。
+ **--query**—可选。指定要显示的字段。因减少您为查找端点所需查看的数据量而有益。如果省略，则返回有关实例的所有信息。`Endpoint` 字段有三个成员，因此在查询中列出它则返回所有三个成员，如下例所示。如果您只对部分 `Endpoint` 成员感兴趣，请将查询中的 `Endpoint` 替换为您感兴趣的成员，如第二个示例中所示。
+ **--region**—可选。使用 `--region` 参数指定要将命令应用到的区域。如果省略，则使用默认区域。

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

```
aws docdb describe-db-instances \
    --region us-east-1 \
    --db-instance-identifier sample-cluster-instance \
    --query 'DBInstances[*].[DBInstanceIdentifier,Endpoint]'
```
对于 Windows：  

```
aws docdb describe-db-instances ^
    --region us-east-1 ^
    --db-instance-identifier sample-cluster-instance ^
    --query 'DBInstances[*].[DBInstanceIdentifier,Endpoint]'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    [
        "sample-cluster-instance",
        {
            "Port": 27017,
            "Address": "sample-cluster-instance.corcjozrlsfc.us-east-1.docdb.amazonaws.com",
            "HostedZoneId": "Z2R2ITUGPM61AM"
        }
    ]
]
```
减少输出以消除终端节点的 `HostedZoneId`，可通过指定 `Endpoint.Port` 和 `Endpoint.Address` 来修改查询。  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-instances \
    --region us-east-1 \
    --db-instance-identifier sample-cluster-instance \
    --query 'DBInstances[*].[DBInstanceIdentifier,Endpoint.Port,Endpoint.Address]'
```
对于 Windows：  

```
aws docdb describe-db-instances ^
    --region us-east-1 ^
    --db-instance-identifier sample-cluster-instance ^
    --query 'DBInstances[*].[DBInstanceIdentifier,Endpoint.Port,Endpoint.Address]'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    [
        "sample-cluster-instance",
        27017,
        "sample-cluster-instance.corcjozrlsfc.us-east-1.docdb.amazonaws.com"
    ]
]
```

现在您已拥有实例端点，可以使用 `mongo` 或 `mongodb` 连接到实例。有关更多信息，请参阅 [连接到端点](endpoints-connecting.md)。

------

# 连接到端点
<a name="endpoints-connecting"></a>

当您拥有自己的端点（集群或实例）时，可以使用 `mongo` Shell 或连接字符串连接到该端点。

## 使用 mongo Shell 连接
<a name="endpoints-connecting-mongo"></a>

使用以下结构来构造您需要使用 `mongo` Shell 连接到自身集群或实例的字符串：

```
mongo \
    --ssl \
    --host Endpoint:Port \
    --sslCAFile global-bundle.pem \
    --username UserName \
    --password Password
```

**`mongo` Shell 示例**  
连接到集群：

```
mongo \
    --ssl \
    --host sample-cluster.corcjozrlsfc.us-east-1.docdb.amazonaws.com:27017 \
    --sslCAFile global-bundle.pem \
    --username UserName \
    --password Password
```

连接到实例：

```
mongo \
    --ssl \
    --host sample-cluster-instance.corcjozrlsfc.us-east-1.docdb.amazonaws.com:27017 \
    --sslCAFile global-bundle.pem \
    --username UserName \
    --password Password
```

## 使用连接字符串连接
<a name="endpoints-connecting-mongodb"></a>

使用以下结构来构造您需要连接到自身集群或实例的连接字符串：

```
mongodb://UserName:Password@endpoint:port?replicaSet=rs0&ssl_ca_certs=global-bundle.pem 
```

**连接字符串示例**  
连接到集群：

```
mongodb://UserName:Password@sample-cluster.cluster-corlsfccjozr.us-east-1.docdb.amazonaws.com:27017?replicaSet=rs0&ssl_ca_certs=global-bundle.pem 
```

连接到实例：

```
mongodb://UserName:Password@sample-cluster-instance.cluster-corlsfccjozr.us-east-1.docdb.amazonaws.com:27017?replicaSet=rs0&ssl_ca_certs=global-bundle.pem 
```

 

# 了解亚马逊 DocumentDB 亚马逊资源名称 () ARNs
<a name="documentdb-arns"></a>

您在中创建的每个资源 AWS 都使用亚马逊资源名称 (ARN) 进行唯一标识。对于某些 Amazon DocumentDB（与 MongoDB 兼容）操作，您必须通过指定其 ARN 来唯一标识 Amazon DocumentDB 资源。例如，当您向资源中添加标签时，必须提供该资源的 ARN。

**Topics**
+ [构建 ARN](#documentdb-arns-constructing)
+ [查找 ARN](#documentdb-arns-find)

## 为 Amazon DocumentDB 资源构造 ARN
<a name="documentdb-arns-constructing"></a>

您可以使用以下语法为 Amazon DocumentDB 资源构造 ARN。亚马逊 DocumentDB 采用亚马逊关系数据库服务（亚马逊 RDS）的格式。 ARNs亚马逊 DocumentDB ARNs 包含但不包含`rds`。`docdb`

`arn:aws:rds:region:account_number:resource_type:resource_id`


| 区域名称 | Region | 可用区（计算） | 
| --- | --- | --- | 
| 美国东部（俄亥俄州） | `us-east-2` | 3 | 
| 美国东部（弗吉尼亚州北部） | `us-east-1` | 6 | 
| 美国西部（俄勒冈州） | `us-west-2` | 4 | 
| 非洲（开普敦） | `af-south-1` | 3 | 
| 南美洲（圣保罗） | `sa-east-1` | 3 | 
| 亚太地区（香港） | `ap-east-1` | 3 | 
| 亚太地区（海得拉巴） | `ap-south-2` | 3 | 
| 亚太地区（马来西亚） | `ap-southeast-5` | 3 | 
| 亚太地区（孟买） | `ap-south-1` | 3 | 
| 亚太地区（大阪） | `ap-northeast-3` | 3 | 
| 亚太地区（首尔） | `ap-northeast-2` | 4 | 
| 亚太地区（新加坡） | `ap-southeast-1` | 3 | 
| 亚太地区（悉尼） | `ap-southeast-2` | 3 | 
| 亚太地区（雅加达） | `ap-southeast-3` | 3 | 
| 亚太地区（墨尔本） | `ap-southeast-4` | 3 | 
| 亚太地区（泰国） | `ap-southeast-7` | 3 | 
| 亚太地区（东京） | `ap-northeast-1` | 3 | 
| 加拿大（中部） | `ca-central-1` | 3 | 
| 中国（北京）区域 | `cn-north-1` | 3 | 
| 中国（宁夏） | `cn-northwest-1` | 3 | 
| 欧洲地区（法兰克福） | `eu-central-1` | 3 | 
| 欧洲（苏黎世） | `eu-central-2` | 3 | 
| 欧洲地区（爱尔兰） | `eu-west-1` | 3 | 
| 欧洲地区（伦敦） | `eu-west-2` | 3 | 
| 欧洲地区（米兰） | `eu-south-1` | 3 | 
| 欧洲地区（巴黎） | `eu-west-3` | 3 | 
| 欧洲（西班牙） | `eu-south-2` | 3 | 
| 欧洲地区（斯德哥尔摩） | `eu-north-1` | 3 | 
| 墨西哥（中部） | `mx-central-1` | 3 | 
| 中东（阿联酋）： | `me-central-1` | 3 | 
| 以色列（特拉维夫） | `il-central-1` | 3 | 
| AWS GovCloud （美国西部） | `us-gov-west-1` | 3 | 
| AWS GovCloud （美国东部） | `us-gov-east-1` | 3 | 

**注意**  
Amazon DocumentDB 架构将存储和计算分开。对于存储层，Amazon DocumentDB 会在三个 AWS 可用区复制六份数据副本 ()。AZs上表中 AZs 列出的是在给定区域中可用于预置计算实例的数量。 AZs 例如，如果您在 ap-northeast-1 中启动一个 Amazon DocumentDB 集群，则您的存储将在三种方式中以六种方式进行复制，但您的计算实例只能以两种方式可用。 AZs AZs

下表显示在构造特定 Amazon DocumentDB 资源的 ARN 时应使用的格式。亚马逊 DocumentDB 采用亚马逊 RDS 的格式。 ARNs亚马逊 DocumentDB ARNs 包含但不包含`rds`。`docdb`


| 资源类型 | ARN 格式/示例 | 
| --- | --- | 
|  实例 (`db`)  |  `arn:aws:rds:region:account_number:db:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:db:sample-db-instance</pre>  | 
|  集群 (`cluster`)  |  `arn:aws:rds:region:account_number:cluster:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:cluster:sample-db-cluster</pre>  | 
|  集群参数组 (`cluster-pg`)  |  `arn:aws:rds:region:account_number:cluster-pg:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:cluster-pg:sample-db-cluster-parameter-group</pre>  | 
|  安全组 (`secgrp`)  |  `arn:aws:rds:region:account_number:secgrp:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:secgrp:sample-public-secgrp</pre>  | 
|  集群快照 (`cluster-snapshot`)  |  `arn:aws:rds:region:account_number:cluster-snapshot:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:cluster-snapshot:sample-db-cluster-snapshot</pre>  | 
|  子网组 (`subgrp`)  |  `arn:aws:rds:region:account_number:subgrp:resource_id` <pre>arn:aws:rds:us-east-1:1234567890:subgrp:sample-subnet-10</pre>  | 

## 查找 Amazon DocumentDB 资源 ARN
<a name="documentdb-arns-find"></a>

您可以使用或查找 Amazon DocumentDB 资源的 ARN。 AWS 管理控制台 AWS CLI

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

要使用控制台查找 ARN，请导航到要获取其 ARN 的资源，然后查看该资源的详细信息。

例如，您可以通过选择集群详细信息页面上的**配置**选项卡来获取集群的 ARN。如以下屏幕截图所示，您可以在**配置和状态**部分中找到 ARN。

![\[控制台屏幕截图显示详细信息窗格的配置和状态部分中的 ARN。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/documentdb-arn.png)


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

要使用特定的 Amazon DocumentDB 资源获取 ARN，请`describe`对该资源使用操作。 AWS CLI 下表显示了每项 AWS CLI 操作以及用于获取 ARN 的操作的 ARN 属性。


| AWS CLI 命令 | ARN 属性 | 
| --- | --- | 
|  `describe-db-instances`  |  `DBInstanceArn`  | 
|  `describe-db-clusters`  |  `DBClusterArn`  | 
|  `describe-db-parameter-groups`  |  `DBParameterGroupArn`  | 
|  `describe-db-cluster-parameter-groups`  |  `DBClusterParameterGroupArn`  | 
|  `describe-db-security-groups`  |  `DBSecurityGroupArn`  | 
|  `describe-db-snapshots`  |  `DBSnapshotArn`  | 
|  `describe-db-cluster-snapshots`  |  `DBClusterSnapshotArn`  | 
|  `describe-db-subnet-groups`  |  `DBSubnetGroupArn`  | 

**Example - 查找集群的 ARN**  
以下 AWS CLI 操作查找集群的 ARN。`sample-cluster`  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-clusters \
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].DBClusterArn'
```
对于 Windows：  

```
aws docdb describe-db-clusters ^
    --db-cluster-identifier sample-cluster \
    --query 'DBClusters[*].DBClusterArn'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    "arn:aws:rds:us-east-1:123456789012:cluster:sample-cluster"
]
```

**Example - ARNs 查找多个参数组**  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-cluster-parameter-groups \
   --query 'DBClusterParameterGroups[*].DBClusterParameterGroupArn'
```
对于 Windows：  

```
aws docdb describe-db-cluster-parameter-groups ^
   --query 'DBClusterParameterGroups[*].DBClusterParameterGroupArn'
```
此操作的输出将类似于下文（JSON 格式）。  

```
[
    "arn:aws:rds:us-east-1:123456789012:cluster-pg:custom3-6-param-grp",
    "arn:aws:rds:us-east-1:123456789012:cluster-pg:default.aurora5.6",
    "arn:aws:rds:us-east-1:123456789012:cluster-pg:default.docdb3.6"
]
```

------

# 标记 Amazon DocumentDB 资源
<a name="tagging"></a>

您可以使用 Amazon DocumentDB（与 MongoDB 兼容）标签将元数据添加到 Amazon DocumentDB 资源。这些标签可与 AWS Identity and Access Management (IAM) policy 结合使用，以管理对 Amazon DocumentDB 资源的访问并控制可将什么操作应用于资源。您还可以将具有类似标签的资源的费用分组在一起，使用标签来跟踪成本。

您可以标记以下 Amazon DocumentDB 资源：
+ 集群
+ 实例
+ 快照
+ 集群快照
+ 参数组
+ 集群参数组
+ 安全组
+ 子网组

## Amazon DocumentDB 资源标签概述
<a name="tagging-overview"></a>

Amazon DocumentDB 标签是由您定义的名称-值对，与某种 Amazon DocumentDB 资源关联。此名称也叫*键*。为键提供值为可选操作。可使用标签向 Amazon DocumentDB 资源分配任意信息。例如，您可以使用标签键定义一个类别，而标签值可以是该类别中的一个项目。例如，定义 `project` 的标签键和 `Salix` 的标签值 ，表示将 Amazon DocumentDB 资源分配给 Salix 项目。您也可以使用标签通过 `environment=test` 或 `environment=production` 等键指定 Amazon DocumentDB 资源用于测试或生产。我们建议使用一组具有一致性的标签键，以使跟踪与 Amazon DocumentDB 资源关联的元数据变得更轻松。

您也可以使用标签来组织您的 AWS 账单，使其反映您的成本结构。要执行此操作，请注册以获取包含标签键值的 AWS 账户账单。然后，如需查看组合资源的成本，请按有同样标签键值的资源组织您的账单信息。例如，您可以将特定的应用程序名称用作几个资源的标签，然后组织账单信息，以查看在数个服务中的使用该应用程序的总成本。有关更多信息，请参阅*AWS账单和成本管理用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

每个 Amazon DocumentDB 资源都有一组标签，其中包含分配给该资源的所有标签。一个标签集可以包含多达 10 个标签，也可以为空。如果给 Amazon DocumentDB 资源添加一个标签，而该标签的键与资源上某个现有的标签相同，则新值覆盖旧值。

AWS 不会对您的标记应用任何语义意义；所有标记都会严格地作为字符串进行解析。Amazon DocumentDB 可以在实例或其他 Amazon DocumentDB 资源上设置标签，具体取决于您创建资源时使用的设置。例如，Amazon DocumentDB 可能添加一个标签来指示实例用于生产或测试。

您可以将标签添加到快照中，但您的账单不会反映此分组。

您可以使用 AWS 管理控制台 或 AWS CLI 添加、列出和删除 Amazon DocumentDB 资源上的标签。使用 AWS CLI 时，必须提供要使用的资源的 Amazon 资源名称 (ARN)。有关 Amazon DocumentDB ARN 的更多信息，请参阅 [了解亚马逊 DocumentDB 亚马逊资源名称 () ARNs](documentdb-arns.md)。

## 标签约束
<a name="tagging-constraints"></a>

以下约束适用于 Amazon DocumentDB 标签：
+ 每个资源的最大标签数 - 10
+ 最大**键**长度 - 128 个 Unicode 字符
+ 最大**值**长度 - 256 个 Unicode 字符
+ **键**和**值**的有效字符 - UTF-8 字符集中的大写和小写字母、位、空格及以下字符：`_ . : / = + -` 和 `@` (Java regex: `"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$"`)
+ 标签键和值区分大小写。
+ 前缀 `aws:` 无法用于标签键或值；将其保留供 AWS 使用。

## 为 Amazon DocumentDB 资源添加和更新标签
<a name="tagging-add"></a>

使用 AWS 管理控制台 或 AWS CLI，您最多可以向资源添加 10 个标签。

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

无论您将标签添加到哪个资源，向资源添加标签的过程都是相似的。在本示例中，您向集群添加标签。

**要使用控制台向集群添加标签或更新标签**

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

1. 从导航窗格中，选择**集群**。

1. 选择要将标签添加到的集群的名称。

1. 向下滚动到**标签**部分，然后选择 **编辑**。

1. 对于每个要添加到此资源的标签，请执行以下操作：

   1. 要添加新标签，请在**值**框中输入标签的名称。要更改标签的值，请在**值**列中找到标签的名称。

   1. 要赋予标签新建或更新的值，在**值**框中，为标签输入一个值。

   1. 如果要添加多个标签，请选择**添加**。否则，完成后，选择**保存**。

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

无论您将标签添加到哪个资源，向资源添加标签的过程都是相似的。在本示例中，您向集群添加三个标签。第二个标签 `key2` 没有值。

使用带有这些参数的 AWS CLI 操作 `add-tags-to-resource`。

**参数**
+ **--resource-name** — 要将标签添加到的 Amazon DocumentDB 资源的 ARN。
+ **--tags** — 要添加到格式为 `Key=key-name,Value=tag-value` 的此资源的标签（键/值对）的列表。

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

```
aws docdb add-tags-to-resource \
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster \
    --tags Key=key1,Value=value1 Key=key2 Key=key3,Value=value3
```
对于 Windows：  

```
aws docdb add-tags-to-resource ^
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster \
    --tags Key=key1,Value=value1 Key=key2 Key=key3,Value=value3
```

此 `add-tags-to-resource` 操作不会生成任何输出。要查看操作结果，请使用 `list-tags-for-resource` 操作。

------

## 列出 Amazon DocumentDB 资源上的标签
<a name="tagging-list"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 获取 Amazon DocumentDB 资源的标签列表。

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

无论您将标签添加到哪个资源，在资源上列出标签的过程都是相似的。在本示例中，您为集群列出标签。

**要使用控制台列出集群上的标签**

1. 通过以下网址打开 Amazon DocumentDB 控制台：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)

1. 从导航窗格中，选择**集群**。

1. 选择要为之列出标签的集群的名称。

1. 要查看此资源上的标签列表，向下滚动到**标签**部分。

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

无论您为哪个资源列出标签，在资源上列出标签的过程都是相似的。在本示例中，您在集群上列出标签。

使用带有这些参数的 AWS CLI 操作 `list-tags-for-resource`。

**参数**
+ **--resource-name** – 必填项。您要列出其标签的 Amazon DocumentDB 资源的 ARN。

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

```
aws docdb list-tags-for-resource \
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster
```
对于 Windows：  

```
aws docdb list-tags-for-resource ^
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster
```

此操作的输出将类似于下文（JSON 格式）。

```
{
    "TagList": [
        {
            "Key": "key1",
            "Value": "value1"
        },
        {
            "Key": "key2",
            "Value": ""
        },
        {
            "Key": "key3",
            "Value": "value3"
        }
    ]
}
```

------

## 从 Amazon DocumentDB 资源中删除标签
<a name="tagging-remove"></a>

可以使用 AWS 管理控制台 或 AWS CLI 从 Amazon DocumentDB 资源中删除标签。

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

无论您将标签添加到哪个资源，从资源中删除标签的过程都是相似的。在本示例中，您从集群中删除标签。

**使用控制台从集群中删除标签**

1. 通过以下网址打开 Amazon DocumentDB 控制台：[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)

1. 从导航窗格中，选择**集群**。

1. 选择要从中删除标签的集群的名称。

1. 向下滚动到**标签**部分，然后选择 **编辑**。

1. 如果您要从该资源中删除所有标签，请选择 **Remove all （删除所有）**。否则，对于每个要从此资源删除的标签，请执行以下操作：

   1. 查找**键**列中的标签的名称。

   1. 在同一行上选择**删除**作为标签值。

   1. 完成后，选择**保存**。

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

无论您从哪个资源删除标签，从资源中删除标签的过程都是相似的。在本示例中，您从集群中删除标签。

使用带有这些参数的 AWS CLI 操作 `remove-tags-from-resource`。
+ **--resource-name** – 必填项。要从中删除标签的 Amazon DocumentDB 资源的 ARN。
+ **--tag-keys** – 必填项。要从此资源中删除的标签值列表。

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

```
aws docdb remove-tags-from-resource \
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster \
    --tag-keys key1 key3
```
对于 Windows：  

```
aws docdb remove-tags-from-resource ^
    --resource-name arn:aws:rds:us-east-1:1234567890:cluster:sample-cluster \
    --tag-keys key1 key3
```

此 `removed-tags-from-resource` 操作不会生成任何输出。要查看操作结果，请使用 `list-tags-for-resource` 操作。

------

# 维护 Amazon DocumentDB
<a name="db-instance-maintain"></a>

Amazon DocumentDB 会定期对 Amazon DocumentDB 资源执行维护。维护最常涉及对数据库引擎（集群维护）或实例的底层操作系统 (OS)（实例维护）的更新。数据库引擎更新是必需的补丁，包括安全补丁、错误修复以及数据库引擎增强功能。虽然大多数操作系统补丁都是可选的，但如果在一段时间内未应用这些补丁，就可能变成必需补丁并自动应用，以保持您的安全状况。因此，我们建议在操作系统更新可用时立即将其应用于 Amazon DocumentDB 实例。

数据库引擎补丁需要使 Amazon DocumentDB 集群脱机一小段时间。一旦这些补丁可用后，系统会自动安排在即将到来的 Amazon DocumentDB 集群计划维护窗口内应用补丁。

集群和实例维护都有各自的维护时段。您选择不立即应用的集群和实例修改会在维护窗口内应用。默认情况下，在创建集群时，Amazon DocumentDB 会为集群和每个单独的实例分配维护时段。您可以在创建集群或实例时选择维护时段。也可以随时修改维护时段以适应您的业务计划或实践。通常，建议选择尽量减少对应用程序的影响的维护时段（例如，晚上或周末）。

**Topics**
+ [Amazon DocumentDB 引擎补丁通知](#patch-notifications)
+ [查看待处理的 Amazon DocumentDB 维护操作](#view-pending-maintenance)
+ [Amazon DocumentDB 引擎更新](#db-instance-updates-apply)
+ [用户启动的更新](#user-initiated-updates)
+ [管理您的 Amazon DocumentDB 维护窗口](#maintenance-window)
+ [Amazon DocumentDB 操作系统更新](#os-system-updates)

## Amazon DocumentDB 引擎补丁通知
<a name="patch-notifications"></a>

您将通过 AWS 控制台 Health Dashboard (AHD) 中的运行状况事件和电子邮件收到所需数据库引擎补丁的维护通知。当 Amazon DocumentDB 引擎维护补丁在特定 AWS 地区可用时，该地区所有受影响的亚马逊 DocumentDB 用户账户都将收到受该补丁影响的每个亚马逊 DocumentDB 版本的 AHD 和电子邮件通知。您可以在 AWS 控制台中 AHD 的 “**计划更改**” 部分下查看这些通知。该通知将包含有关补丁发布时间、自动应用计划、受影响集群列表和发布说明的详细信息。此通知还将通过电子邮件发送到 AWS 账户的 root 用户电子邮件地址。

![\[Amazon DocumentDB 控制台显示引擎补丁升级的“计划更改”选项卡。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/scheduled-changes.png)


收到该通知后，可以选择在计划的自动应用日期之前，自行将这些引擎补丁应用到 Amazon DocumentDB 集群。或者，您可以等待在即将到来的维护窗口内自动应用引擎补丁（默认选项）。

**注意**  
AHD 中通知的**状态**将设置为 “进行中”，直到发布具有新引擎补丁版本的 Amazon DocumentDB 新引擎补丁。  
将引擎补丁应用到 Amazon DocumentDB 集群后，集群的引擎补丁版本将会更新，以反映通知中的版本。可以运行 `db.runCommand({getEngineVersion: 1})` 命令来验证此更新。

AWS Health 还与 Amazon 集成 EventBridge ，后者使用事件构建可扩展的事件驱动应用程序，并与 20 多个目标集成，包括亚马逊简单队列服务 (SQS) Simple Queue Service AWS Lambda等。 EventBridge 在引擎补丁可用之前，您可以使用`AWS_DOCDB_DB_PATCH_UPGRADE_MAINTENANCE_SCHEDULED`事件代码来设置 Amazon。您可以设置 EventBridge 为响应事件并自动执行操作，例如捕获事件信息、启动其他事件、通过其他渠道（例如向推送通知）发送通知 AWS Console Mobile Application，以及在 Amazon DocumentDB 引擎补丁可用时采取纠正或其他措施。

在 Amazon DocumentDB 取消引擎补丁的罕见情况下，您将收到 AHD 通知以及告知补丁取消的电子邮件。因此，您可以使用`AWS_DOCDB_DB_PATCH_UPGRADE_MAINTENANCE_CANCELLED`事件代码设置 Amazon EventBridge 以响应此事件。查看*亚马逊 EventBridge 用户指南*，详细了解如何使用[亚马逊 EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)。

## 查看待处理的 Amazon DocumentDB 维护操作
<a name="view-pending-maintenance"></a>

您可以使用 AWS 管理控制台 或查看您的集群是否有维护更新可用 AWS CLI。

如果有可用更新，您可以执行以下操作之一：
+ 推迟目前计划在下一个维护窗口内执行的维护操作（仅适用于操作系统补丁）。
+ 立即应用维护操作。
+ 计划下一个维护时段内要开始的维护操作。

**注意**  
如果不采取任何行动，则必需的维护操作（例如引擎补丁）将在即将到来的计划维护窗口中自动应用。

维护时段确定待处理的操作何时开始，但不限制这些操作的总执行时间。

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

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 如果有更新可用，则在 Amazon DocumentDB 控制台上集群的**维护**列中以**可用**、**必需**或**下一个时段**字样指示，如下所示：  
![\[显示集群维护列的 Amazon DocumentDB 控制台。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cluster-maintenance-updates-status.png)

1. 要采取操作，请选择集群以显示其详细信息，然后选择**维护和备份**。将显示**待处理维护**项目。  
![\[显示集群维护窗口的 Amazon DocumentDB 控制台。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/cluster-maint-3.png)

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

使用以下 AWS CLI 操作来确定哪些维护操作处于待处理状态。此处的输出显示没有待处理的维护操作。

```
aws docdb describe-pending-maintenance-actions
```

此操作的输出将类似于下文（JSON 格式）。

```
{
    "PendingMaintenanceActions": []
}
```

------

## Amazon DocumentDB 引擎更新
<a name="db-instance-updates-apply"></a>

通过 Amazon DocumentDB，您可以选择何时应用维护操作。您可以使用或来决定 Amazon DocumentDB 何时应用更新。 AWS 管理控制台 AWS CLI

使用此主题中的过程对集群立即执行升级或者计划升级。

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

您可以使用控制台管理 Amazon DocumentDB 集群。

**管理集群的更新**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择**集群**。

1. 在集群列表中，选择要应用维护操作的集群名称旁边的按钮。

1. 在 **Actions (操作)** 菜单中，选择以下选项之一：
   + **Upgrade now (立即升级)**，以立即执行挂起的维护任务。
   + **Upgrade at next window (在下一个时段升级)**，以在集群的下一个维护时段中执行挂起的维护任务。

   或者，您可以在集群**维护和备份**选项卡的“待处理维护”部分中单击**立即应用**或**在下一个维护时段应用**（请参阅上一节的**使用 AWS 管理控制台**）。
**注意**  
如果没有挂起的维护任务，上面的所有选项均会处于非活动状态。

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

要对群集应用待处理的更新，请使用`apply-pending-maintenance-action` AWS CLI 操作。

**参数**
+ **--resource-identifier**：待处理的维护操作应用于的资源的 Amazon DocumentDB Amazon 资源名称 (ARN)。
+ **--apply-action**：应用于此资源的待处理的维护操作。

  有效值：`system-update` 和 `db-upgrade`。
+ **--opt-in-type**：用于指定加入请求类型或撤消加入请求的值。不能撤消 `immediate` 类型的加入请求。

  有效值：
  + `immediate`：立即应用维护操作。
  + `next-maintenance`：在资源的下一个维护时段内应用维护操作。
  + `undo-opt-in`：取消任何现有的 `next-maintenance` 加入请求。

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

```
aws docdb apply-pending-maintenance-action \
    --resource-identifier arn:aws:rds:us-east-1:123456789012:db:docdb \
    --apply-action system-update \
    --opt-in-type immediate
```
对于 Windows：  

```
aws docdb apply-pending-maintenance-action ^
    --resource-identifier arn:aws:rds:us-east-1:123456789012:db:docdb ^
    --apply-action system-update ^
    --opt-in-type immediate
```

要返回至少有一个待更新的资源列表，请使用`describe-pending-maintenance-actions` AWS CLI 命令。

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

```
aws docdb describe-pending-maintenance-actions \
    --resource-identifier arn:aws:rds:us-east-1:001234567890:db:docdb
```
对于 Windows：  

```
aws docdb describe-pending-maintenance-actions ^
    --resource-identifier arn:aws:rds:us-east-1:001234567890:db:docdb
```
此操作的输出将类似于下文（JSON 格式）。  

```
{
    "PendingMaintenanceActions": [
        {
            "ResourceIdentifier": "arn:aws:rds:us-east-1:001234567890:cluster:sample-cluster",
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "system-update",
                    "CurrentApplyDate": "2019-01-11T03:01:00Z",
                    "Description": "db-version-upgrade",
                    "ForcedApplyDate": "2019-01-18T03:01:00Z",
                    "AutoAppliedAfterDate": "2019-01-11T03:01:00Z"
                }
            ]
        }
    ]
}
```

您还可以通过指定`describe-pending-maintenance-actions` AWS CLI 操作的`--filters`参数来返回群集的资源列表。`--filters` 操作的格式是 `Name=filter-name,Values=resource-id,...`。

`db-cluster-id` 是筛选条件的 `Name` 参数可接受的值。此值接受集群标识符列表或 ARNs。返回的列表仅包括由这些标识符或标识的集群的待处理维护操作 ARNs。

以下示例返回 `sample-cluster1` 和 `sample-cluster2` 集群的待处理维护操作。

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

```
aws docdb describe-pending-maintenance-actions \
   --filters Name=db-cluster-id,Values=sample-cluster1,sample-cluster2
```
对于 Windows：  

```
aws docdb describe-pending-maintenance-actions ^
   --filters Name=db-cluster-id,Values=sample-cluster1,sample-cluster2
```

------

### 应用日期
<a name="db-instance-updates-apply-date"></a>

每个维护操作都有一个相应的应用日期，您可以在描述待处理的维护操作时找到它们。当您从中读取待处理维护操作的输出时 AWS CLI，会列出三个日期。当维护为可选维护时，这些日期值为 `null`。在调度或应用相应的维护操作后，就会填充值。
+ **CurrentApplyDate**：将立即应用或在下一个维护时段期间应用维护操作的日期。
+ **ForcedApplyDate**：自动应用维护的日期，与维护时段无关。
+ **AutoAppliedAfterDate**：将在该日期后的集群维护时段期间应用维护。

## 用户启动的更新
<a name="user-initiated-updates"></a>

作为 Amazon DocumentDB 用户，您可以启动对集群或实例的更新。例如，您可以将实例的类修改为具有更多或更少内存的类，也可以更改集群的参数组。Amazon DocumentDB 对这些更改的看法不同于 Amazon DocumentDB 启动的更新。有关修改集群或实例的更多信息，请参阅以下内容：
+ [修改 Amazon DocumentDB 集群](db-cluster-modify.md)
+ [修改 Amazon DocumentDB 实例](db-instance-modify.md)

要查看待处理的用户启动的修改的列表，请运行以下命令。

**Example**  
**查看实例的待处理的用户启动的更改**  
对于 Linux、macOS 或 Unix：  

```
aws docdb describe-db-instances \
    --query 'DBInstances[*].[DBClusterIdentifier,DBInstanceIdentifier,PendingModifiedValues]'
```
对于 Windows：  

```
aws docdb describe-db-instances ^
    --query 'DBInstances[*].[DBClusterIdentifier,DBInstanceIdentifier,PendingModifiedValues]'
```
此操作的输出将类似于下文（JSON 格式）。  
在本例中，`sample-cluster-instance` 有针对 `db.r5.xlarge` 实例类的待处理更改，`sample-cluster-instance-2` 没有待处理的更改。  

```
[
    [
        "sample-cluster",
        "sample-cluster-instance",
        {
            "DBInstanceClass": "db.r5.xlarge"
        }
    ],
    [
        "sample-cluster",
        "sample-cluster-instance-2",
        {}
    ]
]
```

## 管理您的 Amazon DocumentDB 维护窗口
<a name="maintenance-window"></a>

每个实例和集群都有一个每周维护时段，在此期间会应用任何待处理的更改。在请求或要求的情况下，您可以将维护时段视为控制修改及软件修补程序更新的时间的机会。如果在给定的周内安排了维护事件，则将在您确定的 30 分钟维护时段内启动维护。大部分维护事件也将在 30 分钟的维护时段内完成，但较大的维护事件可能需要 30 分钟以上的时间才能完成。

这个 30 分钟维护时段是随机从每个区域的 8 小时时间段中选择出来的。如果在创建实例或集群时未指定首选维护时段，则 Amazon DocumentDB 在该星期中随机选择的某一天中分配 30 分钟的维护时段。

下表列出的是分配了默认维护窗口的各个区域的时间段。


| 区域名称 | Region | UTC 时间数据块 | 
| --- | --- | --- | 
| 美国东部（俄亥俄州） | us-east-2 | 03:00-11:00 | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 03:00-11:00 | 
| 美国西部（俄勒冈州） | us-west-2 | 06:00-14:00 | 
| 非洲（开普敦） | af-south-1 | 03:00–11:00 | 
| 亚太地区（香港） | ap-east-1 | 06:00-14:00 | 
| 亚太地区（海得拉巴） | ap-south-2 | 06:30–14:30 | 
| 亚太地区（马来西亚） | ap-southeast-5 | 13:00-21:00 | 
| 亚太地区（孟买） | ap-south-1 | 06:00-14:00 | 
| 亚太地区（大阪） | ap-northeast-3 | 12:00-20:00 | 
| 亚太地区（首尔） | ap-northeast-2 | 13:00-21:00 | 
| 亚太地区（新加坡） | ap-southeast-1 | 14:00-22:00 | 
| 亚太地区（悉尼） | ap-southeast-2 | 12:00-20:00 | 
| 亚太地区（雅加达） | ap-southeast-3 | 08:00-16:00 | 
| 亚太地区（墨尔本） | ap-southeast-4 | 11:00-19:00 | 
| 亚太地区（泰国） | ap-southeast-7 | 15:00-23:00 | 
| 亚太地区（东京） | ap-northeast-1 | 13:00-21:00 | 
| 加拿大（中部） | ca-central-1 | 03:00-11:00 | 
| 中国（北京） | cn-north-1 | 06:00-14:00 | 
| 中国（宁夏） | cn-northwest-1 | 06:00-14:00 | 
| 欧洲地区（法兰克福） | eu-central-1 | 21:00-05:00 | 
| 欧洲（苏黎世） | eu-central-2 | 02:00-10:00 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 22:00-06:00 | 
| 欧洲（伦敦） | eu-west-2 | 22:00-06:00 | 
| 欧洲地区（米兰） | eu-south-1 | 02:00-10:00 | 
| 欧洲地区（巴黎） | eu-west-3 | 23:59-07:29 | 
| 欧洲（西班牙） | eu-south-2 | 02:00–10:00 | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | 04:00 — 12:00 | 
| 墨西哥（中部） | mx-central-1 | 03:00-11:00 | 
| 中东（阿联酋）： | me-central-1 | 05:00–13:00 | 
| 南美洲（圣保罗） | sa-east-1 | 00:00-08:00 | 
| 以色列（特拉维夫） | il-central-1 | 04:00-12:00 | 
| AWS GovCloud （美国东部） | us-gov-east-1 | 17:00-01:00 | 
| AWS GovCloud （美国西部） | us-gov-west-1 | 06:00-14:00 | 

### 更改您的 Amazon DocumentDB 维护窗口
<a name="maintenance-windows"></a>

维护时段应当选在使用量最小的时段上，因而可能必须不时予以更改。您的集群或实例只会在应用系统更改（例如，扩展存储操作或数据库实例类的更改）并且需要中断的期间出现不可用现象，且持续时间只是这些必要更改所需的最少时间。

对于数据库引擎升级，Amazon DocumentDB 会使用集群的首选维护时段，而不是单个实的维护时段。

**更改维护时段**
+ 对于集群：请参阅[修改 Amazon DocumentDB 集群](db-cluster-modify.md)。
+ 对于实例：请参阅[修改 Amazon DocumentDB 实例](db-instance-modify.md)。

## Amazon DocumentDB 操作系统更新
<a name="os-system-updates"></a>

Amazon DocumentDB 集群中的实例偶尔需要操作系统更新。Amazon DocumentDB 将操作系统升级到更新的版本，以提高数据库性能和客户的整体安保状况。操作系统更新不会更改实例的引擎版本或 Amazon DocumentDB 实例类。

我们建议您先更新集群中的读取器实例，然后更新写入器实例,以将集群的可用性最大化。我们不建议同时更新读取器实例和写入器实例，因为发生失效转移时可能会导致更长的停机。

Amazon DocumentDB 的大多数操作系统更新都是可选的，没有固定的应用日期。但是，如果在一段时间内未应用这些更新，它们最终可能会变成必需的，并在实例的维护窗口内自动应用。这是为了帮助维持数据库的安全状况。为避免任何意外停机，我们建议在操作系统更新可用时，尽快将其应用于 Amazon DocumentDB 实例，并根据业务需求在方便的时间设置实例维护窗口。

要在新的可选更新可用时收到通知，您可以订阅安全修补事件类别中的 RDS-EVENT-0230。有关订阅 Amazon DocumentDB 活动的信息，[请参阅订阅 Amazon DocumentDB 活动订阅](https://docs.aws.amazon.com/documentdb/latest/developerguide/event-subscriptions.subscribe.html)。

在集群或实例上执行维护时，将会出现这种情况；如果实例是主实例，将进行故障转移。为了提高可用性，我们建议您为 Amazon DocumentDB 集群使用多个实例。有关更多信息，请参阅 [Amazon DocumentDB 失效转移](failover.md)。

**注意**  
对于某些管理功能，Amazon DocumentDB 使用与 Amazon Relational Database Service (Amazon RDS) 共享的操作技术。

**重要**  
在操作系统升级期间，您的 Amazon DocumentDB 实例将处于离线状态。可以通过配备多实例集群来最大程度减小集群停机时间。如果未配备多实例集群，可以选择临时创建一个集群，您可以添加辅助实例来执行此维护，然后在维护完成后删除其他读取器实例（辅助实例将按常规费用收费）。

**注意**  
为了履行各种合规性义务，可能需要及时了解所有可选和强制性更新。我们建议您在维护时段内定期应用 Amazon DocumentDB 提供的所有更新。

您可以使用 AWS 管理控制台 或 AWS CLI 来确定更新是否可用。

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

使用 AWS 管理控制台确定更新是否可用：

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

1. 在导航窗格中，选择 **集群**，然后选择实例。

1. 选择 **维护**。

1. 在**待处理维护**部分中，找到操作系统更新。

![\[显示集群维护列的 Amazon DocumentDB 控制台。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/maintenance-available-1.png)


您可以选择操作系统更新，然后在 **待定维护**部分中点击 **立即申请**或 **在下一个维护时段应用**。如果维护值为**下一时段**，请通过选择**推迟升级**来推迟维护项目。如果维护操作已经启动，则无法推迟该操作。

或者，您可以从集群列表中选择实例，方法是单击导航窗格中的**集群**，然后从**操作**菜单中选择**立即应用**或**在下一个维护时段应用**。

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

要使用确定更新是否可用 AWS CLI，请调用以下`describe-pending-maintenance-actions`命令：

```
aws docdb describe-pending-maintenance-actions
```

```
{
  "ResourceIdentifier": "arn:aws:docdb:us-east-1:123456789012:db:mydb2",
  "PendingMaintenanceActionDetails": [
    {
      "Action": "system-update",
      "Description": "New Operating System update is available"
    }
  ]
}
```

------

操作系统更新特定于 Amazon DocumentDB 引擎版本和实例类。因此，Amazon DocumentDB 实例在不同的时间接收或要求更新。当根据实例的引擎版本和实例类，实例有可用的操作系统更新时，更新将显示在控制台中。也可以通过运行 AWS CLI `describe-pending-maintenance-actions`命令或调用 `DescribePendingMaintenanceActions` API 操作来查看。

如果没有运行 Amazon DocumentDB 引擎的最新集群补丁版本，您可能看不到列为可用维护的操作系统更新。要查看和管理操作系统更新，应先升级至最新引擎补丁版本。

# 了解服务相关角色
<a name="service-linked-roles"></a>

亚马逊 DocumentDB（兼容 MongoDB）使用 AWS Identity and Access Management (IAM) 服务相关角色。[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)是一种独特类型的 IAM 角色，它与 Amazon DocumentDB 直接相关。服务相关角色由 Amazon DocumentDB 预定义，包括该服务代表您调用 AWS 其他服务所需的所有权限。

服务关联角色使得可以更轻松地设置 Amazon DocumentDB，因为您不必手动添加必要的权限。Amazon DocumentDB 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon DocumentDB 可以代入该角色。定义的权限包括信任策略和权限策略，而且权限策略不能附加到任何其他 IAM 实体。

只有在首先删除角色的相关资源后，才能删除角色。这将保护您的 Amazon DocumentDB 资源，因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

## Amazon DocumentDB 的服务相关角色权限
<a name="service-linked-role-permissions"></a>

亚马逊 DocumentDB（兼容 MongoDB）使用名为 RDS 的服务相关角色来**AWSServiceRoleFor允许** Amazon DocumentDB 代表您的集群调用服务。 AWS 

 AWSServiceRoleForRDS 服务相关角色信任以下服务来代入该角色：
+ `docdb.amazonaws.com`

角色权限策略允许 Amazon DocumentDB 对指定资源完成以下操作：
+ 对 `ec2` 的操作：
  + `AssignPrivateIpAddresses`
  + `AuthorizeSecurityGroupIngress`
  + `CreateNetworkInterface`
  + `CreateSecurityGroup`
  + `DeleteNetworkInterface`
  + `DeleteSecurityGroup`
  + `DescribeAvailabilityZones`
  + `DescribeInternetGateways`
  + `DescribeSecurityGroups`
  + `DescribeSubnets`
  + `DescribeVpcAttribute`
  + `DescribeVpcs`
  + `ModifyNetworkInterfaceAttribute`
  + `RevokeSecurityGroupIngress`
  + `UnassignPrivateIpAddresses`
+ 对 `sns` 的操作：
  + `ListTopic`
  + `Publish`
+ 对 `cloudwatch` 的操作：
  + `PutMetricData`
  + `GetMetricData`
  + `CreateLogStream`
  + `PullLogEvents`
  + `DescribeLogStreams`
  + `CreateLogGroup`

**注意**  
您必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务关联角色。您可能会遇到以下错误消息：  
**Unable to create the resource. Verify that you have permission to create service linked role。Otherwise wait and try again later.**  
如果您看到此错误，请确保您已启用以下权限：  

```
{
    "Action": "iam:CreateServiceLinkedRole",
    "Effect": "Allow",
    "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
    "Condition": {
        "StringLike": {
            "iam:AWSServiceName":"rds.amazonaws.com"
        }
    }
}
```

有关更多信息，请参阅《IAM 用户指南》**中的[服务关联角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 创建 Amazon DocumentDB 服务相关角色
<a name="service-linked-roles-create"></a>

您无需手动创建服务关联角色。当您创建集群时，Amazon DocumentDB 将为您创建服务相关角色。

如果删除此服务相关角色然后需要再次创建它，则可以使用相同的流程在您的账户中重新创建此角色。当您创建集群时，Amazon DocumentDB 将再次为您创建服务相关角色。

## 修改 Amazon DocumentDB 服务关联角色
<a name="service-linked-roles-edit"></a>

Amazon DocumentDB 不允许您修改 AWSService RoleFor RDS 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 修改角色的说明。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除 Amazon DocumentDB 服务相关角色
<a name="service-linked-roles-delete"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。但是，您必须先删除所有 集群，然后才能删除服务相关角色。

### 清除 Amazon DocumentDB 服务相关角色
<a name="service-linked-roles-clean-up"></a>

必须先确认服务相关角色没有活动会话并删除该角色使用的任何资源，然后才能使用 IAM 删除服务相关角色。

**要使用控制台检查服务相关角色是否具有活动会话**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择 **AWSServiceRoleForRDS** 角色的名称（不是复选框）。

1. 在所选角色的 **Summary** 页面上，选择 **Access Advisor** 选项卡。

1. 在 **Access Advisor (访问顾问)** 选项卡上，查看服务相关角色的近期活动。
**注意**  
如果您不确定 Amazon DocumentDB 是否 AWSServiceRoleFor在使用 RDS 角色，可以尝试删除该角色。如果服务正在使用该角色，则删除操作会失败，并且您可以查看正在使用该角色的 区域。如果该角色已被使用，则您必须等待会话结束，然后才能删除该角色。您无法撤销服务相关角色对会话的权限。

如果要移除 AWSService RoleFor RDS 角色，则必须先删除*所有*实例和集群。有关删除实例和集群的信息，请参阅以下主题：
+ [删除 Amazon DocumentDB 实例](db-instance-delete.md)
+ [删除 Amazon DocumentDB 集群](db-cluster-delete.md)

## Amazon DocumentDB 服务相关角色支持的区域
<a name="slr-regions"></a>

Amazon DocumentDB 支持在该服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [https://docs.aws.amazon.com/documentdb/latest/developerguide/regions-and-azs.html#regions-and-azs-availability](https://docs.aws.amazon.com/documentdb/latest/developerguide/regions-and-azs.html#regions-and-azs-availability)。

 

# 将变更流与 Amazon DocumentDB 结合使用
<a name="change_streams"></a>

Amazon DocumentDB（与 MongoDB 兼容）中的变更流功能提供按时间顺序排列的更改事件，这些事件在您的集群集合内发生。您可以从变更流中读取事件，以实现许多不同的使用案例，包括以下情况：
+ 更改通知
+ 使用 Amazon OpenSearch 服务（OpenSearch 服务）进行全文搜索
+ 使用 Amazon Redshift 分析

应用程序可以使用变更流在各个集合中订阅数据变更。变更流事件在集群上发生时按顺序排列，并在记录事件之后存储 3 个小时（默认情况下）。使用 `change_stream_log_retention_duration` 参数可以将保留期延长至 7 天。要修改变更流保留期，请参阅[修改变更流日志保留期限](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-modifying_log_retention)。

**Topics**
+ [支持的操作](#change_streams-supported_ops)
+ [计费](#change_streams-billing)
+ [限制](#change_streams-limitations)
+ [启用变更流](#change_streams-enabling)
+ [示例：在 Python 中使用变更流](#change_streams-using_example)
+ [完整文档查找](#change_streams-lookup)
+ [恢复变更流](#change_streams-resuming)
+ [使用 `startAtOperationTime` 恢复变更流](#change_streams-startAtOperation)
+ [使用 `postBatchResumeToken` 恢复变更流](#change_streams-postBatchResumeToken)
+ [变更流中的事务](#change_streams-transactions)
+ [修改变更流日志保留期限](#change_streams-modifying_log_retention)
+ [在辅助实例上使用变更流](#change-streams-secondary-instances)

## 支持的操作
<a name="change_streams-supported_ops"></a>

Amazon DocumentDB 支持以下变更流操作：
+ MongoDB `db.collection.watch()`、`db.watch()` 和 `client.watch()` API 中支持的所有变更事件。
+ 查找完整文档以获取更新。
+ 聚合阶段：`$match`、`$project`、`$redact`、`$addFields` 和 `$replaceRoot`。
+ 从简历令牌恢复变更流
+ 使用 `startAtOperation` 从时间戳恢复变更流（适用于 Amazon DocumentDB 4.0\$1）

## 计费
<a name="change_streams-billing"></a>

默认情况下，Amazon DocumentDB 变更流功能处于禁用状态，并且在启用该功能之前不会产生任何额外费用。在集群中使用更改流会产生额外的读取和写入 IOs 以及存储成本。可以使用 `modifyChangeStreams` API 为集群启用此功能。有关定价的更多信息，请参阅[ Amazon DocumentDB 定价](https://aws.amazon.com/documentdb/pricing/) 

## 限制
<a name="change_streams-limitations"></a>

变更流在 Amazon DocumentDB 中存在以下限制：
+ 在 Amazon DocumentDB 3.6 和 Amazon DocumentDB 4.0 上，变更流只能通过与 Amazon DocumentDB 集群主实例的连接打开。Amazon DocumentDB 3.6 和 Amazon DocumentDB 4.0 不支持从副本实例上的变更流中读取信息。在调用 `watch()` API 操作时，您必须指定 `primary` 读取首选项，以确保所有读取都定向到主实例（请参阅[示例](#change_streams-using_example)部分）。
+ 在 Amazon DocumentDB 5.0 上，可以从主实例和辅助实例（包括全局集群）打开变更流。可以指定辅助读取首选项，将变更流重定向至辅助实例。有关其他最佳实践和限制，请参阅 [在辅助实例上使用变更流](#change-streams-secondary-instances)。
+ 写入集合的变更流的事件最多可在 7 天（默认为 3 小时）内使用。变更流数据将在日志保留时段过后删除，即使没有发生新更改也是如此。
+ 对 `updateMany` 或 `deleteMany` 之类的集合执行长时间运行的写入操作时，会暂时延迟变更流事件的写入，直至长时间运行的写入操作完成为止。
+ Amazon DocumentDB 不支持 MongoDB 操作日志 (`oplog`)。
+ 使用 Amazon DocumentDB，您必须明确在给定集合上启用变更流。
+ 如果变更流事件的总大小（包括变更数据，在请求的情况下还包括完整文档）大于 `16 MB`，客户端将在变更流上遇到读取失败情况。
+ 当使用 `db.watch()` 和 `client.watch()` 搭配 Amazon DocumentDB 3.6 时，目前不支持 Ruby 驱动程序。
+ 当该字段的更新值与之前的值相同时，在 Amazon DocumentDB 中，`updateDescription` 命令在变更流中的输出与 MongoDB 中不同：
  + 如果 `$set` 命令指定了所提供的字段，并且其目标值已经等于源值，则 Amazon DocumentDB 不会在 `updateDescription` 输出中返回字段。
  + 即使指定值等于当前值，MongoDB 也会在输出中返回此字段。

## 启用变更流
<a name="change_streams-enabling"></a>

您可以为给定数据库中的所有集合启用 Amazon DocumentDB 变更流，也可以只针对选定集合启用。下面是如何使用 mongo Shell 为不同使用案例启用变更流的示例。在指定数据库和集合名称时，将空字符串视为通配符。

```
//Enable change streams for the collection "foo" in database "bar"
db.adminCommand({modifyChangeStreams: 1,
    database: "bar",
    collection: "foo", 
    enable: true});
```

```
//Disable change streams on collection "foo" in database "bar"
db.adminCommand({modifyChangeStreams: 1,
    database: "bar",
    collection: "foo", 
    enable: false});
```

```
//Enable change streams for all collections in database "bar"
db.adminCommand({modifyChangeStreams: 1,
    database: "bar",
    collection: "", 
    enable: true});
```

```
//Enable change streams for all collections in all databases in a cluster
db.adminCommand({modifyChangeStreams: 1,
    database: "",
    collection: "", 
    enable: true});
```

如果满足以下任意条件，则将为集合启用变更流：
+ 数据库和集合均已明确启用。
+ 包含该集合的数据库已启用。
+ 所有数据库均已启用。

如果父数据库也启用了变更流，或者集群中的所有数据库都已启用，则从数据库中删除集合不会禁用该集合的变更流。如果创建了与已删除收藏同名的新收藏集，则将为该集合启用变更流。

您可以使用 `$listChangeStreams` 聚合管道阶段列出集群所有已启用的变更流。Amazon DocumentDB 支持的所有聚合阶段都可以在管道中用于额外处理。如果以前启用的某个集合被禁用，则该集合将不会显示在 `$listChangeStreams` 输出中。

```
//List all databases and collections with change streams enabled
cursor = new DBCommandCursor(db,
    db.runCommand(
        {aggregate: 1,
        pipeline: [{$listChangeStreams: 1}], 
        cursor:{}}));
```

```
//List of all databases and collections with change streams enabled 
{ "database" : "test", "collection" : "foo" } 
{ "database" : "bar", "collection" : "" }
{ "database" : "", "collection" : "" }
```

```
//Determine if the database “bar” or collection “bar.foo” have change streams enabled
cursor = new DBCommandCursor(db,
  db.runCommand(
      {aggregate: 1,
       pipeline: [{$listChangeStreams: 1},
                  {$match: {$or: [{database: "bar", collection: "foo"},
                                  {database: "bar", collection: ""},
                                  {database: "", collection: ""}]}}
                 ],
      cursor:{}}));
```

## 示例：在 Python 中使用变更流
<a name="change_streams-using_example"></a>

以下是在集合级别使用带有 Python 的 Amazon DocumentDB 变更流的示例。

```
import os
import sys
from pymongo import MongoClient, ReadPreference
      
username = "DocumentDBusername"
password = <Insert your password> 

clusterendpoint = "DocumentDBClusterEndpoint”
client = MongoClient(clusterendpoint, username=username, password=password, tls='true', tlsCAFile='global-bundle.pem')

db = client['bar']
 
#While ‘Primary’ is the default read preference, here we give an example of
#how to specify the required read preference when reading the change streams
coll = db.get_collection('foo', read_preference=ReadPreference.PRIMARY)
#Create a stream object
stream = coll.watch()
#Write a new document to the collection to generate a change event
coll.insert_one({'x': 1})
#Read the next change event from the stream (if any)
print(stream.try_next())

"""
Expected Output:
{'_id': {'_data': '015daf94f600000002010000000200009025'},
'clusterTime': Timestamp(1571788022, 2),
'documentKey': {'_id': ObjectId('5daf94f6ea258751778163d6')},
'fullDocument': {'_id': ObjectId('5daf94f6ea258751778163d6'), 'x': 1},
'ns': {'coll': 'foo', 'db': 'bar'},
'operationType': 'insert'}
"""

#A subsequent attempt to read the next change event returns nothing, as there are no new changes
print(stream.try_next())

"""
Expected Output:
None
""" 
 
#Generate a new change event by updating a document
result = coll.update_one({'x': 1}, {'$set': {'x': 2}})
print(stream.try_next())

"""
Expected Output:
{'_id': {'_data': '015daf99d400000001010000000100009025'},
'clusterTime': Timestamp(1571789268, 1),
'documentKey': {'_id': ObjectId('5daf9502ea258751778163d7')},
'ns': {'coll': 'foo', 'db': 'bar'},
'operationType': 'update',
'updateDescription': {'removedFields': [], 'updatedFields': {'x': 2}}}
"""
```

以下是在数据库级别使用带有 Python 的 Amazon DocumentDB 变更流的示例。

```
import os
import sys
from pymongo import MongoClient

username = "DocumentDBusername"
password = <Insert your password>
clusterendpoint = "DocumentDBClusterEndpoint”
client = MongoClient(clusterendpoint, username=username, password=password, tls='true', tlsCAFile='global-bundle.pem')

db = client['bar']
#Create a stream object
stream = db.watch()
coll = db.get_collection('foo')
#Write a new document to the collection foo to generate a change event
coll.insert_one({'x': 1})
 
#Read the next change event from the stream (if any)
print(stream.try_next())

"""
Expected Output:
{'_id': {'_data': '015daf94f600000002010000000200009025'},
'clusterTime': Timestamp(1571788022, 2),
'documentKey': {'_id': ObjectId('5daf94f6ea258751778163d6')},
'fullDocument': {'_id': ObjectId('5daf94f6ea258751778163d6'), 'x': 1},
'ns': {'coll': 'foo', 'db': 'bar'},
'operationType': 'insert'}
"""
#A subsequent attempt to read the next change event returns nothing, as there are no new changes
print(stream.try_next())

"""
Expected Output:
None
""" 
 
coll = db.get_collection('foo1')

#Write a new document to another collection to generate a change event
coll.insert_one({'x': 1})
print(stream.try_next())

"""
Expected Output: Since the change stream cursor was the database level you can see change events from different collections in the same database
{'_id': {'_data': '015daf94f600000002010000000200009025'},
'clusterTime': Timestamp(1571788022, 2),
'documentKey': {'_id': ObjectId('5daf94f6ea258751778163d6')},
'fullDocument': {'_id': ObjectId('5daf94f6ea258751778163d6'), 'x': 1},
'ns': {'coll': 'foo1', 'db': 'bar'},
'operationType': 'insert'}
"""
```

## 完整文档查找
<a name="change_streams-lookup"></a>

更新变更事件不包括完整文档；只包括已执行的变更。如果您的使用案例需要用到受更新影响的完整文档，则可以在打开流时启用完整文档查找。

更新变更流事件的 `fullDocument` 文档会指明文档查找时已更新文档的最新版本。如果在更新操作与 `fullDocument` 查找之间发生了变更，则 `fullDocument` 文档可能无法指明更新时的文档状态。

要创建启用更新查找的流对象，请使用以下示例：

```
stream = coll.watch(full_document='updateLookup')
 
#Generate a new change event by updating a document
result = coll.update_one({'x': 2}, {'$set': {'x': 3}})

stream.try_next()
```

流对象输出类似如下：

```
{'_id': {'_data': '015daf9b7c00000001010000000100009025'},
'clusterTime': Timestamp(1571789692, 1),
'documentKey': {'_id': ObjectId('5daf9502ea258751778163d7')},
'fullDocument': {'_id': ObjectId('5daf9502ea258751778163d7'), 'x': 3},
'ns': {'coll': 'foo', 'db': 'bar'},
'operationType': 'update',
'updateDescription': {'removedFields': [], 'updatedFields': {'x': 3}}}
```

## 恢复变更流
<a name="change_streams-resuming"></a>

您可以在以后通过使用恢复令牌来恢复变更流，该令牌相当于上次检索的变更事件文档的 `_id` 字段。

```
import os
import sys
from pymongo import MongoClient

username = "DocumentDBusername"
password = <Insert your password> 
clusterendpoint = "DocumentDBClusterEndpoint”
client = MongoClient(clusterendpoint, username=username, password=password, tls='true', tlsCAFile='global-bundle.pem', retryWrites='false')

db = client['bar']
coll = db.get_collection('foo')
#Create a stream object
stream = db.watch()
coll.update_one({'x': 1}, {'$set': {'x': 4}})
event = stream.try_next()
token = event['_id']
print(token)

"""
Output: This is the resume token that we will later us to resume the change stream
{'_data': '015daf9c5b00000001010000000100009025'}
"""
#Python provides a nice shortcut for getting a stream’s resume token
print(stream.resume_token)

"""
Output
{'_data': '015daf9c5b00000001010000000100009025'}
"""
#Generate a new change event by updating a document
result = coll.update_one({'x': 4}, {'$set': {'x': 5}})
#Generate another change event by inserting a document
result = coll.insert_one({'y': 5})
#Open a stream starting after the selected resume token
stream = db.watch(full_document='updateLookup', resume_after=token)
#Our first change event is the update with the specified _id
print(stream.try_next())

"""
#Output: Since we are resuming the change stream from the resume token, we will see all events after the first update operation. In our case, the change stream will resume from the update operation {x:5}

{'_id': {'_data': '015f7e8f0c000000060100000006000fe038'}, 
'operationType': 'update', 
'clusterTime': Timestamp(1602129676, 6), 
'ns': {'db': 'bar', 'coll': 'foo'}, 
'documentKey': {'_id': ObjectId('5f7e8f0ac423bafbfd9adba2')}, 
'fullDocument': {'_id': ObjectId('5f7e8f0ac423bafbfd9adba2'), 'x': 5}, 
'updateDescription': {'updatedFields': {'x': 5}, 'removedFields': []}}
"""
#Followed by the insert
print(stream.try_next())

"""
#Output:
{'_id': {'_data': '015f7e8f0c000000070100000007000fe038'}, 
'operationType': 'insert', 
'clusterTime': Timestamp(1602129676, 7), 
'ns': {'db': 'bar', 'coll': 'foo'}, 
'documentKey': {'_id': ObjectId('5f7e8f0cbf8c233ed577eb94')}, 
'fullDocument': {'_id': ObjectId('5f7e8f0cbf8c233ed577eb94'), 'y': 5}}
"""
```

## 使用 `startAtOperationTime` 恢复变更流
<a name="change_streams-startAtOperation"></a>

您可以稍后使用 `startAtOperationTime` 从特定时间戳恢复变更流。

**注意**  
Amazon DocumentDB 4.0\$1 提供了使用 `startAtOperationTime` 的功能。使用 `startAtOperationTime` 时，变更流光标将仅返回在指定时间戳或之后发生的更改。`startAtOperationTime` 和 `resumeAfter` 命令是互斥的，因此不能一起使用。

```
import os
import sys
from pymongo import MongoClient

username = "DocumentDBusername"
password = <Insert your password> 
clusterendpoint = "DocumentDBClusterEndpoint”
client = MongoClient(clusterendpoint, username=username, password=password, tls='true', tlsCAFile='rds-root-ca-2020.pem',retryWrites='false')
db = client['bar']
coll = db.get_collection('foo')
#Create a stream object
stream = db.watch()
coll.update_one({'x': 1}, {'$set': {'x': 4}})
event = stream.try_next()
timestamp = event['clusterTime']
print(timestamp)
"""
Output
Timestamp(1602129114, 4)
"""
#Generate a new change event by updating a document
result = coll.update_one({'x': 4}, {'$set': {'x': 5}})
result = coll.insert_one({'y': 5})
#Generate another change event by inserting a document
#Open a stream starting after specified time stamp

stream = db.watch(start_at_operation_time=timestamp)
print(stream.try_next())

"""
#Output: Since we are resuming the change stream at the time stamp of our first update operation (x:4), the change stream cursor will point to that event
{'_id': {'_data': '015f7e941a000000030100000003000fe038'}, 
'operationType': 'update', 
'clusterTime': Timestamp(1602130970, 3), 
'ns': {'db': 'bar', 'coll': 'foo'}, 
'documentKey': {'_id': ObjectId('5f7e9417c423bafbfd9adbb1')}, 
'updateDescription': {'updatedFields': {'x': 4}, 'removedFields': []}}
"""

print(stream.try_next())
"""
#Output: The second event will be the subsequent update operation (x:5)
{'_id': {'_data': '015f7e9502000000050100000005000fe038'}, 
'operationType': 'update', 
'clusterTime': Timestamp(1602131202, 5),
'ns': {'db': 'bar', 'coll': 'foo'}, 
'documentKey': {'_id': ObjectId('5f7e94ffc423bafbfd9adbb2')}, 
'updateDescription': {'updatedFields': {'x': 5}, 'removedFields': []}}
"""

print(stream.try_next())

"""
#Output: And finally the last event will be the insert operation (y:5)
{'_id': {'_data': '015f7e9502000000060100000006000fe038'}, 
'operationType': 'insert', 
'clusterTime': Timestamp(1602131202, 6), 
'ns': {'db': 'bar', 'coll': 'foo'}, 
'documentKey': {'_id': ObjectId('5f7e95025c4a569e0f6dde92')}, 
'fullDocument': {'_id': ObjectId('5f7e95025c4a569e0f6dde92'), 'y': 5}}
"""
```

## 使用 `postBatchResumeToken` 恢复变更流
<a name="change_streams-postBatchResumeToken"></a>

Amazon DocumentDB 变更流现在会返回一个名为 `postBatchResumeToken` 的附加字段。此字段由 `$changestream` 命令和 `getMore` 命令返回。

Python 中的 `$changestream` 命令示例：

```
db.command({"aggregate": "sales", "pipeline": [{ "$changeStream": {}}], "cursor": {"batchSize": 1}})
```

预期输出：

```
cursor" : {
   "firstBatch" : [ ],
   "postBatchResumeToken" : {"_data" : "0167c8cbe60000000004"},
   "id" : NumberLong("9660788144470"),
   "ns" : "test.sales"
}
```

Python 中的 `getMore` 命令示例：

```
db.command({"getMore": NumberLong(<cursor id>), "collection": "sales", "batchSize": 1 })
```

预期输出

```
cursor" : {
   "nextBatch" : [ ],
   "postBatchResumeToken" : {"_data" : "0167c8cbe60000000004"},
   "id" : NumberLong("9660788144470"),
   "ns" : "test.sales"
}
```

该 `postBatchResumeToken` 字段可用于在 `resumeAfter` 字段中打开新的变更流光标，其使用方式与恢复令牌的类似。

打开一个在所选 `postBatchResumeToken` 后开始的流：

```
post_batch_resume_token = output['cursor']['postBatchResumeToken']
stream = db.watch(full_document='updateLookup', resume_after=post_batch_resume_token)
```

常规恢复令牌始终对应于反映实际事件的操作日志（oplog）条目，与常规恢复令牌不同，`postBatchResumeToken` 对应于变更流在服务器上扫描到的操作日志条目，该条目未必是匹配的变更。

尝试使用旧的常规恢复令牌进行恢复将强制数据库扫描指定时间戳与当前时间之间的所有操作日志条目。这可能会在内部生成大量查询，每个子查询都会扫描一小段时间。这将导致 CPU 使用率激增和数据库性能降低。使用最后一个 `postBatchResumeToken` 进行恢复时，将跳过扫描不匹配的操作日志条目。

## 变更流中的事务
<a name="change_streams-transactions"></a>

更改流事件将不包含来自未提交的中 and/or 止事务的事件。例如，如果您启动的事务包含一个 `INSERT` 操作和一个 `UPDATE` 操作，当 `INSERT` 操作成功但 `UPDATE` 操作失败时，该事务将回滚。由于此事务已回滚，您的变更流将不包含此事务的任何事件。

## 修改变更流日志保留期限
<a name="change_streams-modifying_log_retention"></a>

您可以使用 AWS 管理控制台 或将更改流日志的保留期限修改为 1 小时到 7 天之间 AWS CLI。

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

**修改变更流日志保留期限的步骤**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](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. 在**参数组**内，选择与集群相关联的集群参数组。要识别与集群关联的集群参数组，请参阅 [确定 Amazon DocumentDB 集群的参数组](cluster_parameter_groups-describe.md#cluster_parameter_groups-determine)。

1. 所得页面显示您的集群参数组的参数及它们的相应详情。选择 `change_stream_log_retention_duration` 参数。

1. 在页面右上角，选择**编辑**以更改参数的值。可以将 `change_stream_log_retention_duration` 参数修改为 1 小时到 7 天之间。

1. 进行更改，然后选择**修改集群参数**以保存更改。要放弃更改，请选择**取消**。

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

要修改集群参数组的 `change_stream_log_retention_duration` 参数，请使用带以下参数的 `modify-db-cluster-parameter-group` 操作：
+ **--db-cluster-parameter-group-name**：必需。您正在修改的集群参数组的名称。要识别与集群关联的集群参数组，请参阅 [确定 Amazon DocumentDB 集群的参数组](cluster_parameter_groups-describe.md#cluster_parameter_groups-determine)。
+ **--parameters**：必需。您正在修改的参数的名称。每个参数条目必须包含以下内容：
  + **ParameterName**：您正在修改的参数的名称。在本例中，为 `change_stream_log_retention_duration`。
  + **ParameterValue**：此参数的新值。
  + **ApplyMethod**：您希望如何应用对此参数的更改。允许的值为 `immediate` 和 `pending-reboot`。
**注意**  
带 `static` 的 `ApplyType` 参数必须具有 `pending-reboot` 的 `ApplyMethod`。

1. 要更改参数 `change_stream_log_retention_duration` 的值，请运行以下命令并替换 `parameter-value` 为要修改参数的值。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb modify-db-cluster-parameter-group \
       --db-cluster-parameter-group-name sample-parameter-group \
       --parameters "ParameterName=change_stream_log_retention_duration,ParameterValue=<parameter-value>,ApplyMethod=immediate"
   ```

   对于 Windows：

   ```
   aws docdb modify-db-cluster-parameter-group ^
       --db-cluster-parameter-group-name sample-parameter-group ^
       --parameters "ParameterName=change_stream_log_retention_duration,ParameterValue=<parameter-value>,ApplyMethod=immediate"
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
       "DBClusterParameterGroupName": "sample-parameter-group"
   }
   ```

1. 至少等待 5 分钟。

1. 列出 `sample-parameter-group` 参数值以确保已进行更改。

   对于 Linux、macOS 或 Unix：

   ```
   aws docdb describe-db-cluster-parameters \
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   对于 Windows：

   ```
   aws docdb describe-db-cluster-parameters ^
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   此操作的输出将类似于下文（JSON 格式）。

   ```
   {
       "Parameters": [
           {
               "ParameterName": "audit_logs",
               "ParameterValue": "disabled",
               "Description": "Enables auditing on cluster.",
               "Source": "system",
               "ApplyType": "dynamic",
               "DataType": "string",
               "AllowedValues": "enabled,disabled",
               "IsModifiable": true,
               "ApplyMethod": "pending-reboot"
           },
           {
               "ParameterName": "change_stream_log_retention_duration",
               "ParameterValue": "12345",
               "Description": "Duration of time in seconds that the change stream log is retained and can be consumed.",
               "Source": "user",
               "ApplyType": "dynamic",
               "DataType": "integer",
               "AllowedValues": "3600-86400",
               "IsModifiable": true,
               "ApplyMethod": "immediate"
           }
       ]
   }
   ```

------

**注意**  
在日志大小大于 (>) 51,200MB 之前，变更流日志保留期不会删除早于配置 `change_stream_log_retention_duration` 值的日志。

## 在辅助实例上使用变更流
<a name="change-streams-secondary-instances"></a>

要开始在辅助实例上使用变更流，请以 `readPreference` 作为辅助实例打开变更流指针。

可以打开变更流指针来监视集群或数据库中特定集合或所有集合上的变更事件。您可以在任何 Amazon DocumentDB 实例上打开变更流指针，并从写入器和读取器实例获取变更流文档。您可以在写入器和读取器实例上打开的不同变更流指针之间共享变更流令牌（例如 `resumeToken` 或 `startOperationTime`）。

**示例**

```
import os
import sys
from pymongo import MongoClient, ReadPreference
      
username = "DocumentDBusername"
password = <Your password> 

clusterendpoint = "DocumentDBClusterEndpoint"

client = MongoClient(clusterendpoint, username=username, password=password, tls='true', tlsCAFile='global-bundle.pem')

db = client['bar']
 
# Make sure to use SECONDARY to redirect cursor reads from secondary instances
coll = db.get_collection('foo', read_preference=ReadPreference.SECONDARY)

# Create a stream object on RO. The token needs to generated from PRIMARY.
stream = coll.watch(resumeAfter=token)

for event in stream:
   print(event)
```

**辅助实例上的变更流准则和限制**
+ 变更流事件需要从主实例复制到辅助实例。您可以在 Amazon 中根据该`DBInstanceReplicaLag`指标监控延迟 CloudWatch。
+ 辅助实例上的时间戳可能并非一直与主实例同步。在这种情况下，预计辅助实例的时间戳会产生延迟，这样它才能赶得上。作为最佳实践，我们建议使用 `startAtOperationTime` 或 `resumeToken` 在辅助实例上启动监视。
+ 如果文档太大，您在进行 `fullDocumentLookup`，而主实例上的并发写入工作负载很高，那么辅助实例上的吞吐量可能低于主实例。作为最佳实践，我们建议在辅助实例上监控缓冲区的缓存命中率，并确保缓冲区的缓存命中率很高。

# 在 Amazon DocumentDB 8.0 中使用排序规则
<a name="collation"></a>

亚马逊 DocumentDB 8.0 现在支持排序规则。排序规则允许您配置特定语言的字符串比较规则。使用排序规则，您可以指定区分大小写的比较规则，也可以指定语言区域。在 DocumentDB 8.0 中，可以在集合级别或索引级别配置排序规则。在 DocumentDB 中使用排序规则时，将在内部使用以下参数创建一个归类文档。

```
{
locale: string,
caseLevel: boolean,
caseFirst: string,
strength: int,
numericOrdering: boolean,
alternate: string,
maxVariable: string,
backwards: boolean,
normalization: boolean
}
```

## 限制
<a name="collation-limitations"></a>

归类在 Amazon DocumentDB 中有以下限制：
+ 排序规则与亚马逊 DocumentDB 8.0 中提供的计划器 v3 兼容。切换到 plannerv2 或 plannerv1 可能会导致行为不一致，包括 “未找到索引” 错误。
+ 由于库固有的差异，如果导出带有排序规则的 mongodb 集合，则需要在迁移之前更新 metadata.bson 文件并将其版本从 57.1 更改为 60.2。
+ 在极少数情况下，您的排序规则设置可能会违反字符数的内部限制，从而导致以下错误。“错误：归类文档的非默认属性超出了支持的范围。请减少选项的数量。” 在这种情况下，请尝试减少您在归类文档中提供的选项，或者您可以尽可能尝试使用默认值。

# 在亚马逊 DocumentDB 8.0 中使用视图
<a name="views"></a>
+ 亚马逊 DocumentDB 8.0 现在支持视图。视图充当虚拟集合，根据指定的聚合操作呈现数据。创建视图时，您可以定义一个用于转换来自一个或多个源集合的数据的查询。每次访问视图时，Amazon DocumentDB 8.0 都会执行此查询，而不会消耗额外的存储资源。与标准集合不同，Amazon DocumentDB 8.0 中的视图不将文档存储在磁盘上，因此它们是向应用程序呈现转换后或经过筛选的数据的有效解决方案。要在亚马逊文档数据库中创建视图，你可以使用 createView 命令或 db.createView () 帮助器方法：

  ```
  db.createView("viewName","sourceCollection",
  [
      { $match: { status: "active" } },
      { $project: { _id: 1, name: 1, email: 1 } }
  ]
  )
  ```

  这将创建一个基于 “SourceCollection” 的名为 “ViewName” 的视图，该视图仅包含活动文档和项目，仅包括\$1id、name和电子邮件字段。Amazon DocumentDB 中的视图为只读视图。对视图进行写入操作将返回错误。要在大型数据集中获得最佳性能，您可以构建视图管道以最大限度地提高效率。对于复杂的聚合管道，建议使用 \$1match 阶段作为管道的第一阶段或早期阶段，以减少后续阶段需要处理的文档数量，从而提高查询性能。

## 最佳实践
<a name="views-bestpractices"></a>

下面列出了视图应遵循的一些最佳实践。
+ 尽早过滤：在视图管道中尽早使用 \$1match 阶段来减少处理的数据量。
+ 避免复杂聚合：对于经常访问且具有复杂聚合的视图，请考虑使用预先计算的结果创建一个单独的集合，并定期更新。
+ 索引规划：确保视图管道中使用的字段，尤其是在 \$1match 和 \$1sort 操作中使用的字段，已在源集合上正确编制索引。
+ 查询优化：使用 explain 命令来了解视图查询是如何执行的，并进行相应的优化。
+ 视图的替代方案：鉴于 Amazon DocumentDB 和 MongoDB 视图之间的功能差异，在遇到限制时，可以考虑使用带有计划更新的常规集合作为视图的替代方案。

## 聚合器运算符兼容性
<a name="views-aggregators"></a>

Amazon DocumentDB 在视图定义中支持许多聚合运算符，同时继续扩展兼容性。使用视图时，请重点关注以下支持的运算符：
+ \$1match 用于筛选文档
+ \$1project 用于字段选择和转换
+ \$1addFields 用于添加计算字段
+ \$1sort 用于对结果进行排序
+ \$1limit 和 \$1skip 用于分页

一些专门的运算符，例如 \$1currenTop、\$1replaceRoot 和 \$1geoNear，目前在直接聚合查询中工作，而不是视图定义。

## 利用索引和视图
<a name="views-indexes"></a>

Amazon DocumentDB 8.0 中的视图使用基础集合的索引。因此，您无法直接在视图上创建、删除或重建索引。但是，在源集合上精心设计的索引可以显著提高视图查询性能。以下是一些优化视图查询性能的步骤：
+ 确保视图管道中使用的源集合字段上存在适当的索引，尤其是在\$1match和\$1sort操作中
+ 使用 explain () 方法分析查询执行计划并验证索引使用情况。例如，`db.viewName.find({...}).explain() `

# 配合变更流使用 AWS Lambda
<a name="using-lambda"></a>

Amazon DocumentDB 与 AWS Lambda 如此集成，从而您可以使用 Lambda 函数处理变更流中的记录。Lambda 事件源映射是一种资源，它可以用来调用 Lambda 函数，以便处理不直接调用 Lambda 的 Amazon DocumentDB 事件。以 Amazon DocumentDB 变更流作为事件源，您可以构建响应数据变化的事件驱动型应用。例如，您可以使用 Lambda 函数来处理新文档、跟踪现有文档的更新或记录已删除的文档。

您可以配置事件源映射以发送来自 Amazon DocumentDB 变更流的记录至 Lambda 函数。事件可以一次一个发送或批量发送以提高效率，将按顺序处理。您可以根据特定的时间窗持续时间（0-300 秒）或批处理记录计数（最大限值为 10,000 条记录），配置事件源映射的批处理行为。您可以创建多个事件源映射，以使用多个 Lambda 函数处理相同的数据，或使用单个函数处理来自多个流的不同项目。

如果您的函数返回错误，则 Lambda 将重试批处理，直到它成功处理。在变更流中事件已过期的情况下，Lambda 将禁用事件源映射。在这种情况下，您可以创建新的事件源映射，并用您选择的起始位置对其配置。由于轮询器的分布式特性，Lambda 事件源映射至少处理一次事件。因此，在极少数情况下，Lambda 函数可能会收到重复的事件。遵循使用 AWS Lambda 函数的最佳做法并构建幂等函数，以避免与重复事件相关的问题。有关更多信息，请参阅*AWS Lambda 开发者指南*中的[ 结合 Amazon DocumentDB 使用 AWS Lambda console](https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb.html)。

作为性能最佳实践，Lambda 函数需要短时间运行。为避免引入不必要的处理延迟，它也不应执行复杂的逻辑。特别是对于高速流，最好是触发异步后处理 Step Function 工作流，而不是长时间运行的 Lambda 函数。有关 AWS Lambda 的更多信息，请参阅《[AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)》。

## 限制
<a name="lambda-limitations"></a>

以下是使用 Amazon DocumentDB 和 AWS Lambda 时要考虑的限制：
+ AWS Lambda 目前仅在 Amazon DocumentDB 4.0 和 5.0 上受支持。
+ AWS Lambda 目前在弹性集群或全局集群上不受支持。
+ AWS Lambda 有效载荷大小不能超过 6MB。有关 Lambda 批量大小的更多信息，请参阅*AWS Lambda开发者指南*中 [Lambda 事件源映射](https://docs.aws.amazon.com/lambda/latest/dg/invocation-eventsourcemapping.html#invocation-eventsourcemapping-batching)部分的“批处理行为”。