

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 複製 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 叢集建立複製時，複製會在 AWS 您的帳戶中建立，也就是擁有來源 Amazon DocumentDB 叢集的相同帳戶。

**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 儲存磁碟區） 進行變更時，才會配置其他儲存體。若要進一步了解寫入時複製通訊協定，請參閱 [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 個複製項後，下一個複製項是完整複本。複製操作的作用類似於時間點復原。
+ 您無法在與來源 Amazon DocumentDB 叢集不同的 AWS 區域中建立複製。
+ 您無法從沒有資料庫執行個體的 Amazon DocumentDB 叢集建立複製。您只能複製至少具有一個資料庫執行個體的 Amazon DocumentDB 叢集。
+ 您可以在與 Amazon DocumentDB 叢集不同的虛擬私有雲端 (VPC) 中建立複製。不過，VPC 中的子網路必須映射至相同的可用區域。

## Amazon DocumentDB 複製的運作方式
<a name="db-how-db-cloning-works"></a>

Amazon DocumentDB 複製可在 Amazon DocumentDB 叢集的儲存層運作。它使用*copy-on-write*通訊協定，在支援 Amazon DocumentDB 儲存磁碟區的基礎耐久媒體上既快速又節省空間。您可以在 中進一步了解 Amazon DocumentDB 叢集磁碟區[管理 Amazon DocumentDB 叢集](db-clusters.md)。

**Topics**
+ [了解寫入時複製通訊協定](#db-copy-on-write-protocol)
+ [刪除來源叢集磁碟區](#db-deleting-source-cluster-volume)

### 了解寫入時複製通訊協定
<a name="db-copy-on-write-protocol"></a>

Amazon DocumentDB 叢集會將資料存放在基礎 Amazon DocumentDB 儲存磁碟區的頁面中。

例如，在下圖中，您可以找到具有四個資料頁面 1、2、3 和 4 的 Amazon DocumentDB 叢集 (A)。假設複製 B 是從 Amazon DocumentDB 叢集建立的。建立複製時，不會複製任何資料。複製會指向與來源 Amazon DocumentDB 叢集相同的頁面集。

![\[具有 4 頁的 Amazon DocumentDB 叢集磁碟區，用於來源叢集、A 和複製、B\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-1.png)


在建立複製時，通常不需要其他的儲存空間。寫入時複製通訊協定會使用與實體儲存媒體上相同的區段，作為來源區段。只有在來源區段的容量不足以容納整個複製區段時，才需要其他的儲存空間。如果是這種情況，來源區段會複製到另一個實體裝置上。

在下圖中，您可以找到使用相同叢集 A 及其複製 B 之動作的寫入時複製通訊協定範例，如上所示。假設您對 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_tw/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_tw/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 管理主控台 ]

下列程序說明如何使用 複製 Amazon DocumentDB 叢集 AWS 管理主控台。

在具有一個 Amazon DocumentDB 執行個體的 Amazon DocumentDB 叢集中使用 AWS 管理主控台 結果建立複製。

 這些指示適用於建立複製之相同 AWS 帳戶所擁有的資料庫叢集。資料庫叢集必須擁有與 Amazon DocumentDB 不支援跨帳戶複製相同的 AWS 帳戶。

**使用 建立您 AWS 帳戶所擁有資料庫叢集的複製 AWS 管理主控台**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb)：// 開啟 Amazon DocumentDB 主控台。

1. 在導覽窗格中，選擇**叢集**。

1. 從清單中選擇您的 Amazon DocumentDB 叢集，然後在**動作**中，選擇**建立複製**。  
![\[從選取 Amazon DocumentDB 叢集開始建立複製。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/db-cloning-create-clone-1.png)

   建立複製頁面隨即開啟，您可以在其中設定**叢集識別符**和**執行個體類別**，以及 Amazon DocumentDB 叢集複製的其他選項。

1. 在 **Settings** (設定) 區段中，執行下列動作：

   1. 針對**叢集識別符**，輸入您要提供給複製 Amazon DocumentDB 叢集的名稱。

   1. 針對**執行個體組態**，為複製的 Amazon DocumentDB 叢集選取適當的**執行個體類別**。  
![\[從選取 Amazon DocumentDB 叢集並指定資料庫執行個體大小開始建立複製。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/db-cloning-create-clone-2.png)

   1.  針對**網路設定**，為您的使用案例和相關聯的 VPC 安全**群組選擇子網路**群組。

   1.  對於**Encryption-at-rest**，如果來源叢集 （正在複製的叢集） 已啟用加密，則複製的叢集也必須啟用加密。如果此案例為 true，則**啟用加密**選項會顯示為灰色 （停用），但已選取**啟用加密**選項。相反地，如果來源叢集未啟用加密，則可以使用**啟用加密**選項，您可以選擇啟用或停用加密。  
![\[為您的 Amazon DocumentDB 叢集複製指定網路和加密設定。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/db-cloning-create-clone-3-nw-encryption.png)

   1. 完成新的叢集複製組態，方法是選取要匯出的日誌類型 （選用）、輸入用來連線至叢集的特定連接埠，以及啟用保護，避免意外刪除叢集 （預設為啟用）。  
![\[選擇性地選取要匯出的日誌類型、用來連線至叢集的特定連接埠，以及意外刪除叢集的保護表單，以完成新的複製組態。\]](http://docs.aws.amazon.com/zh_tw/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 叢集一起列出，並顯示其目前狀態。在您複製的狀態為 **Available** (可用) 時，表示已可使用。

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

使用 AWS CLI 複製 Amazon DocumentDB 叢集需要幾個步驟。

您使用的`restore-db-cluster-to-point-in-time` AWS CLI 命令會產生具有 0 個 Amazon DocumentDB 執行個體的空 Amazon 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. 使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令在還原的 Amazon DocumentDB 叢集中重新建立 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 執行個體**

使用 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令來建立您複製的資料庫執行個體。

`--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 | 此值會指向複製的最新可還原磁碟區資料。 | 

------