使用 Amazon Redshift 資料庫作為 AWS Database Migration Service 的目標 - AWS Database Migration Service

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

使用 Amazon Redshift 資料庫作為 AWS Database Migration Service 的目標

您可以使用 AWS Database Migration Service 將資料遷移到 Amazon Redshift 資料庫。Amazon Redshift 是一種在雲端中完全受管的 PB 級資料倉儲服務。您可以從任何受支援的來源資料庫,將資料遷移到作為目標的 Amazon Redshift 資料庫。

您可以使用 Amazon Redshift Serverless 作為 AWS DMS 的目標。如需詳細資訊,請參閱下列 使用 AWS DMS 搭配 Amazon Redshift Serverless 作為目標

Amazon Redshift 叢集必須和複寫執行個體位於相同的 AWS 帳戶和相同的 AWS 區域。

在資料庫遷移到 Amazon Redshift 的期間,AWS DMS 會先將資料移至 Amazon S3 儲存貯體。檔案進入 Amazon S3 儲存貯體時,AWS DMS 就會將它們傳輸到 Amazon Redshift 資料倉儲的正確資料表中。AWS DMS 會在和 Amazon Redshift 資料庫相同的 AWS 區域中建立 S3 儲存貯體。AWS DMS 複寫執行個體必須位於該相同 AWS 區域。

如果您使用 AWS CLI 或 DMS API 將資料遷移至 Amazon Redshift,必須設定 AWS Identity and Access Management (IAM) 角色以允許 S3 存取。如需建立此 IAM 角色的詳細資訊,請參閱建立與 AWS CLI 和 AWS DMS API 搭配使用的身分與存取權管理角色

Amazon Redshift 端點提供以下作業的全自動化:

  • 產生結構描述與映射資料類型

  • 完全載入來源資料庫資料表

  • 變更來源資料表的增量載入

  • 在來源資料表中套用資料定義語言 (DDL) 的結構描述變更

  • 同步完全載入和變更資料擷取 (CDC) 程序。

AWS Database Migration Service 支援完整載入和變更處理操作。AWS DMS 會讀取來源資料庫的資料,並建立一系列的逗號分隔值 (.csv) 檔案。針對完全載入操作,AWS DMS 會為每個資料表建立檔案。然後,AWS DMS 會將每個資料表的資料表檔案複製到 Amazon S3 中的個別資料夾。當檔案上傳到 Amazon S3 後,AWS DMS 會傳送複製命令,將檔案中的資料複製到 Amazon Redshift。針對變更處理操作,AWS DMS 會將網路變更複製到 .csv 檔案。然後,AWS DMS 會將網路變更檔案上傳到 Amazon S3,並將資料複製到 Amazon Redshift。

如需使用 Amazon Redshift 作為 AWS DMS 目標的其他詳細資訊,請參閱以下各節:

使用 Amazon Redshift 資料庫作為 AWS Database Migration Service 目標的事前準備

以下清單說明使用 Amazon Redshift 作為資料遷移目標的必要事前準備:

  • 使用 AWS 管理主控台啟動 Amazon Redshift 叢集。注意 AWS 帳戶和 Amazon Redshift 叢集的基本資訊,例如您的密碼、使用者名稱和資料庫名稱。建立 Amazon Redshift 目標端點時,您需要這些值。

  • Amazon Redshift 叢集必須和複寫執行個體位於相同的 AWS 帳戶和相同的 AWS 區域。

  • AWS DMS 複寫執行個體需要您叢集所使用 Amazon Redshift 端點的網路連線 (主機名稱和連接埠)。

  • AWS DMS 使用 Amazon S3 儲存貯體將資料傳輸至 Amazon Redshift 資料庫。為使 AWS DMS 能建立儲存貯體,主控台使用 IAM 角色,dms-access-for-endpoint。如果您使用 AWS CLI 或 DMS API 建立以 Amazon Redshift 做為目標資料庫的資料庫遷移,您必須建立這個 IAM 角色。如需建立此角色的詳細資訊,請參閱建立與 AWS CLI 和 AWS DMS API 搭配使用的身分與存取權管理角色

  • AWS DMS 將 BLOB、CLOBs 和 NCLOB 轉換成目標 Amazon Redshift 執行個體中的 VARCHAR。Amazon Redshift 不支援大於 64 KB 的 VARCHAR 資料類型,所以您無法在 Amazon Redshift 存放傳統的 LOB。

  • 將目標中繼資料任務設定 BatchApplyEnabled 設為 true,以讓 AWS DMS 在 CDC 期間處理 Amazon Redshift 目標資料表的變更。來源和目標資料表上的主索引鍵皆為必填。在沒有主索引鍵的情況下,會依陳述式逐一套用變更。此外,這會導致目標延遲並影響叢集遞交佇列,在 CDC 期間對任務效能造成負面影響。

