

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

# 使用 Redis OSS 做為 的目標 AWS Database Migration Service
<a name="CHAP_Target.Redis"></a>

Redis OSS 是開放原始碼的記憶體內資料結構存放區，用作資料庫、快取和訊息中介裝置。在記憶體內管理資料可讓讀取或寫入操作僅需不到一毫秒的時間，而且每秒能執行數億個操作。作為記憶體內資料存放區，Redis OSS 支援需要低於毫秒回應時間的最嚴苛應用程式。

使用 AWS DMS，您可以將資料從任何支援的來源資料庫遷移到目標 Redis OSS 資料存放區，並將停機時間降至最低。如需 Redis OSS 的詳細資訊，請參閱 [Redis OSS 文件](https://redis.io/documentation)。

除了現場部署 Redis OSS 之外， AWS Database Migration Service 還支援下列項目：
+ [Amazon ElastiCache (Redis OSS)](https://aws.amazon.com/elasticache/redis/) 做為目標資料存放區。ElastiCache (Redis OSS) 可與 Redis OSS 用戶端搭配使用，並使用開啟的 Redis OSS 資料格式來存放您的資料。
+ [Amazon MemoryDB](https://aws.amazon.com/memorydb/) 做為目標資料存放區。MemoryDB 與 Redis OSS 相容，可讓您使用目前使用的所有 Redis OSS 資料結構、APIs和命令來建置應用程式。

如需使用 Redis OSS 做為 目標的其他資訊 AWS DMS，請參閱下列章節：

**Topics**
+ [使用 Redis OSS 叢集做為 目標的先決條件 AWS DMS](#CHAP_Target.Redis.Prerequisites)
+ [使用 Redis 做為 目標的限制 AWS Database Migration Service](#CHAP_Target.Redis.Limitations)
+ [從關聯式或非關聯式資料庫將資料遷移至 Redis OSS 目標](#CHAP_Target.Redis.Migrating)
+ [將 Redis OSS 的端點設定指定為目標](#CHAP_Target.Redis.EndpointSettings)

## 使用 Redis OSS 叢集做為 目標的先決條件 AWS DMS
<a name="CHAP_Target.Redis.Prerequisites"></a>

DMS 支援獨立組態中的內部部署 Redis OSS 目標，或做為 Redis OSS 叢集，其中資料會自動*分片*到多個節點。碎片化是將資料分成較小區塊 (稱為碎片) 的過程，這些區塊會分散在多個服務器或節點上。實際上，碎片是一個資料分割區，其中包含總資料集的子集，並負責整體工作負載的一部分。

由於 Redis OSS 是 NoSQL 資料存放區的鍵值，因此當您的來源是關聯式資料庫時，要使用的 Redis OSS 金鑰命名慣例為 **schema-name.table-name.primary-key**。在 Redis OSS 中，索引鍵和值不得包含特殊字元 %。否則，DMS 會略過該記錄。

**注意**  
如果您使用 ElastiCache (Redis OSS) 做為目標，DMS 僅支援*啟用叢集模式*的組態。如需使用 ElastiCache (Redis OSS) 6.x 版或更新版本來建立啟用叢集模式的目標資料存放區的詳細資訊，請參閱《*Amazon ElastiCache (Redis OSS) 使用者指南*》中的[入門](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/GettingStarted.html)。

開始資料庫遷移之前，請使用下列條件啟動 Redis OSS 叢集。
+ 您的叢集有一個或多個碎片。
+ 如果您使用的是 ElastiCache (Redis OSS) 目標，請確定您的叢集未使用 IAM 角色型存取控制。反之，請使用 Redis OSS 身分驗證來驗證使用者。
+ 啟用異地同步備份 (可用區域)。
+ 請確定叢集有足夠的記憶體容量，可儲存從資料庫遷移過來的資料。
+ 在開始初始遷移任務之前，請確定您的目標 Redis OSS 叢集沒有所有資料。

在建立叢集組態之前，您應該先決定資料遷移的安全性需求。DMS 支援遷移至目標複寫群組，無論其加密組態為何。但是，您只能在建立叢集組態時啟用或停用加密。

## 使用 Redis 做為 目標的限制 AWS Database Migration Service
<a name="CHAP_Target.Redis.Limitations"></a>

使用 Redis OSS 做為目標時，適用下列限制：
+ 由於 Redis OSS 是金鑰值 no-sql 資料存放區，因此當您的來源是關聯式資料庫時，要使用的 Redis OSS 金鑰命名慣例為 `schema-name.table-name.primary-key`。
+ 在 Redis OSS 中，索引鍵值不能包含特殊字元 `%`。否則，DMS 會略過該記錄。
+ DMS 不會遷移包含 `%` 字元的資料列。
+ DMS 不會遷移包含欄位名稱中`%`字元的欄位。
+ 不支援完全的 LOB 模式。
+  使用 ElastiCache (Redis OSS) 做為目標時，不支援私有憑證授權機構 (CA)。
+ AWS DMS 使用 Redis 做為目標端點時， 不支援包含內嵌`'\0'`字元的來源資料。包含內嵌`'\0'`字元的資料會在第一個`'\0'`字元被截斷。

## 從關聯式或非關聯式資料庫將資料遷移至 Redis OSS 目標
<a name="CHAP_Target.Redis.Migrating"></a>

您可以將資料從任何來源 SQL 或 NoSQL 資料存放區直接遷移至 Redis OSS 目標。設定和開始遷移至 Redis OSS 目標類似於使用 DMS 主控台或 API 的任何完全載入和變更資料擷取遷移。若要執行資料庫遷移至 Redis OSS 目標，請執行下列動作。
+ 建立複寫執行個體，以執行遷移的所有程序。如需詳細資訊，請參閱[建立複寫執行個體](CHAP_ReplicationInstance.Creating.md)。
+ 指定來源端點。如需詳細資訊，請參閱[來源與目標端點](CHAP_Endpoints.Creating.md)。
+ 尋找叢集的 DNS 名稱和連接埠號碼。
+ 下載憑證套件，可用其來驗證 SSL 連線。
+ 指定目標端點，如下所述。
+ 建立單一任務或一組任務來定義您希望使用的資料表和複寫程序。如需詳細資訊，請參閱[建立任務](CHAP_Tasks.Creating.md)。
+ 將來源資料庫中的資料遷移至目標叢集。

開始資料庫遷移的方法有兩種：

1. 您可以選擇 AWS DMS 主控台，並在其中執行每個步驟。

1. 您可以使用 AWS Command Line Interface (AWS CLI)。如需搭配 使用 CLI 的詳細資訊 AWS DMS，請參閱 [AWS CLI for AWS DMS](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)。

**若要尋找叢集的 DNS 名稱和連接埠號碼**
+ 使用以下 AWS CLI 命令為 提供複寫群組`replication-group-id`的名稱。

  ```
  aws elasticache describe-replication-groups --replication-group-id myreplgroup
  ```

  此處的輸出會顯示 `Address` 屬性中的 DNS 名稱，以及叢集中主節點 `Port` 屬性中的連接埠號碼。

  ```
   ...
  "ReadEndpoint": {
  "Port": 6379,
  "Address": "myreplgroup-
  111.1abc1d.1111.uuu1.cache.example.com"
  }
  ...
  ```

  如果您使用 MemoryDB 做為目標，請使用下列 AWS CLI 命令將端點地址提供給 Redis OSS 叢集。

  ```
  aws memorydb describe-clusters --clusterid clusterid
  ```

**下載憑證套件以用於驗證 SSL 連線**
+ 在命令列輸入下列 `wget` 命令。Wget 是一個免費的 GNU 命令行公用程式工具，用於從網路下載文件。

  ```
  wget https://s3.aws-api-domain/rds-downloads/rds-combined-ca-bundle.pem
  ```

  在此， 會`aws-api-domain`完成您 AWS 區域中存取指定 S3 儲存貯體所需的 Amazon S3 網域，以及其提供的 rds-combined-ca-bundle.pem 檔案。

**使用 AWS DMS 主控台建立目標端點**

此端點適用於已在執行的 Redis OSS 目標。
+ 在主控台中，在導覽窗格中選擇**端點**，然後選擇**建立端點**。下表說明相關設定。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Target.Redis.html)

當您完成提供端點的所有資訊時， AWS DMS 會建立您的 Redis OSS 目標端點，以便在資料庫遷移期間使用。

如需建立遷移任務和開始資料庫遷移的相關資訊，請參閱 [建立任務](CHAP_Tasks.Creating.md)。

## 將 Redis OSS 的端點設定指定為目標
<a name="CHAP_Target.Redis.EndpointSettings"></a>

若要建立或修改目標端點，您可以使用主控台或 `CreateEndpoint` 或 `ModifyEndpoint` API 作業。

對於 AWS DMS 主控台中的 Redis OSS 目標，請在**建立端點**或修改**端點**主控台頁面上指定**端點特定設定**。

使用 `CreateEndpoint` 和 `ModifyEndpoint` API 操作時，請指定 `RedisSettings` 選項的要求參數。以下的範例示範如何使用 AWS CLI進行此設定。

```
aws dms create-endpoint --endpoint-identifier my-redis-target
--endpoint-type target --engine-name redis --redis-settings 
'{"ServerName":"sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com","Port":6379,"AuthType":"auth-token", 
 "SslSecurityProtocol":"ssl-encryption", "AuthPassword":"notanactualpassword"}'

{
    "Endpoint": {
        "EndpointIdentifier": "my-redis-target",
        "EndpointType": "TARGET",
        "EngineName": "redis",
        "EngineDisplayName": "Redis",
        "TransferFiles": false,
        "ReceiveTransferredFiles": false,
        "Status": "active",
        "KmsKeyId": "arn:aws:kms:us-east-1:999999999999:key/x-b188188x",
        "EndpointArn": "arn:aws:dms:us-east-1:555555555555:endpoint:ABCDEFGHIJKLMONOPQRSTUVWXYZ",
        "SslMode": "none",
        "RedisSettings": {
            "ServerName": "sample-test-sample.zz012zz.cluster.eee1.cache.bbbxxx.com",
            "Port": 6379,
            "SslSecurityProtocol": "ssl-encryption",
            "AuthType": "auth-token"
        }
    }
}
```

`--redis-settings` 參數如下：
+ `ServerName`–（必要） 在類型 中`string`，指定資料將遷移到的 Redis OSS 叢集，並位於相同的 VPC 中。
+ `Port`–(必要) 類型為 `number`，用於存取端點的連接埠值。
+ `SslSecurityProtocol`–(選用) 有效值包括 `plaintext` 和 `ssl-encryption`。預設值為 `ssl-encryption`。

  `plaintext` 選項不為端點和資料庫之間的流量提供 Transport Layer Security (TLS) 加密。

  使用 `ssl-encryption` 建立加密連線。 `ssl-encryption` 不需要 SSL 憑證授權機構 (CA) ARN 來驗證伺服器的憑證，但可以選擇使用 `SslCaCertificateArn` 設定進行身分識別。如果未提供憑證授權機構 ARN，DMS 會使用 Amazon 根 CA。

  使用內部部署 Redis OSS 目標時，您可以使用 `SslCaCertificateArn` 將公有或私有憑證授權機構 (CA) 匯入 DMS，並提供該 ARN 進行伺服器身分驗證。使用 ElastiCache (Redis OSS) 做為目標時，不支援私有 CA。
+ `AuthType`–（必要） 指出連線至 Redis OSS 時要執行的身分驗證類型。有效值包括 `none`、`auth-token` 與 `auth-role`。

  `auth-token` 選項需要提供「*AuthPassword*」，而 `auth-role` 選項需要提供「*AuthUserName*」和「*AuthPassword*」。