本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Redshift 資料庫作為 AWS Database Migration Service的目標
您可以使用 將資料遷移至 Amazon Redshift 資料庫 AWS Database Migration Service。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 資料倉儲中的適當資料表。 在與 Amazon Redshift 資料庫相同的 AWS 區域中 AWS DMS 建立 S3 儲存貯體。 AWS DMS 複寫執行個體必須位於相同的 AWS 區域 。
如果您使用 AWS CLI 或 DMS API 將資料遷移至 Amazon Redshift,請設定 AWS Identity and Access Management (IAM) 角色以允許 S3 存取。如需建立此 IAM 角色的詳細資訊,請參閱建立要與 搭配使用IAM的角色 AWS DMS。
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 角色。如需建立此角色的詳細資訊,請參閱建立要與 搭配使用IAM的角色 AWS DMS。 -
AWS DMS 會將 BLOBs、CLOBs 和 NCLOBs 轉換為目標 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 COLUMNcolumn 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 端點可用的組態屬性。
屬性 |
描述 |
---|---|
伺服器 |
您使用的 Amazon Redshift 叢集名稱。 |
port |
Amazon Redshift 的連接埠號碼。預設值為 5439。 |
使用者名稱 |
已註冊使用者的 Amazon Redshift 使用者名稱。 |
密碼 |
在 username 屬性中命名之使用者的密碼。 |
database |
您使用的 Amazon Redshift 資料倉儲 (服務) 名稱。 |
如果您想將額外的連線字串屬性新增到您的 Amazon Redshift 端點,您可以指定 maxFileSize
和 fileTransferUploadStreams
屬性。如需這些屬性的詳細資訊,請參閱使用 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 叢集。
以下是將資料載入 Amazon Redshift 目標 AWS DMS 的步驟:
-
AWS DMS 會將資料從來源複製到複寫伺服器上的 .csv 檔案。
-
AWS DMS 使用 AWS SDK 將 .csv 檔案複製到您帳戶的 S3 儲存貯體。
-
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 目標端點時,您可以使用以下其中一個機制,以您建立的金鑰來加密目標資料:
-
當您使用 AWS CLI執行
create-endpoint
命令時,使用下列選項。--redshift-settings '{"EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "
your-kms-key-ARN
"}'其中,
是 KMS 金鑰的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱使用資料加密金鑰和 Amazon S3 儲存貯體做為中繼儲存體。your-kms-key-ARN
-
將額外連線屬性
encryptionMode
設定為值SSE_KMS
,將額外連線屬性serverSideEncryptionKmsKeyId
設定為 KMS 金鑰的 ARN。如需詳細資訊,請參閱使用 Amazon Redshift 做為 目標時的端點設定 AWS DMS。
若要使用 KMS 金鑰加密 Amazon Redshift 目標資料,您需要具有存取 Amazon Redshift 資料許可的 AWS Identity and Access Management (IAM) 角色。將政策 (金鑰政策) 連接到您建立的加密金鑰,然後在該政策中存取此 IAM 角色。若要這麼做,您可以在 IAM 主控台建立下列項目:
-
具有受管政策的 IAM AWS角色。
-
KMS 金鑰搭配參考此角色的金鑰政策。
下列程序說明作法。
使用所需的受管政策建立 IAM AWS角色
在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/
。 -
在導覽窗格中,選擇角色。Roles (角色) 頁面隨即開啟。
-
選擇建立角色。Create role (建立角色) 頁面隨即開啟。
-
針對信任的實體選擇 AWS 服務,然後針對使用該角色的服務選擇 DMS。
-
選擇下一步:許可。Attach permissions policies (連接許可政策) 頁面隨即出現。
-
尋找並選取
AmazonDMSRedshiftS3Role
政策。 -
選擇下一步:標籤。Add tags (新增標籤) 頁面隨即出現。在此,可以增加您想要的任何標籤。
-
選擇 Next: Review (下一步:檢閱),檢閱您的結果。
-
確認是您需要的設定後,輸入角色的名稱 (例如,
DMS-Redshift-endpoint-access-role
) 和任何額外的描述,然後選擇 Create role (建立角色)。Roles (角色) 頁面隨即開啟,並以訊息指出已建立您的角色。
現在,您已經以指定的名稱建立新角色來存取要加密的 Amazon Redshift 資源,例如 DMS-Redshift-endpoint-access-role
。
使用參考 IAM 角色的金鑰政策建立 AWS KMS 加密金鑰
注意
如需如何使用 AWS DMS AWS KMS 加密金鑰的詳細資訊,請參閱設定加密金鑰並指定 AWS KMS 許可。
-
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/kms
開啟 AWS Key Management Service (AWS KMS) 主控台。 -
若要變更 AWS 區域,請使用頁面右上角的區域選擇器。
-
在導覽窗格中,選擇 Customer managed keys (客戶受管金鑰)。
-
選擇建立金鑰。Configure key (設定金鑰) 頁面隨即開啟。
-
針對 Key type (金鑰類型),請選擇 Symmetric (對稱)。
注意
建立此金鑰時,您只能建立對稱金鑰,因為 Amazon Redshift 等所有 AWS 服務都只能使用對稱加密金鑰。
-
選擇 Advanced Options (進階選項)。針對 Key material origin (金鑰材料來源),請確認已選擇 KMS,然後選擇 Next (下一步)。Add labels (新增標籤) 頁面隨即開啟。
-
針對 Create alias and description (建立別名和描述),請輸入一個金鑰別名 (例如,
DMS-Redshift-endpoint-encryption-key
) 和任何額外的描述。 -
針對 Tags (標籤),請新增您想要的任何標籤以協助識別金鑰和追蹤其使用情況,然後選擇 Next (下一步)。Define key administrative permissions (定義金鑰管理許可) 頁面隨即開啟,其中顯示您可以選擇的使用者和角色清單。
-
新增您想要的使用者和角色來管理金鑰。請確定這些使用者和角色具有管理金鑰所需的許可。
-
針對 Key deletion (金鑰刪除),請選擇金鑰管理員是否可以刪除金鑰,然後選擇 Next (下一步)。Define key usage permissions (定義金鑰使用許可) 頁面隨即開啟,其中顯示您可以選擇的額外使用者和角色清單。
-
針對此帳戶,選擇您要對 Amazon Redshift 目標執行密碼編譯操作的可用使用者。並請選擇您之前在角色中建立的角色,以啟用存取來加密 Amazon Redshift 目標物件,例如
DMS-Redshift-endpoint-access-role
。 -
如果您想要新增其他未列出的帳戶以擁有相同的存取權,請針對其他 AWS 帳戶選擇新增另一個 AWS 帳戶,然後選擇下一步。Review and edit key policy (檢閱並編輯金鑰政策) 頁面隨即開啟,並顯示金鑰政策的 JSON,您可以透過輸入現有 JSON 來執行檢閱和編輯。在此,您可以查看金鑰政策於何處參考您在上一步所選擇的角色與使用者 (例如
Admin
和User1
)。您也可以查看不同委託人 (使用者和角色) 允許的不同金鑰動作,如下列範例所示。{ "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 } } } ]
-
選擇 Finish (完成)。加密金鑰頁面隨即開啟,並顯示訊息指出 AWS KMS key 您的 已建立。
您現在已使用指定的別名建立新的 KMS 金鑰 (例如,DMS-Redshift-endpoint-encryption-key
)。此金鑰可讓 AWS DMS 加密 Amazon Redshift 目標資料。
使用 Amazon Redshift 做為 目標時的端點設定 AWS DMS
您可以使用端點設定來設定您的 Amazon Redshift 目標資料庫,類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 create-endpoint
命令搭配 --redshift-settings '{"
JSON 語法來建立目標端點時AWS CLI,您可以指定設定。EndpointSetting"
: "value"
, ...
}'
下列資料表顯示您可搭配 Amazon Redshift 作為目標使用的端點設定。
名稱 | 描述 |
---|---|
|
指定將資料傳輸到 Amazon Redshift 所使用的 .csv 檔案大小上限 (KB)。 預設值:32768 KB (32 MB) 有效值:1–1,048,576 範例: |
|
指定上傳單一檔案所使用的執行緒數量。 預設值:10 有效值:1-64 範例: |
|
指定是否接受任意日期格式,包括無效的日期格式,如 0000-00-00。布林值。 預設值:false 有效值:true | false 範例: |
|
指定日期格式。根據預設,這是一個空的字串輸入。預設格式為 YYYY-MM-DD,但您可以隨時變更,例如 DD-MM-YYYY。如果您的日期或時間值使用不同的格式,請使用 預設值:空 有效值:" 範例: |
|
指定時間格式。根據預設,這是一個空的字串輸入。 預設值:10 有效值:" 範例: |
|
指定是否 AWS DMS 應將空白的 CHAR 和 VARCHAR 欄位遷移為 null。true 值會將空的 CHAR 和 VARCHAR 欄位設為 null。 預設值:false 有效值:true | false 範例: |
TruncateColumns |
將欄的資料截斷為適當的字元數,以符合欄規格。僅適用於 VARCHAR 或 CHAR 資料類型的欄,以及大小為 4 MB 或更小的列。 預設值:false 有效值:true | false 範例: |
RemoveQuotes |
在傳入的資料中移除括住字串的引號。引號內的所有字元 (包括分隔符號) 都會保留。如需移除 Amazon Redshift 目標引號的詳細資訊,請參閱《Amazon Redshift 資料庫開發人員指南》。 預設值:false 有效值:true | false 範例: |
TrimBlanks |
從 VARCHAR 字串中移除尾端空格字元。此參數僅適用於 VARCHAR 資料類型的欄。 預設值:false 有效值:true | false 範例: |
EncryptionMode |
指定在資料複製到 Amazon Redshift 之前,用於將資料推送到 S3 的伺服器端加密模式。有效值為 SSE_S3 (S3 伺服器端加密) 或 SSE_KMS (KMS 金鑰加密)。如果您選擇 SSE_KMS ,請將 ServerSideEncryptionKmsKeyId 參數設定為用於加密的 KMS 金鑰的 Amazon Resource Name (ARN)。注意您也可以使用 CLI 預設值: 有效值: 範例: |
ServerSideEncryptionKmsKeyId |
如果您將 EncryptionMode 設定為 SSE_KMS ,請將此參數設定為 KMS 金鑰的 ARN。您可以在為您的帳戶建立的金鑰清單中選取 AWS KMS 金鑰別名,以尋找此 ARN。當您建立金鑰時,您必須將特定政策和角色與此金鑰建立關聯。如需詳細資訊,請參閱建立和使用 AWS KMS 金鑰來加密 Amazon Redshift 目標資料。範例: |
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
--passwordyour-password
--server-nameyour-server-name
--port 5439 --database-nameyour-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
--passwordyour-password
--server-nameyour-server-name
--port 5439 --database-nameyour-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 金鑰設定)。
您可以改為在 create-endpoint
命令的 --redshift-settings
選項值中包含下列參數,來指定此中繼儲存體的自訂 S3 AWS CLI 儲存貯體:
-
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
--passwordyour-password
--server-nameyour-server-name
--port 5439 --database-nameyour-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
任務設定時,您可以使用設為false
的enableParallelBatchInMemoryCSVFiles
屬性。此屬性可讓 DMS 寫入磁碟而非記憶體,藉此改善較大型多執行緒完全載入任務的效能。預設值為true
。 -
ParallelLoadBufferSize
– 指定搭配 Redshift 目標使用平行負載執行緒時的資料記錄請求上限。預設值為 100,最大值為 1,000。我們建議您在 ParallelLoadThreads > 1 (大於一個) 時使用此選項。
注意
3.4.5 版和更新 AWS DMS 版本提供 FULL LOAD 到 Amazon Redshift 目標端點期間使用ParallelLoad*
任務設定的支援。
在變更資料擷取 (CDC) 期間或啟用平行載入的完全載入移轉任務期間,不支援 ReplaceInvalidChars
Redshift 端點設定。未啟用平行負載時,支援 FULL LOAD 遷移。如需詳細資訊,請參閱 AWS Database Migration Service API 參考中的 RedshiftSettings
Amazon Redshift 的多執行緒 CDC 任務設定
若要提升 CDC 效能,您可以使用下列 ParallelApply*
任務設定:
-
ParallelApplyThreads
– 指定在 CDC 載入期間 AWS DMS 用來將資料記錄推送至 Amazon Redshift 目標端點的並行執行緒數目。預設值為零 (0),最大值為 32。建議的最小值等同於叢集中的切片數量。 -
ParallelApplyBufferSize
– 指定搭配 Redshift 目標使用平行套用執行緒時的資料記錄請求上限。預設值為 100,最大值為 1,000。我們建議在 ParallelApplyThreads > 1 (大於一個) 時使用此選項。為了獲得 Redshift 作為目標的最大效益,我們建議
ParallelApplyBufferSize
的值至少為ParallelApplyThreads
數量的兩倍 (兩倍或更多)。
注意
在 CDC 到 Amazon Redshift 目標端點期間使用ParallelApply*
任務設定的支援可在 3.4.3 版和更高 AWS DMS 版本中使用。
套用的平行處理原則層級取決於總批次大小與傳輸資料檔案大小上限之間的關聯性。將多執行緒 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 的目標資料類型
的 Amazon Redshift 端點 AWS DMS 支援大多數 Amazon Redshift 資料類型。下表顯示使用 時支援的 Amazon Redshift 目標資料類型, AWS DMS 以及來自 AWS DMS 資料類型的預設映射。
如需 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,請參閱 建立要與 搭配使用IAM的角色 AWS DMS。
使用 Amazon Redshift Serverless 作為目標時的限制
使用 Redshift Serverless 作為目標具有下列限制:
AWS DMS 僅支援在支援 Amazon Redshift Serverless 的區域中將 Amazon Redshift Serverless 做為端點。如需哪些區域支援 Amazon Redshift Serverless 的相關資訊,請參閱 AWS 一般參考資料中 Redshift 端點和配額主題的 Redshift Serverless API。
使用增強型 VPC 路由時,請務必在與 Redshift Serverless 或 Redshift 佈建叢集相同的 VPC 中建立 Amazon S3 端點。如需詳細資訊,請參閱使用增強型 VPC 路由搭配 Amazon Redshift 做為 的目標 AWS Database Migration Service。