使用 Redshift 作為目標所需的權限

使用 GRANT 命令定義使用者或使用者群組的存取權限。權限包括存取選項,例如能夠讀取資料表和檢視中的資料、寫入資料及建立資料表。如需將 GRANT 搭配 Amazon Redshift 使用的詳細資訊,請參閱《Amazon Redshift 資料庫開發人員》指南中的「GRANT」。

以下是為 Amazon Redshift 資料表和檢視上的資料表、資料庫、結構描述、函數、程序或語言層級權限授與特定權限的語法。

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

下列語法適用於 Amazon Redshift 資料表和檢視上的資料欄層級權限。

GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | GROUP group_name | PUBLIC } [, ...]

以下語法可將 ASSUMEROLE 權限授與具有指定角色的使用者和群組。

GRANT ASSUMEROLE ON { 'iam_role' [, ...] | ALL } TO { username | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD } [, ...]

使用 Amazon Redshift 做為 AWS Database Migration Service 目標的限制

使用 Amazon Redshift 資料庫作為目標時有下列限制:

  • 請勿為當成 Amazon Redshift 目標中繼儲存區的 S3 儲存貯體啟用版本控制功能。如果您需要 S3 版本控制,請使用生命週期政策以主動刪除舊版本。否則,您可能會因 S3 list-object 呼叫逾時而遭遇端點測試連線失敗。若要建立 S3 儲存貯體的生命週期政策,請參閱管理儲存生命週期。若要刪除 S3 物件的版本,請參閱刪除啟用版本控制功能之儲存貯體中的物件

  • 不支援以下 DDL:

    ALTER TABLE table name MODIFY COLUMN column name data type;
  • 對於名稱開頭為底線 (_) 的結構描述,AWS DMS 無法遷移或複寫其變更。如果您有名稱以底線開頭的結構描述,請使用映射轉換重新命名目標上的結構描述。

  • Amazon Redshift 不支援大於 64 KB 的 VARCHAR。傳統資料庫的 LOB 無法存放在 Amazon Redshift。

  • 當任何主索引鍵欄名稱使用保留字時,不支援將 DELETE 陳述式套用至具有多欄主索引鍵的資料表。請前往此處查看 Amazon Redshift 保留字的清單。

  • 如果來源系統對來源資料表的主索引鍵執行 UPDATE 操作,您可能會遇到效能問題。將變更套用至目標時,就會發生這些效能問題。這是因為 UPDATE (和 DELETE) 操作會依靠主索引鍵值來識別目標資料列。如果您更新來源資料表的主索引鍵,您的任務日誌會包含如下訊息:

    Update on table 1 changes PK to a PK that was previously updated in the same bulk update.
  • DMS 在設定 Redshift 叢集的端點時不支援自訂 DNS 名稱,且您必須使用 Amazon 提供的 DNS 名稱。由於 Amazon Redshift 叢集必須與複寫執行個體位於相同的 AWS 帳戶和區域,因此如果您使用自訂 DNS 端點,驗證會失敗。

  • Amazon Redshift 具有預設的 4 小時閒置工作階段逾時。當 DMS 複寫任務中沒有任何活動時,Redshift 會在 4 小時後中斷工作階段的連線。DMS 無法連線且可能需要重新啟動時,可能會導致錯誤。作為因應措施,請針對 DMS 複寫使用者設定超過 4 小時的工作階段逾時限制。或者,請參閱《Amazon Redshift 資料庫開發人員指南》中有關「ALTER USER」的說明。

  • AWS DMS 在複寫沒有主索引鍵或唯一索引鍵的來源資料表資料時,可能會有很高的 CDC 延遲,導致效能降至無法接受的等級。

