

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

# 使用 升級 Amazon DocumentDB 叢集 AWS Database Migration Service
<a name="docdb-migration.versions"></a>

**重要**  
Amazon DocumentDB 不會遵循與 MongoDB 相同的支援生命週期，而 MongoDB end-of-life排程不適用於 Amazon DocumentDB。

您可以使用 將 Amazon DocumentDB 叢集升級至更高版本，並將停機時間降至最低 AWS DMS。 AWS DMS 是一項全受管服務，可讓您輕鬆地從較舊的 Amazon DocumentDB 版本、關聯式資料庫和非關聯式資料庫遷移至目標 Amazon DocumentDB 叢集。

**Topics**
+ [步驟 1：啟用變更串流](#docdb-migration.versions-step1)
+ [步驟 2：修改變更串流保留期間](#docdb-migration.versions-step2)
+ [步驟 3：遷移您的索引](#docdb-migration.versions-step3)
+ [步驟 4：建立 AWS DMS 複寫執行個體](#docdb-migration.versions-step4)
+ [步驟 5：建立 AWS DMS 來源端點](#docdb-migration.versions-step5)
+ [步驟 6：建立 AWS DMS 目標端點](#docdb-migration.versions-step6)
+ [步驟 7：建立和執行遷移任務](#docdb-migration.versions-step7)
+ [步驟 8：將應用程式端點變更為目標 Amazon DocumentDB 叢集](#docdb-migration.versions-step8)

## 步驟 1：啟用變更串流
<a name="docdb-migration.versions-step1"></a>

若要執行最短的停機時間遷移， AWS DMS 需要存取叢集的變更串流。[Amazon DocumentDB 變更串流](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-enabling)提供在叢集集合和資料庫中發生的按時間順序排列的更新事件序列。從變更串流讀取 AWS DMS 可讓 執行變更資料擷取 (CDC)，並將增量更新套用至目標 Amazon DocumentDB 叢集。

若要針對特定資料庫上的所有集合啟用變更串流，請使用 mongo shell 驗證 Amazon DocumentDB 叢集，並執行下列命令：

```
db.adminCommand({modifyChangeStreams: 1,
    database: "db_name",
    collection: "", 
    enable: true});
```

## 步驟 2：修改變更串流保留期間
<a name="docdb-migration.versions-step2"></a>

接著，根據您想要在變更串流中保留變更事件的時間長度，修改變更串流保留期間。例如，如果您預期使用 AWS DMS 的 Amazon DocumentDB 叢集遷移需要 12 小時，您應該將變更串流保留設定為大於 12 小時的值。Amazon DocumentDB 叢集的預設保留期間為三小時。您可以使用 AWS 管理主控台 或 ，將 Amazon DocumentDB 叢集的變更串流日誌保留期間修改為一小時到七天 AWS CLI。如需詳細資訊，請參閱[修改變更串流日誌保留期間。](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html#change_streams-modifying_log_retention)

## 步驟 3：遷移您的索引
<a name="docdb-migration.versions-step3"></a>

在目標 Amazon DocumentDB 叢集上建立與來源 Amazon DocumentDB 叢集上相同的索引。雖然 AWS DMS 會處理資料遷移，但不會遷移索引。若要遷移索引，請使用 Amazon DocumentDB Index Tool 從來源 Amazon DocumentDB 叢集匯出索引。您可以建立 Amazon DocumentDB 工具 GitHub 儲存庫的複本，並遵循 中的指示來取得工具[https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md)。您可以從 Amazon EC2 執行個體或在與 Amazon DocumentDB 叢集相同的 Amazon VPC 中執行 AWS Cloud9 的環境執行工具。

在下列範例中，將每個*使用者輸入預留位置*取代為您自己的資訊。

下列程式碼會從來源 Amazon DocumentDB 叢集傾印索引：

```
python migrationtools/documentdb_index_tool.py --dump-indexes
--uri mongodb://sample-user:user-password@sample-source-cluster.node.us-east 1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
--dir ~/index.js/ 

2020-02-11 21:51:23,245: Successfully authenticated to database: admin2020-02-11 21:46:50,432: Successfully connected to instance docdb-40-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017
2020-02-11 21:46:50,432: Retrieving indexes from server...2020-02-11 21:46:50,440: Completed writing index metadata to local folder: /home/ec2-user/index.js/
```

索引成功匯出後，請在目標 Amazon DocumentDB 叢集中還原這些索引。若要還原您在上一個步驟中匯出的索引，請使用 Amazon DocumentDB Index Tool。下列命令會從指定的目錄還原目標 Amazon DocumentDB 叢集中的索引。

```
python migrationtools/documentdb_index_tool.py --restore-indexes
--uri mongodb://sample-user:user-password@sample-destination-cluster.node.us-east 1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
--dir ~/index.js/ 

2020-02-11 21:51:23,245: Successfully authenticated to database: admin2020-02-11 21:51:23,245: Successfully connected to instance docdb-50-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017
2020-02-11 21:51:23,264: testdb.coll: added index: _id
```

若要確認您已正確還原索引，請使用 mongo shell 連線至目標 Amazon DocumentDB 叢集，並列出指定集合的索引。請參閱下列程式碼：

```
mongo --ssl 
--host docdb-xx-xx.cluster-xxxxxxxx.us-east-1.docdb.amazonaws.com:27017
--sslCAFile rds-ca-2019-root.pem --username documentdb --password documentdb

db.coll.getIndexes()
```

## 步驟 4：建立 AWS DMS 複寫執行個體
<a name="docdb-migration.versions-step4"></a>

 AWS DMS 複寫執行個體會從來源 Amazon DocumentDB 叢集連接和讀取資料，並將其寫入您的目標 Amazon DocumentDB 叢集。 AWS DMS 複寫執行個體可以同時執行大量載入和 CDC 操作。此處理大部分發生在記憶體中。不過，大型操作可能需要在磁碟上進行一些緩衝。快取交易和日誌檔案也會寫入磁碟。一旦遷移資料，複寫執行個體也會串流任何變更事件，以確保來源和目標同步。

**若要建立 AWS DMS 複寫執行個體：**

1. 開啟 AWS DMS [主控台](https://console.aws.amazon.com/dms/v2)。

1. 在導覽窗格中，選擇 **Replication instances (複寫執行個體)**。

1. 選擇 **Create replication instance (建立複寫執行個體)** 並輸入下列資訊：
   +  在名稱中，輸入您選擇的名稱。例如 `docdb36todocdb40`。
   +  在**描述**中，輸入您選擇的描述。對於 listitem，Amazon DocumentDB 3.6 到 Amazon DocumentDB 4.0 複寫執行個體。
   + 針對**執行個體類別**，根據您的需求選擇大小。
   + 針對**引擎版本**，選擇 `3.4.1.`
   + 針對 **Amazon VPC**，選擇存放來源和目標 Amazon DocumentDB 叢集的 Amazon VPC。
   +  對於**配置的儲存**體 (GiB)，請使用預設值 50 GiB。如果您有高寫入輸送量工作負載，請增加此值以符合您的工作負載。
   + 對於**異地**同步備份，如果您需要高可用性和容錯移轉支援，請選擇**是**。
   +  對於 **Publicly accessible (可公開存取)**，啟用此選項。  
![\[影像：複寫執行個體組態對話方塊，顯示 10 個可設定的欄位和按鈕。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/replication-instance-config.png)

1. 選擇 **Create replication instance (建立複寫執行個體)**。

## 步驟 5：建立 AWS DMS 來源端點
<a name="docdb-migration.versions-step5"></a>

來源端點用於來源 Amazon DocumentDB 叢集。

**建立來源端點**

1. 開啟 AWS DMS [主控台](https://console.aws.amazon.com/dms/v2)。

1. 在導覽窗格中選擇**端點**。

1. 選擇 `Create endpoint`並輸入下列資訊：
   + 對於 **Endpoint type (端點類型)**，選擇 **Source (來源)**。
   + >對於**端點識別符**，輸入易於記住的名稱，例如 `docdb-source`。
   + 針對**來源引擎**，選擇 `docdb`。
   + 針對**伺服器名稱**，輸入來源 Amazon DocumentDB 叢集的 DNS 名稱。
   + 在**連接埠**中，輸入來源 Amazon DocumentDB 叢集的連接埠號碼。
   + 針對 **SSL 模式**，選擇 `verify-full`。
   + 針對 **CA 憑證**，選擇**新增 CA 憑證**。下載[新的 CA 憑證](https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b) 以建立 TLS 連線套件。針對**憑證識別符**，輸入 `rds-combined-ca-bundle` 。對於 **Import certificate file (匯入憑證檔案)**，請選擇 **Choose file (選擇檔案)**，然後瀏覽至您先前下載的 `.pem` 檔案。選取並開啟檔案。選擇**匯入憑證**，然後從**選擇憑證**下拉式清單`rds-combined-ca-bundle`中選擇
   + 針對**使用者名稱**，輸入來源 Amazon DocumentDB 叢集的主要使用者名稱。
   + 針對**密碼**，輸入來源 Amazon DocumentDB 叢集的主要密碼。
   + 針對**資料庫名稱**，輸入您要升級的資料庫名稱。  
![\[影像： AWS DMS 來源的端點組態對話方塊，顯示九個可設定欄位和下拉式功能表。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/endpoint-config.png)

1. 測試您的連線以確認連線已成功設定。  
![\[影像： AWS DMS 來源的測試端點連線對話方塊，顯示兩個下拉式選單、一個測試按鈕，以及執行的測試清單。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/test-endpoint-config.png)

1. 選擇**建立端點**。

**注意**  
AWS DMS 一次只能遷移一個資料庫。

## 步驟 6：建立 AWS DMS 目標端點
<a name="docdb-migration.versions-step6"></a>

目標端點適用於您的目標 Amazon DocumentDB 叢集。

**若要建立目標端點：**

1. 開啟 [AWS DMS 主控台](https://console.aws.amazon.com/dms/v2)。

1. 在導覽窗格中選擇**端點**。

1. 選擇 **Create endpoint (建立端點)** 並輸入下列資訊：
   + 對於 **Endpoint type (端點類型)**，選擇 **Target (目標)**。
   + 對於 **Endpoint identifier (端點識別符)**，輸入易記的名稱，例如 `docdb-target`。
   + 針對**來源引擎**，選擇 `docdb`。
   + 針對**伺服器名稱**，輸入目標 Amazon DocumentDB 叢集的 DNS 名稱。
   + 在**連接埠**中，輸入目標 Amazon DocumentDB 叢集的連接埠號碼。
   + 針對 **SSL 模式**，選擇 `verify-full`。
   + 對於 **CA 憑證**，請從選擇`rds-combined-ca-bundle`憑證下拉式清單**中選擇現有憑證**。
   + 針對**使用者名稱**，輸入目標 Amazon DocumentDB 叢集的主要使用者名稱。
   + 針對**密碼**，輸入目標 Amazon DocumentDB 叢集的主要密碼。
   + 針對**資料庫名稱**，輸入用於設定來源端點的相同資料庫名稱。  
![\[影像： AWS DMS 目標的端點組態對話方塊，顯示九個可設定欄位和下拉式功能表。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/target-endpoint-config.png)

1. 測試您的連線以確認連線已成功設定。  
![\[影像： AWS DMS 目標的測試端點連線對話方塊，顯示兩個下拉式功能表、測試按鈕，以及執行的測試清單。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/test-target-endpoint.png)

1. 選擇**建立端點**。

## 步驟 7：建立和執行遷移任務
<a name="docdb-migration.versions-step7"></a>

 AWS DMS 任務會將複寫執行個體與您的來源和目標執行個體繫結。建立遷移任務時，您可以指定來源端點、目標端點、複寫執行個體和任何所需的遷移設定。可以使用三種不同的遷移類型建立 AWS DMS 任務 - 遷移現有資料、遷移現有資料，以及複寫進行中的變更或僅複寫資料變更。由於本演練的目的是以最短的停機時間升級 Amazon DocumentDB 叢集，因此步驟會利用 選項來遷移現有資料並複寫持續變更。使用此選項時， 會在遷移現有資料時 AWS DMS 擷取變更。即使已載入大量資料， 仍會 AWS DMS 繼續擷取和套用變更。來源和目標資料庫最終將保持同步，最大限度地減少停機時間。

**以下是為最小停機時間遷移建立遷移任務的步驟：**

1. 開啟 AWS DMS [主控台](https://console.aws.amazon.com/dms/v2)。

1. 在導覽窗格中，選擇**資料庫遷移任務**。

1. 選擇**建立資料庫遷移任務**，然後在**任務組態**區段中輸入下列資訊：
   + 針對**任務識別符**，輸入易於記住的名稱，例如 `my-dms-upgrade-task`。
   + 針對**描述性 Amazon Resource Name (ARN)**，輸入易於使用的名稱以覆寫預設 DMS ARN。
   + 對於 **Replication instance (複寫執行個體)**，選擇您在 [步驟 4：建立 AWS DMS 複寫執行個體](#docdb-migration.versions-step4) 中建立的複寫執行個體。
   + 針對**來源資料庫端點**，選擇您在 中建立的來源端點[步驟 5：建立 AWS DMS 來源端點](#docdb-migration.versions-step5)。
   + 針對**目標資料庫端點**，選擇您在 中建立的目標端點[步驟 6：建立 AWS DMS 目標端點](#docdb-migration.versions-step6)。
   + 針對**遷移類型**，選擇**遷移和複寫**。  
![\[影像：遷移任務的任務組態對話方塊。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/task-config.png)

1. 在**任務設定**區段中輸入下列資訊：
   + 針對**目標資料表準備模式**區段，選擇**不執行任何**動作。這將確保不會捨棄步驟 3 中建立的索引。
   + 針對**任務日誌**子區段，選取**開啟 CloudWatch 日誌**。
   + 針對**遷移任務啟動組態**，選擇**建立時自動**。這會在您建立遷移任務後自動啟動遷移任務。
   + 選擇**建立資料庫遷移任務**。

AWS DMS 現在開始將資料從來源 Amazon DocumentDB 叢集遷移至目標 Amazon DocumentDB 叢集。任務狀態應該會從開始變更為執行中。您可以在 AWS DMS 主控台中選擇任務來監控進度。幾分鐘/小時後 （取決於遷移的大小），狀態應該會從 變更為載入完成，並持續複寫。這表示 AWS DMS 已經完成來源 Amazon DocumentDB 叢集到目標 Amazon DocumentDB 叢集的完整負載遷移，現在正在複寫變更事件。

![\[影像：遷移摘要對話方塊。\]](http://docs.aws.amazon.com/zh_tw/documentdb/latest/developerguide/images/migration-load-complete.png)


最後，您的來源和目標將同步。您可以在集合上執行 `count()`操作來驗證所有變更事件是否同步。

## 步驟 8：將應用程式端點變更為目標 Amazon DocumentDB 叢集
<a name="docdb-migration.versions-step8"></a>

完全載入完成且 CDC 程序持續複寫後，您就可以將應用程式的資料庫連線端點從來源 Amazon DocumentDB 叢集變更為目標 Amazon DocumentDB 叢集。