設定 Amazon Redshift 資料庫作為 AWS Database Migration Service 的目標

您必須設定 AWS Database Migration Service 才能使用 Amazon Redshift 執行個體。下表說明 Amazon Redshift 端點可用的組態屬性。

屬性

描述

server

您使用的 Amazon Redshift 叢集名稱。

port

Amazon Redshift 的連接埠號碼。預設值為 5439。

用戶名

已註冊使用者的 Amazon Redshift 使用者名稱。

密碼

在 username 屬性中命名之使用者的密碼。

database

您使用的 Amazon Redshift 資料倉儲 (服務) 名稱。

如果您想將額外的連線字串屬性新增到您的 Amazon Redshift 端點,您可以指定 maxFileSizefileTransferUploadStreams 屬性。如需這些屬性的詳細資訊,請參閱使用 Amazon Redshift 作為 AWS DMS 目標時的端點設定

使用增強型 VPC 路由搭配 Amazon Redshift 作為 AWS Database Migration Service 的目標

如果您對 Amazon Redshift 目標使用增強型 VPC 路由,則 Amazon Redshift 叢集與資料儲存庫之間的所有 COPY 流量會通過 VPC。因為增強型 VPC 路由會影響 Amazon Redshift 存取其他資源的方式,如果未正確設定 VPC,COPY 命令可能會失敗。

AWS DMS 會受到此行為的影響,因為它使用 COPY 命令將 S3 的資料移至 Amazon Redshift 叢集。

以下是 AWS DMS 將資料載入到 Amazon Redshift 目標所採取的步驟:

  1. AWS DMS 將來源的資料複製到複寫伺服器上的 .csv 檔案。

  2. AWS DMS 使用 AWS 開發套件將 .csv 檔案複製到您帳戶的 S3 儲存貯體。

  3. 然後,AWS DMS 會在 Amazon Redshift 中使用 COPY 命令,將 S3 中的 .csv 檔案的資料複製到 Amazon Redshift 中適當的資料表。

如果未啟用增強型 VPC 路由,Amazon Redshift 會透過網際網路來路由流量,包括流向 AWS 網路中其他服務的流量。如未啟用此功能,您不必設定網路路徑。如啟用此功能,您必須特別在叢集的 VPC 與資料資源之間建立網路路徑。如需所需組態的詳細資訊,請參閱 Amazon Redshift 文件中的「增強型 VPC 路由」。

建立和使用 AWS KMS 金鑰來加密 Amazon Redshift 目標資料

您可以將推送到 Amazon S3 的目標資料先加密,然後再複製到 Amazon Redshift。若要這麼做,您可以建立並使用自訂 AWS KMS 金鑰。當您建立 Amazon Redshift 目標端點時,您可以使用以下其中一個機制,以您建立的金鑰來加密目標資料:

若要使用 KMS 金鑰加密 Amazon Redshift 目標資料,您需要一個具備許可來存取 Amazon Redshift 資料的 AWS Identity and Access Management (IAM) 角色。將政策 (金鑰政策) 連接到您建立的加密金鑰,然後在該政策中存取此 IAM 角色。若要這麼做,您可以在 IAM 主控台建立下列項目:

  • 搭配 AWS 受管政策的 IAM 角色。

  • KMS 金鑰搭配參考此角色的金鑰政策。

下列程序說明作法。

搭配所需的 AWS 受管政策建立 IAM 角色
  1. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  2. 在導覽窗格中,選擇角色Roles (角色) 頁面隨即開啟。

  3. 選擇建立角色Create role (建立角色) 頁面隨即開啟。

  4. 針對信任的實體選擇 AWS 服務,然後針對使用該角色的服務選擇 DMS

  5. 選擇 Next: Permissions (下一步:許可)。Attach permissions policies (連接許可政策) 頁面隨即出現。

  6. 尋找並選取 AmazonDMSRedshiftS3Role 政策。

  7. 選擇下一步:標籤Add tags (新增標籤) 頁面隨即出現。在此,可以增加您想要的任何標籤。

  8. 選擇 Next: Review (下一步:檢閱),檢閱您的結果。

  9. 確認是您需要的設定後,輸入角色的名稱 (例如,DMS-Redshift-endpoint-access-role) 和任何額外的描述,然後選擇 Create role (建立角色)Roles (角色) 頁面隨即開啟,並以訊息指出已建立您的角色。

現在,您已經以指定的名稱建立新角色來存取要加密的 Amazon Redshift 資源,例如 DMS-Redshift-endpoint-access-role

搭配參考 IAM 角色的金鑰政策來建立 AWS KMS 加密金鑰
注意

如需如何將 AWS DMS 與 AWS KMS 加密金鑰搭配使用的詳細資訊,請參閱 設定加密金鑰並指定 AWS KMS 權限

  1. 請登入 AWS Management Console,並開啟 AWS Key Management Service (AWS KMS) 主控台 (網站:https://console.aws.amazon.com/kms)。

  2. 若要變更 AWS 區域,請使用頁面右上角的區域選取器。

  3. 在導覽窗格中,選擇 Customer managed keys (客戶受管金鑰)。

  4. 選擇建立金鑰Configure key (設定金鑰) 頁面隨即開啟。

  5. 針對 Key type (金鑰類型),請選擇 Symmetric (對稱)

    注意

    當您建立此金鑰時,只能建立對稱金鑰,因為所有 AWS 服務 (例如 Amazon Redshift) 只能使用對稱加密金鑰。

  6. 選擇 Advanced Options (進階選項)。針對 Key material origin (金鑰材料來源),請確認已選擇 KMS,然後選擇 Next (下一步)Add labels (新增標籤) 頁面隨即開啟。

  7. 針對 Create alias and description (建立別名和描述),請輸入一個金鑰別名 (例如,DMS-Redshift-endpoint-encryption-key) 和任何額外的描述。

  8. 針對 Tags (標籤),請新增您想要的任何標籤以協助識別金鑰和追蹤其使用情況,然後選擇 Next (下一步)Define key administrative permissions (定義金鑰管理許可) 頁面隨即開啟,其中顯示您可以選擇的使用者和角色清單。

  9. 新增您想要的使用者和角色來管理金鑰。請確定這些使用者和角色具有管理金鑰所需的許可。

  10. 針對 Key deletion (金鑰刪除),請選擇金鑰管理員是否可以刪除金鑰,然後選擇 Next (下一步)Define key usage permissions (定義金鑰使用許可) 頁面隨即開啟,其中顯示您可以選擇的額外使用者和角色清單。

  11. 針對此帳戶,選擇您要對 Amazon Redshift 目標執行密碼編譯操作的可用使用者。並請選擇您之前在角色中建立的角色,以啟用存取來加密 Amazon Redshift 目標物件,例如 DMS-Redshift-endpoint-access-role

  12. 如果您要新增未列出的其他帳戶以擁有相同存取權限,請針對其他 AWS 帳戶選擇新增其他 AWS 帳戶,然後選擇下一步Review and edit key policy (檢閱並編輯金鑰政策) 頁面隨即開啟,並顯示金鑰政策的 JSON,您可以透過輸入現有 JSON 來執行檢閱和編輯。在此,您可以查看金鑰政策於何處參考您在上一步所選擇的角色與使用者 (例如 AdminUser1)。您也可以查看不同委託人 (使用者和角色) 允許的不同金鑰動作,如下列範例所示。

    { "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/Admin" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/DMS-Redshift-endpoint-access-role", "arn:aws:iam::111122223333:role/Admin", "arn:aws:iam::111122223333:role/User1" ] }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ]
  13. 選擇 Finish (完成)。加密金鑰頁面隨即開啟,並以訊息指出已建立您的 AWS KMS key。

您現在已使用指定的別名建立新的 KMS 金鑰 (例如,DMS-Redshift-endpoint-encryption-key)。此金鑰可讓 AWS DMS 加密 Amazon Redshift 目標資料。

使用 Amazon Redshift 作為 AWS DMS 目標時的端點設定

您可以使用端點設定來設定您的 Amazon Redshift 目標資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立目標端點時指定設定,或使用 AWS CLI 中的 create-endpoint 命令,以 --redshift-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。

下列資料表顯示您可搭配 Amazon Redshift 作為目標使用的端點設定。

名稱 描述

MaxFileSize

指定將資料傳輸到 Amazon Redshift 所使用的 .csv 檔案大小上限 (KB)。

預設值:32768 KB (32 MB)

有效值:1–1,048,576

範例:--redshift-settings '{"MaxFileSize": 512}'

FileTransferUploadStreams

指定上傳單一檔案所使用的執行緒數量。

預設值:10

有效值:1-64

範例:--redshift-settings '{"FileTransferUploadStreams": 20}'

Acceptanydate

指定是否接受任意日期格式,包括無效的日期格式,如 0000-00-00。布林值。

預設值:false

有效值:true | false

範例:--redshift-settings '{"Acceptanydate": true}'

Dateformat

指定日期格式。根據預設,這是一個空的字串輸入。預設格式為 YYYY-MM-DD,但您可以隨時變更,例如 DD-MM-YYYY。如果您的日期或時間值使用不同的格式,請使用 auto 引數加 Dateformat 參數。auto 引數可以辨識使用 Dateformat 字串時不支援的多種格式。auto 關鍵字區分大小寫。

預設值:空

有效值:"dateformat_string" 或 auto

範例:--redshift-settings '{"Dateformat": "auto"}'

Timeformat

指定時間格式。根據預設,這是一個空的字串輸入。auto 引數可以辨識使用 Timeformat 字串時不支援的多種格式。如果您的日期和時間值彼此使用不同的格式,請使用 auto 引數加 Timeformat 參數。

預設值:10

有效值:"Timeformat_string" | "auto" | "epochsecs" | "epochmillisecs"

範例:--redshift-settings '{"Timeformat": "auto"}'

Emptyasnull

指定 AWS DMS 是否應該將空的 CHAR 和 VARCHAR 欄位遷移為 null。true 值會將空的 CHAR 和 VARCHAR 欄位設為 null。

預設值:false

有效值:true | false

範例:--redshift-settings '{"Emptyasnull": true}'

TruncateColumns

將欄的資料截斷為適當的字元數,以符合欄規格。僅適用於 VARCHAR 或 CHAR 資料類型的欄,以及大小為 4 MB 或更小的列。

預設值:false

有效值:true | false

範例:--redshift-settings '{"TruncateColumns": true}'

RemoveQuotes

在傳入的資料中移除括住字串的引號。引號內的所有字元 (包括分隔符號) 都會保留。如需移除 Amazon Redshift 目標引號的詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》。

預設值:false

有效值:true | false

範例:--redshift-settings '{"RemoveQuotes": true}'

TrimBlanks

從 VARCHAR 字串中移除尾端空格字元。此參數僅適用於 VARCHAR 資料類型的欄。

預設值:false

有效值:true | false

範例:--redshift-settings '{"TrimBlanks": true}'

EncryptionMode 指定在資料複製到 Amazon Redshift 之前,用於將資料推送到 S3 的伺服器端加密模式。有效值為 SSE_S3 (S3 伺服器端加密) 或 SSE_KMS (KMS 金鑰加密)。如果您選擇 SSE_KMS,請將 ServerSideEncryptionKmsKeyId 參數設定為用於加密的 KMS 金鑰的 Amazon Resource Name (ARN)。
注意

您也可以使用 CLI modify-endpoint 指令將現有端點的 EncryptionMode 設定值從 SSE_KMS 變更為 SSE_S3。但您不能將 EncryptionMode 值從 SSE_S3 變更為 SSE_KMS

預設值:SSE_S3

有效值:SSE_S3SSE_KMS

範例:--redshift-settings '{"EncryptionMode": "SSE_S3"}'

ServerSideEncryptionKmsKeyId 如果您將 EncryptionMode 設定為 SSE_KMS,請將此參數設定為 KMS 金鑰的 ARN。在為您的帳戶建立的 AWS KMS 金鑰清單中,您可以選取金鑰別名來找到這個 ARN。當您建立金鑰時,您必須將特定政策和角色與此金鑰建立關聯。如需更多詳細資訊,請參閱 建立和使用 AWS KMS 金鑰來加密 Amazon Redshift 目標資料

範例:--redshift-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'

EnableParallelBatchInMemoryCSVFiles EnableParallelBatchInMemoryCSVFiles 設定可讓 DMS 寫入磁碟而非記憶體,藉此改善較大型多執行緒完全載入任務的效能。預設值為 false
CompressCsvFiles 使用此屬性可壓縮遷移期間傳送至 Amazon Redshift 目標的資料。預設值為 true,且預設啟用壓縮。

使用資料加密金鑰和 Amazon S3 儲存貯體做為中繼儲存體

您可以使用 Amazon Redshift 目標端點設定來設定下列項目:

  • 自訂 AWS KMS 資料加密金鑰。您可以使用此金鑰將推送到 Amazon S3 的資料先加密,然後再複製到 Amazon Redshift。

  • 自訂 S3 儲存貯體是資料遷移到 Amazon Redshift 的中繼儲存體。

  • 將布林值映射為 PostgreSQL 來源的布林值。根據預設,BOOLEAN 型別會以 varchar (1) 遷移。您可以指定 MapBooleanAsBoolean 讓 Redshift 目標將布林型別以 boolean 遷移,如下列範例所示。

    --redshift-settings '{"MapBooleanAsBoolean": true}'

    請注意,您必須同時在來源端點和目標端點上設定此設定,該設定才會生效。

用於資料加密的 KMS 金鑰設定

以下範例說明設定自訂的 KMS 金鑰,以加密推送到 S3 的資料。首先,您可以使用以下 AWS CLI 呼叫 create-endpoint

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1"}'

其中,--redshift-settings 選項指定的 JSON 物件定義兩個參數。一個是 EncryptionMode 參數,值為 SSE_KMS。另一個是 ServerSideEncryptionKmsKeyId 參數,值為 arn:aws:kms:us-east-1:111122223333:key/24c3c5a1-f34a-4519-a85b-2debbef226d1。這個值是自訂 KMS 金鑰的 Amazon Resource Name (ARN)。

在預設情況下,將使用 S3 伺服器端加密進行 S3 資料加密。對於上述範例中的 Amazon Redshift 目標,這也等同於指定其端點設定,如下列範例所示。

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"EncryptionMode": "SSE_S3"}'

如需使用 S3 伺服器端加密的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用伺服器端加密保護資料

注意

您也可以使用 CLI modify-endpoint 指令將現有端點的 EncryptionMode 參數值從 SSE_KMS 變更為 SSE_S3。但您不能將 EncryptionMode 值從 SSE_S3 變更為 SSE_KMS

Amazon S3 儲存貯體設定

當您遷移資料到 Amazon Redshift 目標端點時,AWS DMS 會使用預設的 Amazon S3 儲存貯體做為中繼任務儲存,然後再將已遷移資料複製到 Amazon Redshift。例如,說明使用此預設 S3 儲存貯體,以 AWS KMS 資料加密金鑰建立 Amazon Redshift 目標端點的範例 (請參閱 用於資料加密的 KMS 金鑰設定)。

您可以在 AWS CLI create-endpoint 命令下您的 --redshift-settings 選項值中,加入以下參數,改指定此中繼儲存的自訂 S3 儲存貯體:

  • BucketName – 您指定為 S3 儲存貯體儲存名稱的字串。如果您的服務存取角色以 AmazonDMSRedshiftS3Role 政策為基礎,則此值的前綴必須為 dms-,例如 dms-my-bucket-name

  • BucketFolder – (選用) 您可以指定做為指定 S3 儲存貯體中儲存資料夾名稱的字串。

  • ServiceAccessRoleArn – 允許管理存取 S3 儲存貯體之 IAM 角色的 ARN。一般而言,您可以根據 AmazonDMSRedshiftS3Role 政策建立此角色。如需範例,請參閱 建立和使用 AWS KMS 金鑰來加密 Amazon Redshift 目標資料 中的程序,了解如何以要求的 AWS 受管政策建立 IAM 角色。

    注意

    如果您使用 create-endpoint 命令的 --service-access-role-arn 選項指定不同 IAM 角色的 ARN,這個 IAM 角色選項優先。

以下範例顯示如何使用 AWS CLI,以這些參數指定下列 create-endpoint 呼叫中的自訂 Amazon S3 儲存貯體。

aws dms create-endpoint --endpoint-identifier redshift-target-endpoint --endpoint-type target --engine-name redshift --username your-username --password your-password --server-name your-server-name --port 5439 --database-name your-db-name --redshift-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketName": "your-bucket-name", "BucketFolder": "your-bucket-folder-name"}'

Amazon Redshift 的多執行緒任務設定

採用多執行緒任務設定,可以改善 Amazon Redshift 目標端點的完全載入和變更資料擷取 (CDC) 任務效能。這些設定可讓您指定並行執行緒數目,以及存放在緩衝區中的記錄數目。

Amazon Redshift 的多執行緒完全載入任務設定

若要提升完全載入效能,您可以使用下列 ParallelLoad* 任務設定:

  • ParallelLoadThreads – 指定完全載入期間 DMS 用來將資料記錄推送至 Amazon Redshift 目標端點的並行執行緒數目。預設值為零 (0),最大值為 32。如需更多詳細資訊,請參閱 完全載入任務設定

    使用 ParallelLoadThreads 任務設定時,您可以使用設為 falseenableParallelBatchInMemoryCSVFiles 屬性。此屬性可讓 DMS 寫入磁碟而非記憶體,藉此改善較大型多執行緒完全載入任務的效能。預設值為 true

  • ParallelLoadBufferSize – 指定搭配 Redshift 目標使用平行負載執行緒時的資料記錄請求上限。預設值為 100,最大值為 1,000。我們建議您在 ParallelLoadThreads > 1 (大於一個) 時使用此選項。

注意

AWS DMS 3.4.5 版及更新版本可支援在 FULL LOAD 期間對 Amazon Redshift 目標端點使用 ParallelLoad* 任務設定。

在變更資料擷取 (CDC) 期間或啟用平行載入的完全載入移轉任務期間,不支援 ReplaceInvalidChars Redshift 端點設定。未啟用平行負載時,支援 FULL LOAD 遷移。如需詳細資訊,請參閱 AWS Database Migration ServiceAPI 參考中的 RedshiftSettings

Amazon Redshift 的多執行緒 CDC 任務設定

若要提升 CDC 效能,您可以使用下列 ParallelApply* 任務設定:

  • ParallelApplyThreads – 指定 CDC 載入期間 AWS DMS 用來推送資料記錄至 Amazon Redshift 目標端點的並行執行緒數目。預設值為零 (0),最大值為 32。建議的最小值等同於叢集中的切片數量。

  • ParallelApplyBufferSize – 指定搭配 Redshift 目標使用平行套用執行緒時的資料記錄請求上限。預設值為 100,最大值為 1,000。我們建議在 ParallelApplyThreads > 1 (大於一個) 時使用此選項。

    為了獲得 Redshift 作為目標的最大效益,我們建議 ParallelApplyBufferSize 的值至少為 ParallelApplyThreads 數量的兩倍 (兩倍或更多)。

注意

AWS DMS 3.4.3 版及更新版本可支援在 CDC 期間對 Amazon Redshift 目標端點使用 ParallelApply* 任務設定。

套用的平行處理原則層級取決於總批次大小與傳輸資料檔案大小上限之間的關聯性。將多執行緒 CDC 任務設定搭配 Redshift 目標時,相對於檔案大小上限,提高批次大小的效益較為顯著。例如,您可以使用下列端點和任務設定的組合進行調整以獲得最佳效能。

// Redshift endpoint setting MaxFileSize=250000; // Task settings BatchApplyEnabled=true; BatchSplitSize =8000; BatchApplyTimeoutMax =1800; BatchApplyTimeoutMin =1800; ParallelApplyThreads=32; ParallelApplyBufferSize=100;

藉由上一個範例中的設定,具有繁重交易工作負載的客戶可受益於批次緩衝,其中包含 8000 筆記錄,並在 1800 秒內填滿,並利用檔案大小上限為 250 MB 的 32 個平行執行緒。

如需更多詳細資訊,請參閱 變更處理調校設定

注意

在持續複寫至 Redshift 叢集期間執行的 DMS 查詢,可與其他執行中的應用程式查詢共用相同的 WLM (工作負載管理) 佇列。因此,請留意正確設定 WLM 內容,以確保 Redshift 目標在持續複寫期間的效能。例如,如果其他平行 ETL 查詢正在執行,DMS 執行速度會變慢,且喪失效能提升。

Amazon Redshift 的目標資料類型

適用於 AWS DMS 的 Amazon Redshift 端點支援大部分的 Amazon Redshift 資料類型。下表顯示在使用 AWS DMS 和來自 AWS DMS 資料類型的預設映射時受支援的 Amazon Redshift 目標資料類型。

如需 AWS DMS 資料類型的詳細資訊,請參閱AWS Database Migration Service 的資料類型

AWS DMS 資料類型

Amazon Redshift 資料類型

BOOLEAN

BOOL

BYTES

VARCHAR (長度)

DATE

DATE

TIME

VARCHAR(20)

DATETIME

如果小數位數為 => 0 和 =< 6 (取決於 Redshift 目標欄類型),則以下之一:

TIMESTAMP (s)

TIMESTAMPTZ — 如果來源時間戳記包含區域偏移量 (例如在 SQL Server 或 Oracle 中),則會在插入/更新時轉換為 UTC。如果不包含偏移量,則時間會視為已是 UTC。

如果擴展 => 7 且 =< 9,則:

VARCHAR (37)

INT1

INT2

INT2

INT2

INT4

INT4

INT8

INT8

NUMERIC

如果擴展 => 0 且 =< 37,則:

NUMERIC (p,s)

如果擴展 => 38 且 =< 127,則:

VARCHAR (長度)

REAL4

FLOAT4

REAL8

FLOAT8

STRING

如果長度是 1–65,535,則使用 VARCHAR (長度為位元組)

如果長度是 65,536–2,147,483,647,則使用 VARCHAR (65535)

UINT1

INT2

UINT2

INT2

UINT4

INT4

UINT8

NUMERIC (20,0)

WSTRING

如果長度是 1–65,535,則使用 NVARCHAR (長度為位元組)

如果長度是 65,536–2,147,483,647,則使用 NVARCHAR (65535)

BLOB

VARCHAR (LOB 大小上限 * 2)

LOB 大小上限不能超過 31 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

NCLOB

NVARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

CLOB

VARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

使用 AWS DMS 搭配 Amazon Redshift Serverless 作為目標

AWS DMS 支援使用 Amazon Redshift Serverless 作為目標端點。如需使用 Amazon Redshift Serverless 的相關資訊,請參閱《Amazon Redshift 管理指南》中的「Amazon Redshift Serverless」。

本主題說明如何使用 Amazon Redshift Serverless 端點搭配 AWS DMS。

注意

建立 Amazon Redshift Serverless 端點時,對於 RedshiftSettings 端點組態的 DatabaseName 欄位,請使用 Amazon Redshift 資料倉儲的名稱或工作群組端點的名稱。對於 ServerName 欄位,請針對無伺服器叢集使用工作群組頁面中顯示的端點值 (例如 default-workgroup.093291321484.us-east-1.redshift-serverless.amazonaws.com)。如需建立端點的資訊,請參閱 來源與目標端點。如需工作群組端點的相關資訊,請參閱連線至 Amazon Redshift Serverless

使用 Amazon Redshift Serverless 作為目標的信任政策

使用 Amazon Redshift Serverless 作為目標端點時,您必須將以下反白顯示的部分新增至信任政策。此信任政策會附加至 dms-access-for-endpoint 角色。

{ "PolicyVersion": { "CreateDate": "2016-05-23T16:29:57Z", "VersionId": "v3", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeAvailabilityZones", "ec2:DescribeInternetGateways", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "arn:aws:service:region:account:resourcetype/id", "Effect": "Allow" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "redshift-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "IsDefaultVersion": true } }

如需搭配 AWS DMS 使用信任政策的詳細資訊,請參閱 建立與 AWS CLI 和 AWS DMS API 搭配使用的身分與存取權管理角色

使用 Amazon Redshift Serverless 作為目標時的限制

使用 Redshift Serverless 作為目標具有下列限制: