使用 Amazon S3 作為目標 AWS Database Migration Service - AWS Database Migration Service

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

使用 Amazon S3 作為目標 AWS Database Migration Service

您可以使用 AWS DMS 任何支援的資料庫來源將資料移轉到 Amazon S3。在 AWS DMS 任務中使用 Amazon S3 做為目標時,完整負載和變更資料擷取 (CDC) 資料預設都會寫入逗號分隔值 (.csv) 格式。若要使用更精簡的儲存和更快速的查詢選項,您也可以選擇以 Apache Parquet (.parquet) 格式寫入資料。

AWS DMS 使用增量十六進位計數器來命名在完整載入期間建立的檔案,例如 LOAD00001.csv、LOAD00002...、LOAD00009、LOAD0000A 等,適用於 .csv 檔案。 AWS DMS 使用時間戳記命名 CDC 檔案,例如 20141029-1134010000.csv。對於包含記錄的每個來源表格,在指定的目標資料夾下 AWS DMS 建立一個資料夾 (如果來源資料表不是空的)。 AWS DMS 將所有完整負載和 CDC 檔案寫入指定的 Amazon S3 儲存貯體。您可以使用MaxFileSize端點設定來控制 AWS DMS 建立的檔案大小。

參數 bucketFolder 包含 .csv 或 .parquet 檔案上傳到 S3 儲存貯體之前的儲存位置。就 .csv 檔案而言,資料表資料使用以下格式儲存在 S3 儲存貯體中,並顯示完全載入檔案。

database_schema_name/table_name/LOAD00000001.csv database_schema_name/table_name/LOAD00000002.csv ... database_schema_name/table_name/LOAD00000009.csv database_schema_name/table_name/LOAD0000000A.csv database_schema_name/table_name/LOAD0000000B.csv ...database_schema_name/table_name/LOAD0000000F.csv database_schema_name/table_name/LOAD00000010.csv ...

您可以使用額外的連線屬性指定資料行分隔符號、資料列分隔符號和其他參數。有關額外連線屬性的詳細資訊,請參閱本節最後的使用 Amazon S3 做為目標時的端點設定 AWS DMS

您可以使用 ExpectedBucketOwner Amazon S3 端點設定指定儲存貯體擁有者並防止惡意攻擊,如下所示。然後,當您提出測試連線或執行遷移請求時,S3 會根據指定參數檢查儲存貯體擁有者的帳戶識別碼。

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

當您使 AWS DMS 用 CDC 工作複寫資料變更時,.csv 或 .store 輸出檔案的第一欄會指出如何變更列資料,如下列 .csv 檔案所示。

I,101,Smith,Bob,4-Jun-14,New York U,101,Smith,Bob,8-Oct-15,Los Angeles U,101,Smith,Bob,13-Mar-17,Dallas D,101,Smith,Bob,13-Mar-17,Dallas

在此範例中,假設來源資料庫中有資料EMPLOYEE表。 AWS DMS 會將資料寫入 .csv 或 .store 檔案,以回應下列事件:

  • 2014 年 6 月 4 日紐約辦公室聘雇的新員工 (Bob Smith,員工 ID 101)。在 .csv 或 .parquet 檔案中,第一欄的 I 指出新資料列 INSERT 到來源資料庫中的 EMPLOYEE 資料表。

  • Bob 於 2015 年 10 月 8 日調到洛杉磯辦公室。在 .csv 或 .parquet 檔案中,U 指出 EMPLOYEE 資料表的對應資料列已 UPDATE,以反映 Bob 的新辦公室位置。行中其他部分反映 UPDATE 後的 EMPLOYEE 資料表資料列。

  • Bob 於 2017 年 3 月 13 日再次調到達拉斯辦公室。在 .csv 或 .parquet 檔案中,U 指出此資料列再次 UPDATE。行中其他部分反映 UPDATE 後的 EMPLOYEE 資料表資料列。

  • 在達拉斯工作一段時間後,Bob 離開了公司。在 .csv 或 .parquet 檔案中,D 指出來源資料表已 DELETE 此資料列。行中其他部分反映刪除前的 EMPLOYEE 資料表資料列內容。

請注意,根據預設,CDC 會 AWS DMS 儲存每個資料庫資料表的資料列變更,而不考慮交易順序。如果您想要將資料列變更依交易順序儲存至 CDC 檔案中,則需要使用 S3 端點設定來指定此項目,以及 S3 目標上儲存 CDC 交易檔案的資料夾路徑。如需詳細資訊,請參閱 在 S3 目標上包含交易順序之擷取資料變更 (CDC)

若要控制在資料複寫任務期間寫入 Amazon S3 目標的頻率,您可以設定額外的連線屬性 cdcMaxBatchIntervalcdcMinFileSize。在沒有任何額外負荷操作的情況下分析資料時,此設定可使效能提升。如需更多資訊,請參閱使用 Amazon S3 做為目標時的端點設定 AWS DMS

使用 Amazon S3 作為目標的事前準備

使用 Amazon S3 作為目標之前,請檢查下列條件為真:

  • 您用作目標的 S3 儲存貯體與您用來遷移資料的 DMS 複寫執行個體位於相同的 AWS 區域。

  • 您用於遷移的 AWS 帳戶具有 IAM 角色,對您用作目標的 S3 儲存貯體具有寫入和刪除存取權限。

  • 此角色具有標記存取,因此您可以標記任何寫入到目標儲存貯體的 S3 物件。

  • IAM 角色具有已新增為受信任實體的 DMS (dms.amazonaws.com)。

  • 對於 AWS DMS 版本 3.4.7 及更高版本,DMS 必須透過 VPC 端點或公用路由存取來源儲存貯體。如需 VPC 端點的相關資訊,請參閱將 VPC 端點設定為 AWS DMS 來源和目標端點

若要設定此帳戶存取,對於用來建立遷移任務的使用者帳戶,請確定指派給此帳戶的角色具有以下許可集。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::buckettest2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buckettest2" ] } ] }

如需使用驗證搭配 S3 作為目標的先決條件,請參閱 S3 目標驗證先決條件

使用 Amazon S3 作為目標的限制

使用 Amazon S3 作為目標時,有下列限制:

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

  • 3.4.7 及更新版本支援啟用 VPC (閘道 VPC) 的 S3 儲存貯體。

  • 變更資料擷取 (CDC) 支援下列資料定義語言 (DDL) 命令:截斷資料表、刪除資料表、建立資料表、重新命名資料表、新增資料欄、刪除資料欄、重新命名資料欄和變更資料欄資料類型。請注意,在來源資料庫上新增、卸除或重新命名資料行時,目標 S3 儲存貯體中不會記錄 ALTER 陳述式,也 AWS DMS 不會變更先前建立的記錄以符合新結構。變更之後, AWS DMS 會使用新表格結構建立任何新記錄。

    注意

    截斷 DDL 操作會移除 S3 儲存貯體中的所有檔案以及相應的資料表資料夾。您可以使用任務設定停用該行為,並設定 DMS 在變更資料擷取 (CDC) 期間處理 DDL 行為的方式。如需詳細資訊,請參閱 變更DDL處理處理的工作設定

  • 不支援完全的 LOB 模式。

  • 不支援在完全載入階段變更來源資料表結構。支援在完全載入階段變更資料。

  • 將同一來源資料表中的資料複寫到相同目標 S3 端點儲存貯體的多項任務,會讓這些任務寫入相同的檔案。如果您的資料來源為相同的資料表,建議您指定不同的目標端點 (儲存貯體)。

  • S3 端點不支援 BatchApply。對 S3 目標使用批次套用 (例如 BatchApplyEnabled 目標中繼資料任務設定) 可能會導致資料遺失。

  • DatePartitionEnabledaddColumnName 無法搭配 PreserveTransactionsCdcPath 一起使用。

  • AWS DMS 不支援使用轉換規則將多個來源資料表重新命名為相同的目標資料夾。

  • 如果在完全載入階段需要大量寫入來源資料表,DMS 可能會將重複的記錄寫入 S3 儲存貯體或快取的變更。

  • 如果您使用 TargetTablePrepModeDO_NOTHING 來設定任務,任務若在完全載入階段突然停止,然後繼續執行,此時 DMS 可能會將重複的記錄寫入 S3 儲存貯體。

  • 如果您使用 PreserveTransactions 設定值為 true 來設定目標端點,則重新載入資料表並不會清除先前產生的 CDC 檔案。如需詳細資訊,請參閱 在 S3 目標上包含交易順序之擷取資料變更 (CDC)

如需了解使用驗證搭配 S3 作為目標的限制,請參閱 使用 S3 目標驗證的限制

安全

若要使用 Amazon S3 作為目標,用於遷移的帳戶必須擁有目標 Amazon S3 儲存貯體的寫入和刪除存取權。指定具有存取 Amazon S3 所需許可的 IAM 角色的 Amazon Resource Name (ARN)。

AWS DMS 支援 Amazon S3 的一組預先定義授權,稱為固定存取控制清單 (ACL)。每個標準 ACL 都有一組承授者和許可,供您用來設定 Amazon S3 儲存貯體的許可。您可以在您 S3 目標端點的連線字串屬性中使用 cannedAclForObjects 指定固定 ACL。如需有關使用額外連線屬性 cannedAclForObjects 的詳細資訊,請參閱使用 Amazon S3 做為目標時的端點設定 AWS DMS。如需 Amazon S3 固定 ACL 的詳細資訊,請參閱固定 ACL

用於遷移的 IAM 角色必須能夠執行 s3:PutObjectAcl API 操作。

使用 Apache Parquet 儲存 Amazon S3 物件

逗號分隔值 (.csv) 格式是 Amazon S3 目標物件的預設儲存格式。若要使用更精簡的儲存和更快速的查詢,您可以改用 Apache Parquet (.parquet) 做為儲存格式。

Apache Parquet 是原本專為 Hadoop 設計的開放原始碼檔案儲存格式。如需 Apache Parquet 的詳細資訊,請參閱 https://parquet.apache.org/

若要將 .parquet 設定為您遷移的 S3 目標物件的儲存格式,您可以使用以下機制:

Amazon S3 物件標記

您可以在任務-資料表映射規則中指定適當的 JSON 物件,以標記複寫執行個體建立的 Amazon S3 物件。如需 S3 物件標記的需求和選項的詳細資訊 (包括有效標籤名稱),請參閱《Amazon Simple Storage Service 使用者指南》中的「物件標記」。如需有關使用 JSON 來映射資料表的詳細資訊,請參閱 使用 JSON 指定資料表選擇及轉換

對於為指定的資料表和結構描述建立的 S3 物件,請使用 selection 規則類型的一或多個 JSON 物件來這些標記 S3 物件。然後,在此 selection 物件 (或多個物件) 後面,加上具有 post-processing 規則類型和 add-tag 動作的一或多個 JSON 物件。這些後續處理規則識別您要標記的 S3 物件,並針對您要新增到這些 S3 物件的標籤,指定其名稱和值。

在以下資料表中,您可以找到在 post-processing 規則類型的 JSON 物件中指定的參數。

參數 可能的值 描述
rule-type post-processing

此值將後續處理動作套用到產生的目標物件。您可以指定一或多個後續處理規則,以標記選取的 S3 物件。

rule-id 數值。 識別規則的唯一數值。
rule-name 英數值。 識別規則的唯一名稱。
rule-action add-tag 您想要套用到 S3 物件的後續處理動作。對於 add-tag 動作,您可以使用單一 JSON 後續處理物件來新增一或多個標籤。
object-locator

schema-name – 資料表結構描述的名稱。

table-name – 資料表的名稱。

每個要套用規則的結構描述和資料表的名稱。您可以使用 "%" 百分比符號做為萬用字元,以代表每個 object-locator 參數的所有值或部分值。因此,您可以符合這些項目:

  • 單一結構描述中的單一資料表

  • 部分或所有結構描述中的單一資料表

  • 單一結構描述中的部分或所有資料表

  • 部分或所有結構描述中的部分或所有資料表

tag-set

key – 單一標籤的任何有效名稱。

value – 此標籤的任何有效 JSON 值。

在符合所指定 object-locator 的每個建立的 S3 物件上,您想要設定的一或多個標籤的名稱和值。在單一 tag-set 參數物件中,您最多可以指定 10 個金鑰/數值組。如需有關 S3 物件標籤的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的「物件標記」。

對於標籤的 keyvalue 參數,您也可以使用 ${dyn-value} 將所有或部分值指定為動態值。其中,${dyn-value} 可以是 ${schema-name}${table-name}。因此,您可以插入目前所選結構描述或資料表的名稱,做為整個參數值或其任何部分。

注意
重要

如果您為 key 參數插入動態值,您可以為 S3 物件產生重複名稱的標籤,這取決於您如何使用它。在這種情況下,只有其中一個重複的標籤設定會新增到物件。

當您指定多個 post-processing 規則類型來標記一組 S3 物件時,將會從一個後續處理規則中只使用一個 tag-set 物件來標記每個 S3 物件。如果後續處理規則相關聯的物件定位器最符合某個 S3 物件,則會使用此規則中的特定標籤組來標記該 S3 物件。

例如,假設兩個後續處理規則識別相同的 S3 物件。也假設其中一個規則的物件定位器使用萬用字元,而另一個規則的物件定位器使用完全相符來識別 S3 物件 (不含萬用字元)。在這種情況下,與採用完全相符的後續處理規則相關聯的標籤組會用來標記 S3 物件。如果多個後續處理規則都同樣符合指定的 S3 物件,則會使用與第一個後續處理規則相關聯的標籤組來標記物件。

範例 將靜態標籤新增到為單一資料表和結構描述建立的 S3 物件

以下選擇規則和後續處理規則將三個標籤 (tag_1tag_2tag_3 連同對應的靜態值 value_1value_2value_3) 新增到建立的 S3 物件。此 S3 物件對應到名為 STOCK 的來源和名為 aat2 的結構描述中的單一資料表。

{ "rules": [ { "rule-type": "selection", "rule-id": "5", "rule-name": "5", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat2", "table-name": "STOCK" }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" }, { "key": "tag_3", "value": "value_3" } ] } ] }
範例 將靜態和動態標籤新增到為多個資料表和結構描述建立的 S3 物件

以下範例有一個選擇規則和兩個後續處理規則,其中,來源的輸入包含所有資料表及其所有結構描述。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "%", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_${table-name}" } ] }, { "rule-type": "post-processing", "rule-id": "41", "rule-name": "41", "rule-action": "add-tag", "object-locator": { "schema-name": "aat", "table-name": "ITEM", }, "tag-set": [ { "key": "tag_1", "value": "value_1" }, { "key": "tag_2", "value": "value_2" } ] } ] }

第一個後續處理規則將兩個標籤 (dw-schema-namedw-schema-table) 連同對應的動態值 (${schema-name}my_prefix_${table-name}),新增到幾乎所有在目標中建立的 S3 物件。例外的是以第二個後續處理規則所識別和標記的 S3 物件。因此,對於萬用字元物件定位器所識別的每個目標 S3 物件,用來建立物件的標籤會識別物件在來源中對應的結構描述和資料表。

第二個後續處理規則將 tag_1tag_2 連同對應的靜態值 value_1value_2,新增到完全相符物件定位器識別的所建立 S3 物件。這個建立的 S3 物件對應到名為 ITEM 的來源和名為 aat 的結構描述中的單一資料表。因為是完全相符,這些標籤在此物件上會取代從第一個後續處理規則新增的任何標籤,而此規則僅以萬用字元比對 S3 物件。

範例 將動態標籤名稱和值新增至 S3 物件

以下範例有兩個選擇規則和一個後續處理規則。其中,來源的輸入只在 retailwholesale 結構描述中包含 ITEM 資料表。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "retail", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "wholesale", "table-name": "ITEM" }, "rule-action": "include" }, { "rule-type": "post-processing", "rule-id": "21", "rule-name": "21", "rule-action": "add-tag", "object-locator": { "schema-name": "%", "table-name": "ITEM", }, "tag-set": [ { "key": "dw-schema-name", "value":"${schema-name}" }, { "key": "dw-schema-table", "value": "my_prefix_ITEM" }, { "key": "${schema-name}_ITEM_tag_1", "value": "value_1" }, { "key": "${schema-name}_ITEM_tag_2", "value": "value_2" } ] ] }

後續處理規則的標籤組將兩個標籤 (dw-schema-namedw-schema-table) 新增到目標中為 ITEM 資料表建立的所有 S3 物件。第一個標籤有動態值 "${schema-name}",第二個標籤有靜態值 "my_prefix_ITEM"。因此,對於每個目標 S3 物件,用來建立物件的標籤會識別物件在來源中對應的結構描述和資料表。

此外,標籤組還以動態名稱 (${schema-name}_ITEM_tag_1"${schema-name}_ITEM_tag_2") 新增兩個額外的標籤。這些具有對應的靜態值 value_1value_2。因此,這些標籤將各以目前結構描述 retailwholesale 來命名。您無法在此物件中建立重複的動態標籤名稱,因為每個物件是針對單一唯一結構描述名稱而建立。結構描述名稱用於建立其他唯一的標籤名稱。

建立加 AWS KMS 密 Amazon S3 目標物件的金鑰

您可以建立和使用自訂 AWS KMS 金鑰來加密 Amazon S3 目標物件。在建立 KMS 金鑰之後,當您建立 S3 目標端點時,您可以使用以下其中一個方法,以此金鑰來加密物件:

  • 當您使用 AWS CLI執行 create-endpoint 命令時,對 S3 目標物件 (使用預設 .csv 檔案儲存格式) 使用以下選項。

    --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'

    其中,your-KMS-key-ARN 是 KMS 金鑰的 Amazon Resource Name (ARN)。如需詳細資訊,請參閱 在您的 Amazon S3 目標上使用資料加密、parquet 檔案和 CDC

  • 將額外連線屬性 encryptionMode 設定為值 SSE_KMS,將額外連線屬性 serverSideEncryptionKmsKeyId 設定為 KMS 金鑰的 ARN。如需詳細資訊,請參閱 使用 Amazon S3 做為目標時的端點設定 AWS DMS

若要使用 KMS 金鑰加密 Amazon S3 目標物件,您需要一個具備 Amazon S3 儲存貯體存取許可的 IAM 角色。將政策 (金鑰政策) 連接到您建立的加密金鑰,然後在該政策中存取此 IAM 角色。若要這麼做,您可以在 IAM 主控台建立下列項目:

  • 具備 Amazon S3 儲存貯體存取許可的政策。

  • 搭配此政策的 IAM 角色。

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

下列程序說明作法。

建立具備 Amazon S3 儲存貯體存取許可的 IAM 政策
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  2. 在導覽窗格中,選擇 Policies (政策)Policies (政策) 頁面隨即開啟。

  3. 選擇建立政策Create policy (建立政策) 頁面隨即開啟。

  4. 選擇 Service (服務),然後選擇 S3。將出現動作許可清單。

  5. 選擇 Expand all (全部展開) 來展開清單,然後至少選擇以下許可:

    • ListBucket

    • PutObject

    • DeleteObject

    選擇您需要的任何其他許可,然後選擇 Collapse all (全部折疊) 來折疊清單。

  6. 選擇 Resources (資源) 以指定想要存取的資源。至少選擇所有資源,以提供一般 Amazon S3 資源存取。

  7. 新增您需要的任何其他條件或許可,然後選擇 Review policy (檢閱政策)。在 Review policy (檢閱政策) 頁面檢查您的結果。

  8. 確認是您需要的設定後,輸入政策的名稱 (例如,DMS-S3-endpoint-access) 和任何描述,然後選擇 Create policy (建立政策)Policies (政策) 頁面隨即開啟,並以訊息指出已建立您的政策。

  9. Policies (政策) 清單中搜尋並選擇政策名稱。將會出現 Summary (總結) 頁面,其中顯示類似以下的政策 JSON。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" } ] }

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

建立搭配此政策的 IAM 角色
  1. 在 IAM 主控台的導覽窗格中,選擇角色Roles (角色) 詳細資訊頁面隨即開啟。

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

  3. 選取 AWS 服務做為受信任實體後,選擇 DMS 做為服務以使用 IAM 角色。

  4. 選擇下一步:許可建立角色頁面中隨即出現連接許可政策檢視。

  5. 尋找並選取您在之前程序中 (DMS-S3-endpoint-access) 建立 IAM 角色的 IAM 政策。

  6. 選擇下一步:標籤建立角色頁面中隨即顯示新增標籤檢視。在此,可以增加您想要的任何標籤。

  7. 選擇下一步:檢閱建立角色頁面中隨即顯示檢閱檢視。您可以在這裡驗證結果。

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

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

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

如需如何使用 AWS KMS 加密金鑰 AWS DMS 的詳細資訊,請參閱設定加密金鑰並指定 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 S3) 只能使用對稱加密金鑰。

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

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

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

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

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

  11. 針對此帳戶,選擇您要對 Amazon S3 目標執行密碼編譯操作的可用使用者。並請選擇您之前在角色中建立的角色,以啟用存取來加密 Amazon S3 目標物件,例如 DMS-S3-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-S3-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-S3-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 (完成)。加密金鑰頁面隨即開啟,並以訊息指出已建立您的 KMS 金鑰。

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

使用日期型資料夾分割

AWS DMS 當您使用 Amazon S3 做為目標端點時,根據交易提交日期支援 S3 資料夾分割。透過日期型資料夾分割,您可以將資料從單一來源資料表寫入 S3 儲存貯體中的時間階層資料夾結構。透過在建立 S3 目標端點時分割資料夾,您可以實現下列事項:

  • 更妥善管理您的 S3 物件

  • 限制每個 S3 資料夾的大小

  • 最佳化資料湖查詢或其他後續作業

在建立 S3 目標端點時,您可以啟用日期型資料夾分割。您可以在遷移現有資料並複寫持續的變更 (完全載入 + CDC) 或僅複寫資料變更 (僅限 CDC) 時啟用此功能。使用下列目標端點設定:

  • DatePartitionEnabled – 根據日期指定分區。將此布林選項設為 true 時,此參數會根據交易遞交日期對 S3 儲存貯體資料夾進行分割。

    您不能將此設定與 PreserveTransactionsCdcPath 搭配使用。

    預設值為 false

  • DatePartitionSequence – 識別資料夾分割期間要使用的日期格式順序。將此 ENUM 選項設置為 YYYYMMDDYYYYMMDDHHYYYYMMMMYYYYDDDDMMYYYY。預設值為 YYYYMMDD。當 DatePartitionEnabled 設定為 true. 時,請使用此項設定。

  • DatePartitionDelimiter – 指定資料夾分割期間要使用的日期分隔符號。將此 ENUM 選項設置為 SLASHDASHUNDERSCORENONE。預設值為 SLASH。當 DatePartitionEnabled 設定為 true 時,使用此項設定。

下列範例會示範如何啟用日期型的資料夾分割,並使用資料分割順序和分隔符號的預設值。它會使用的--s3-settings '{json-settings}'選項 AWS CLI。 create-endpoint指令。

--s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'

使用 Amazon S3 做為目標時,分區來源的平行負載 AWS DMS

您可以設定將分割資料來源平行完全載入到 Amazon S3 目標。此方法可改善將分割資料從支援的來源資料庫引擎遷移至 S3 目標的載入時間。若要改善分割來源資料的載入時間,您可以建立對應至來源資料庫中每個資料表分割區的 S3 目標子資料夾。這些繫結磁碟分割的子資料夾 AWS DMS 允許執行 parallel 處理程序,以填入目標上的每個子資料夾。

若要設定 S3 目標的平行完全載入,S3 支援資料表對應 table-settings 規則的三種 parallel-load 規則類型:

  • partitions-auto

  • partitions-list

  • ranges

如需這些平行載入規則類型的詳細資訊,請參閱 資料表和集合設定規則與操作

對於 partitions-autopartitions-list 規則類型, AWS DMS 會使用來源端點中的每個分割區名稱來識別目標子資料夾結構,如下所示。

bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv

此處,用於資料遷移和儲存的 S3 目標子資料夾路徑包含一個額外的 partition_name 子資料夾,該子資料夾對應至具有相同名稱的來源分割區。此 partition_name 子資料夾隨後會儲存一個或多個 LOADseq_num.csv 檔案,其中包含遷移自指定來源分割區的資料。此處seq_num是 .csv 檔案名稱上的序號後綴,例如00000001在 .csv 檔案中,名稱為 LOAD00000001.csv

不過,某些資料庫引擎 (例如 MongoDB 和 DocumentDB) 並沒有分割區的概念。對於這些資料庫引擎, AWS DMS 將執行中的來源區段索引作為字首加入至目標 .csv 檔案名稱,如下所示。

.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv .../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv ... .../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv .../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv

其中檔案 SEGMENT1_LOAD00000001.csvSEGMENT1_LOAD00000002.csv 的命名會使用相同的執行中來源區段索引前綴 SEGMENT1。如此命名是因為這兩個 .csv 檔案的遷移來源資料都關聯至相同的執行中來源區段索引。另一方面,儲存在目標 SEGMENT2_LOAD00000009.csvSEGMENT3_LOAD0000000A.csv 檔案中的遷移資料會分別關聯至不同的執行中來源區段索引。每個檔案都會在其檔案名稱前加上其正在執行的區段索引名稱,SEGMENT2SEGMENT3

對於 ranges 平行載入類型,您可以使用 table-settings 規則的 columnsboundaries 設定來定義欄名稱和欄值。透過這些規則,您可以指定與區段名稱對應的分割區,如下所示。

"parallel-load": { "type": "ranges", "columns": [ "region", "sale" ], "boundaries": [ [ "NORTH", "1000" ], [ "WEST", "3000" ] ], "segment-names": [ "custom_segment1", "custom_segment2", "custom_segment3" ] }

其中 segment-names 設定會定義 S3 目標上用於平行遷移資料的三個分割區名稱。遷移的資料會平行載入並依序儲存在分割區子資料夾下的 .csv 檔案中,如下所示。

.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv .../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv

在這裡,將一系列 .csv 文件 AWS DMS 存儲在三個分區子文件夾中的每個文件夾中。每個分割區子資料夾中的一系列 .csv 檔案會從 LOAD00000001.csv 開始遞增命名,直到所有資料遷移完成。

在某些情況下,您可能無法使用 segment-names 設定明確命名 ranges 平行載入類型的分割區子資料夾。在這種情況下,會 AWS DMS 套用預設值,以便在其table_name子資料夾下建立每一系列 .csv 檔案。此時 AWS DMS 會在每個系列的 .csv 檔案的檔案名稱開頭加上執行中來源區段索引的名稱,如下所示。

.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv .../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv ... .../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv

使用 Amazon S3 做為目標時的端點設定 AWS DMS

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

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

選項 Description
CsvNullValue

可選參數,指定如何 AWS DMS 處理空值。處理 Null 值時,您可以在寫入目標時使用此參數將使用者定義的字串作為 Null 傳遞。例如,目標資料行可為 Null 時,您可以使用此選項來區分空字串值和 Null 值。因此,如果您將此參數值設定為空字串 (」"或「),請 AWS DMS 將空字串視為 null 值,而不是NULL

預設值:NULL

有效值:任何有效字串

範例:--s3-settings '{"CsvNullValue": " "}'

AddColumnName

設定為 truey 的選用參數時,可用來將欄名稱資訊新增到 .csv 輸出檔。

您不能將此參數搭配 PreserveTransactionsCdcPath 使用。

預設值:false

有效值:truefalseyn

範例:--s3-settings '{"AddColumnName": true}'

AddTrailingPaddingCharacter

使用 S3 目標端點設定 AddTrailingPaddingCharacter,在字串資料上新增填補數。預設值為 false

類型:布林值

範例:--s3-settings '{"AddTrailingPaddingCharacter": true}'

BucketFolder

選用參數;可設定 S3 儲存貯體中的資料夾名稱。如果提供此參數,則目標物件會建立為路徑 BucketFolder/schema_name/table_name/ 中的 .csv 或 .parquet 檔案。如果不指定此參數,則使用的路徑是 schema_name/table_name/

範例:--s3-settings '{"BucketFolder": "testFolder"}'

BucketName

S3 儲存貯體的名稱,S3 目標物件會在其中建立為 .csv 或 .parquet 檔案。

範例:--s3-settings '{"BucketName": "buckettest"}'

CannedAclForObjects

此值可讓您針 AWS DMS 對在 S3 儲存貯體中建立的物件指定預先定義 (固定) 存取控制清單為 .csv 或 .wood 檔案。如需有關 Amazon S3 標準 ACL 的詳細資訊,請參閱《Amazon S3 開發人員指南》中的標準 ACL

預設值:NONE

此屬性的有效值:NONE、PRIVATE、PUBLIC_READ、PUBLIC_READ_WRITE、AUTHENTICATED_READ、AWS_EXEC_READ、BUCKET_OWNER_READ、BUCKET_OWNER_FULL_CONTROL。

範例:--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'

CdcInsertsOnly

變更資料擷取 (CDC )期間的選用參數載入僅會寫入 INSERT 操作到逗號分隔值 (.csv) 檔案,或欄式儲存 (.parquet) 的輸出檔案。根據預設 (false 設定),.csv 或 .parquet 記錄中的第一個欄位包含字母 I (插入)、U (更新) 或 D (刪除)。此字母指出資料列是否已插入、更新或刪除 CDC 載入至目標的來源資料庫。如果 cdcInsertsOnly 是設定為 truey,只有從來源資料庫的 INSERT 會移轉至 .csv 或 .parquet 檔案。

僅針對 .csv 格式,這些 INSERTS 記錄取決於 IncludeOpForFullLoad 的值。如果 IncludeOpForFullLoad 設定為 true,每個 CDC 記錄的第一個欄位設定為 I,用來指示來源的 INSERT 操作。如果 IncludeOpForFullLoad 設定為 false,每個 CDC 記錄沒有第一個欄位,用來指示來源的 INSERT 操作。有關這些參數如何共同運作的更多資訊,請參閱 在遷移的 S3 資料中指示來源資料庫操作

預設值:false

有效值:truefalseyn

範例:--s3-settings '{"CdcInsertsOnly": true}'

CdcInsertsAndUpdates

啟用變更資料擷取 (CDC) 載入,以將 INSERT (插入) 和 UPDATE (更新) 操作寫入 .csv 或 .parquet (直欄式儲存) 輸出檔案。預設設定為 false,但是當 cdcInsertsAndUpdates 設定為 truey 時,來源資料庫的 INSERT 和 UPDATE 會移轉至 .csv 或 .parquet 檔案。

這些 INSERT 和 UPDATE 的記錄,取決於 includeOpForFullLoad 參數的值 (僅適用於 .csv 檔案格式)。如果 includeOpForFullLoad 設為 true,則每個 CDC 記錄的第一個欄位都會設為 IU,以指示來源的 INSERT 和 UPDATE 操作。但是,如果 includeOpForFullLoad 設定為 false,則 CDC 記錄會在沒有來源的 INSERT 或 UPDATE 操作指示的狀態下被寫入。

有關這些參數如何共同運作的更多資訊,請參閱 在遷移的 S3 資料中指示來源資料庫操作

注意

CdcInsertsOnlycdcInsertsAndUpdates 不能在同一個端點都設為 true。對於同一端點,可將 cdcInsertsOnlycdcInsertsAndUpdates 設定為 true,但不能同時將兩者設定為此參數。

預設值:false

有效值:truefalseyn

範例:--s3-settings '{"CdcInsertsAndUpdates": true}'

CdcPath

指定 CDC 檔案的資料夾路徑。對於 S3 來源,如果任務要擷取變更資料,此設定即為必要,否則即為選用。如果已設定 CdcPath,則 DMS 會從這個路徑讀取 CDC 檔案,並將資料變更複寫到目標端點。對於 S3 目標,若 PreserveTransactions 設定為 true,DMS 會驗證您已將此參數設定為 S3 目標上的資料夾路徑,可用於儲存 CDC 載入的交易順序。DMS 會在 S3 目標工作目錄或由 BucketFolderBucketName 指定的 S3 目標位置中建立此 CDC 資料夾路徑。

您不能將此參數搭配 DatePartitionEnabledAddColumnName 使用。

類型:字串

例如,如果您將 CdcPath 指定為 MyChangedData,將 BucketName 指定為 MyTargetBucket,但不指定 BucketFolder,DMS 將建立以下 CDC 資料夾路徑:MyTargetBucket/MyChangedData

如果您指定相同的 CdcPath,且將 BucketName 指定為 MyTargetBucket,將 BucketFolder 指定為 MyTargetData,DMS 會建立以下 CDC 資料夾路徑:MyTargetBucket/MyTargetData/MyChangedData

注意

3.4.2 及更高 AWS DMS 版本支援此設定。

以交易順序擷取資料變更時,無論目標上 DataFormat S3 設定的值為何,DMS 一律會將資料列變更儲存在 .csv 檔案中。DMS 不會使用 .parquet 檔案以交易順序儲存資料變更。

CdcMaxBatchInterval

將檔案輸出到 Amazon S3 的間隔長度條件上限(以秒定義)。

預設值:60 秒

指定 CdcMaxBatchInterval 並指定 CdcMinFileSize 時,將由最先符合的參數條件觸發檔案寫入。

CdcMinFileSize

將檔案輸出到 Amazon S3 的檔案大小條件下限 (以 KB 定義)。

預設值:32000 KB

指定 CdcMinFileSize 並指定 CdcMaxBatchInterval 時,將由最先符合的參數條件觸發檔案寫入。

PreserveTransactions

如果設為 true,DMS 將在 CdcPath 指定的 Amazon S3 目標上儲存變更資料擷取 (CDC) 的交易順序。

您不能將此參數搭配 DatePartitionEnabledAddColumnName 使用。

類型:布林值

以交易順序擷取資料變更時,無論目標上 DataFormat S3 設定的值為何,DMS 一律會將資料列變更儲存在 .csv 檔案中。DMS 不會使用 .parquet 檔案以交易順序儲存資料變更。

注意

3.4.2 及更高 AWS DMS 版本支援此設定。

IncludeOpForFullLoad

完全載入期間的選用參數,僅會寫入 INSERT 操作到逗號分隔值 (.csv) 輸出檔案。

針對完全載入,記錄僅能插入。在預設情況下 ( false 設定),完全載入中沒有資訊記錄於輸出檔中用來指示該資料列插入來源資料庫。如果 IncludeOpForFullLoad 設定為 truey,INSERT 記錄為 I 作為 .csv 檔案的第一個欄位的註釋。

注意

此參數與 CdcInsertsOnlyCdcInsertsAndUpdates 共同運作,僅適用於輸出到 .csv 檔案。有關這些參數如何共同運作的更多資訊,請參閱 在遷移的 S3 資料中指示來源資料庫操作

預設值:false

有效值:truefalseyn

範例:--s3-settings '{"IncludeOpForFullLoad": true}'

CompressionType

設定為 GZIP 來使用 GZIP 來壓縮目標 .csv 或 .parquet 檔案時的選用參數。此參數設為預設值時,不壓縮檔案。

預設值:NONE

有效值:GZIPNONE

範例:--s3-settings '{"CompressionType": "GZIP"}'

CsvDelimiter

在 .csv 來源檔案中用於區隔欄的分隔符號。預設為逗號 (,)。

範例:--s3-settings '{"CsvDelimiter": ","}'

CsvRowDelimiter

在 .csv 來源檔案中用於區隔列的分隔符號。預設為新行 (\n)。

範例:--s3-settings '{"CsvRowDelimiter": "\n"}'

MaxFileSize

對於完全載入期間遷移到 S3 目標時要建立的任何 .csv 檔案,此值指定其大小上限 (KB)。

預設值:1048576 KB (1 GB)

有效值:1–1,048,576

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

Rfc4180

選用參數,對於只使用 .csv 檔案格式遷移到 Amazon S3 的資料,用來設定 RFC 合規行為。將此值設定為truey使用 Amazon S3 做為目標時,如果資料中有引號、逗號或換行符號,則會用一對額外的雙引號 (「) AWS DMS 包圍整個欄。資料內的每個引號都會重複兩次。此格式遵守 RFC 4180。

預設值:true

有效值:truefalseyn

範例:--s3-settings '{"Rfc4180": false}'

EncryptionMode

對於複製到 S3 的 .csv 或 .parquet 物件檔案,您想要用來加密檔案的伺服器端加密模式。有效值為 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

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

ServerSideEncryptionKmsKeyId

如果您將 EncryptionMode 設定為 SSE_KMS,請將此參數設定為 KMS 金鑰的 Amazon Resource Name (ARN)。您可以通過在為您的帳戶創建的密鑰列表中選擇密 AWS KMS 鑰別名來找到此 ARN。當您建立金鑰時,您必須將特定政策和角色與此 KMS 金鑰建立關聯。如需詳細資訊,請參閱 建立加 AWS KMS 密 Amazon S3 目標物件的金鑰

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

DataFormat

AWS DMS 用來建立 S3 物件之檔案的輸出格式。對於 Amazon S3 目標, AWS DMS 支持 .csv 或 .lig 文件。.parquet 檔案具有二進位單欄式儲存格式,以及有效率的壓縮選項和更快速的查詢效能。如需 .parquet 檔案的詳細資訊,請參閱 https://parquet.apache.org/

預設值:csv

有效值:csvparquet

範例:--s3-settings '{"DataFormat": "parquet"}'

EncodingType

Parquet 編碼類型。編碼類型選項包括下列項目:

  • rle-dictionary – 此字典編碼使用位元壓縮和執行長度編碼的組合,更有效率地儲存重複值。

  • plain – 不編碼。

  • plain-dictionary – 此字典編碼會為特定欄中發現的值建置字典。字典以每欄區塊儲存在字典頁面中。

預設值:rle-dictionary

有效值:rle-dictionaryplainplain-dictionary

範例:--s3-settings '{"EncodingType": "plain-dictionary"}'

DictPageSizeLimit

.parquet 檔案中一個字典頁面允許的大小上限 (以位元組為單位)。如果字典頁面超過此值,頁面會使用純文字編碼。

預設值:1,024,000 (1 MB)

有效值:任何有效的整數值

範例:--s3-settings '{"DictPageSizeLimit": 2,048,000}'

RowGroupLength

.parquet 檔案的一個資料列群組的列數。

預設值:10,024 (10 KB)

有效值:任何有效的整數

範例:--s3-settings '{"RowGroupLength": 20,048}'

DataPageSize

.parquet 檔案中一個資料頁面允許的大小上限 (以位元組為單位)。

預設值:1,024,000 (1 MB)

有效值:任何有效的整數

範例:--s3-settings '{"DataPageSize": 2,048,000}'

ParquetVersion

.parquet 檔案格式的版本。

預設值:PARQUET_1_0

有效值:PARQUET_1_0PARQUET_2_0

範例:--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'

EnableStatistics

設為 truey,啟用有關 .parquet 檔案頁面和資料列群組的統計資料。

預設值:true

有效值:truefalseyn

範例:--s3-settings '{"EnableStatistics": false}'

TimestampColumnName

選用參數;可包含在 S3 目標端點資料的時間戳記欄位。

AWS DMS 當您設定TimestampColumnName為非空白STRING值時,會在移轉資料的 .csv 或 .box 物件檔案中包含一個額外的欄。

針對完全載入,此時間戳記欄位的每一資料列,包含一個資料透過 DMS 從來源移轉至目標的時間戳記。

針對 CDC 載入,每個資料列的時間戳記欄位,包含該列在來源資料庫認可的時間戳記。

此時間戳記欄位值的字串格式為 yyyy-MM-dd HH:mm:ss.SSSSSS。根據預設,此值的精確度是以毫秒為單位。針對 CDC 載入,精確度的捨入取決於 DMS 來源資料庫支援的遞交時間戳記。

AddColumnName 參數設為 true,DMS 還包含您設定的時間戳記欄的名稱,就是您設定為非空白值的 TimestampColumnName

範例:--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'

UseTaskStartTimeForFullLoadTimestamp

設定為 true 時,此參數會使用任務開始時間 (而非資料寫入目標的時間) 作為時間戳記資料行值。對於完全載入,UseTaskStartTimeForFullLoadTimestamp 設定為 true 時,時間戳記資料行的每個資料列皆包含任務開始時間。針對 CDC 載入,時間戳記資料行的每個資料列皆包含交易遞交時間。

UseTaskStartTimeForFullLoadTimestamp 設定為 false 時,時間戳記資料行中的完全載入時間戳記會隨著資料到達目標的時間而遞增。

預設值:false

有效值:truefalse

範例:--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'

UseTaskStartTimeForFullLoadTimestamp: true 協助讓完全載入的 S3 目標 TimestampColumnName 可以根據 CDC 載入的 TimestampColumnName 進行排序。

ParquetTimestampInMillisecond

選用參數,用來指定以 .parquet 格式寫入至 S3 物件之任何 TIMESTAMP 欄位值的精確度。

將此屬性設定為true或時y, AWS DMS 會以毫秒精確度將所有TIMESTAMP資料行寫入 .store 格式的檔案中。否則,DMS 會在精確度為微秒的情況下寫入它們。

目前, Amazon Athena 並且只 AWS Glue 能處理毫秒精度的TIMESTAMP值。對於 .parquet 格式的 S3 端點物件檔案,只在您計劃使用 Athena 或 AWS Glue來查詢或處理資料時,才會將此屬性設定為 true。

注意
  • AWS DMS 以微秒精確度寫入 .csv 格式的任何TIMESTAMP資料行值寫入 S3 檔案。

  • 此屬性的設定對於透過設定 TimestampColumnName 屬性來插入之時間戳記欄位值的字串格式沒有影響。

預設值:false

有效值:truefalseyn

範例:--s3-settings '{"ParquetTimestampInMillisecond": true}'

GlueCatalogGeneration

若要產生 AWS Glue Data Catalog,請將此端點設定設定為true

預設值:false

有效值:truefalse

範例:--s3-settings '{"GlueCatalogGeneration": true}'

注意:請勿將 GlueCatalogGeneration 搭配 PreserveTransactionsCdcPath 使用。

AWS Glue Data Catalog 與 Amazon S3 目標一起使用 AWS DMS

AWS Glue 是一項提供簡單方法來分類資料的服務,其中包含稱為 AWS Glue Data Catalog. 您可以 AWS Glue Data Catalog 與 Amazon S3 目標端點整合,並透過其他 AWS 服務 (例如亞馬遜雅典娜) 查詢 Amazon S3 資料。Amazon Redshift 可以使用, AWS Glue 但 AWS DMS 不支持它作為預構建的選項。

若要產生資料目錄,請將GlueCatalogGeneration端點設定設定為true, AWS CLI 如以下範例所示。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'

對於包含 csv 類型資料的完全載入複製任務,請將 IncludeOpForFullLoad 設定為 true

請勿將 GlueCatalogGeneration 搭配 PreserveTransactionsCdcPath 使用。 AWS Glue 爬行者程式無法協調儲存在指定之下的檔案的不同結構描述。CdcPath

若要讓 Amazon Athena 為您的 Amazon S3 資料建立索引,以及透過 Amazon Athena 使用標準 SQL 查詢來查詢資料,連接到端點的 IAM 角色必須具有下列政策:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::bucket123", "arn:aws:s3:::bucket123/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "arn:aws:glue:*:111122223333:catalog", "arn:aws:glue:*:111122223333:database/*", "arn:aws:glue:*:111122223333:table/*" ] }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:CreateWorkGroup" ], "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*" } ] }
參考
  • 如需詳細資訊 AWS Glue,請參閱AWS Glue 開發人員指南中的概念

  • 如需有關詳細資訊, AWS Glue Data Catalog 請參閱AWS Glue 開發人員指南中的元件

在您的 Amazon S3 目標上使用資料加密、parquet 檔案和 CDC

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

  • 用於加密 S3 目標物件的自訂 KMS 金鑰。

  • 做為 S3 目標物件儲存格式的 Parquet 檔案。

  • 在 S3 目標上包含交易順序之擷取資料變更 (CDC)。

  • AWS Glue Data Catalog 與您的 Amazon S3 目標端點整合,並透過其他服務 (例如亞馬遜雅典娜) 查詢 Amazon S3 資料。

AWS KMS 資料加密的金鑰設定

以下範例說明設定自訂的 KMS 金鑰,以加密您的 S3 目標物件。若要啟動,您可以執行下列 create-endpoint CLI 命令。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'

其中,--s3-settings 選項指定的 JSON 物件定義兩個參數。一個是 EncryptionMode 參數,值為 SSE_KMS。另一個是 ServerSideEncryptionKmsKeyId 參數,值為 arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480。這個值是自訂 KMS 金鑰的 Amazon Resource Name (ARN)。對於 S3 目標,您還可以指定額外的設定。這些設定可識別伺服器存取角色,提供預設 CSV 物件儲存格式的分隔符號,以及提供儲存貯體位置和名稱來儲存 S3 目標物件。

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

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "EncryptionMode": "SSE_S3"}'

如需使用 S3 伺服器端加密的詳細資訊,請參閱使用伺服器端加密保護資料

注意

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

關於使用 .parquet 檔案儲存 S3 目標物件的設定

建立 S3 目標物件的預設格式為 .csv 檔案。以下範例顯示一些端點設定,用於指定 .parquet 檔案做為建立 S3 目標物件的格式。您可以用所有預設值指定 .parquet 檔案格式,如下列範例所示。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'

其中,DataFormat 參數設為 parquet,以所有 S3 預設值啟用此格式。這些預設值中有一種字典編碼 ("EncodingType: "rle-dictionary") 使用位元壓縮和執行長度編碼的組合,更有效率地儲存重複值。

對於預設值以外的選項,您可以新增額外的設定,如下列範例所示。

aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": "your-bucket-name", "CompressionType": "GZIP", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000, "EnableStatistics": false }'

在這種情況下,除了幾個標準 S3 儲存貯體選項的參數和 DataFormat 參數,還會設定以下額外的 .parquet 檔案參數:

  • EncodingType – 設定為字典編碼 (plain-dictionary),將每欄中發現的值儲存在字典頁面的每欄區塊中。

  • DictPageSizeLimit – 設定為字典頁面大小上限 3 MB。

  • EnableStatistics – 停用預設值,以允許收集有關 Parquet 檔案頁面和資料列群組的統計資料。

在 S3 目標上包含交易順序之擷取資料變更 (CDC)

根據預設,當 AWS DMS 執行 CDC 工作時,它會將來源資料庫 (或資料庫) 中記錄的所有資料列變更儲存在每個資料表的一或多個檔案中。每組包含相同資料表變更的檔案都位於與該表格關聯的單一目標目錄中。 AWS DMS 當資料庫表格移轉至 Amazon S3 目標端點時,建立的目標目錄數量相同。檔案將儲存在這些目錄的 S3 目標上,而不考慮交易順序。如需檔案命名慣例、資料內容及格式的詳細資訊,請參閱 使用 Amazon S3 作為目標 AWS Database Migration Service

若要以同時擷取交易順序的方式擷取來源資料庫變更,您可以指定 S3 端點設定, AWS DMS 將所有資料庫表格的資料列變更存放在一或多個根據交易大小建立的 .csv 檔案中。對於每個交易中涉及的所有資料表,這些 .csv 交易檔案包含依交易順序列出的所有資料列變更。這些交易檔案將一起存放於您同樣在 S3 目標上指定的單一交易目錄中。在每個交易檔案中,每個資料列變更的交易操作、資料庫及來源資料表的身分,將儲存為資料列資料的一部分,如下所示。

operation,table_name,database_schema_name,field_value,...

其中 operation 是已變更資料列上的交易作業,table_name 是已變更資料列的資料庫資料表名稱,database_schema_name 是資料表所在資料庫結構描述的名稱,而 field_value 是指定資料列資料的一或多個欄位值當中的第一個。

下列交易檔案的範例展示涉及兩個資料表之一或多個交易的已變更資料列。

I,Names_03cdcad11a,rdsTempsdb,13,Daniel U,Names_03cdcad11a,rdsTempsdb,23,Kathy D,Names_03cdcad11a,rdsTempsdb,13,Cathy I,Names_6d152ce62d,rdsTempsdb,15,Jane I,Names_6d152ce62d,rdsTempsdb,24,Chris I,Names_03cdcad11a,rdsTempsdb,16,Mike

在這裡,每列上的交易操作由第一欄的 I (插入)、U (更新) 或 D (刪除) 表示。第二欄的值是資料表名稱 (例如 Names_03cdcad11a)。第三欄的值是資料庫結構描述名稱 (例如 rdsTempsdb)。剩餘的欄會填入您自己的列資料 (例如 13,Daniel)。

此外,根據下列命 AWS DMS 名慣例,使用時間戳記為其在 Amazon S3 目標上建立的交易檔案命名。

CDC_TXN-timestamp.csv

其中 timestamp 是建立交易檔案的時間,如下列範例所示。

CDC_TXN-20201117153046033.csv

檔案名稱中的這個時間戳記可確保當您在交易目錄中列出交易檔案時,這些檔案會依交易順序建立和列出。

注意

以交易順序擷取資料變更 AWS DMS 時,無論目標上 DataFormat S3 設定的值為何,一律會將資料列變更儲存在 .csv 檔案中。 AWS DMS 不會使用 .quet 文件按事務順序保存數據更改。

若要控制在資料複寫任務期間寫入 Amazon S3 目標的頻率,您可以設定 CdcMaxBatchIntervalCdcMinFileSize 設定。在沒有任何額外負荷操作的情況下分析資料時,此設定可使效能提升。如需更多資訊,請參閱使用 Amazon S3 做為目標時的端點設定 AWS DMS

告訴 AWS DMS 按事務順序存儲所有行更改
  1. 將目標上的 PreserveTransactions S3 設定設為 true

  2. 將目標上的 CdcPath S3 設定設定為要存放 .csv 交易檔案 AWS DMS 的相對資料夾路徑。

    AWS DMS 在預設 S3 目標儲存貯體和工作目錄下,或在您使用目標上的和 BucketFolder S3 設定指定的儲存貯體BucketName和儲存貯體資料夾下建立此路徑。

在遷移的 S3 資料中指示來源資料庫操作

將記錄 AWS DMS 遷移到 S3 目標時,它可以在每個遷移記錄中建立一個額外的欄位。此額外的欄位指示來源資料庫套用到記錄的操作。 AWS DMS 建立和設定第一個欄位的方式取決於includeOpForFullLoadcdcInsertsOnly和的移轉任務類型和設定cdcInsertsAndUpdates

如果完全載入的 includeOpForFullLoadtrue, AWS DMS 一律會在每個 .csv 記錄中額外建立第一個欄位。此欄位包含字母 I (INSERT),用來指示資料列是插入到來源資料庫。對於 CDC 負載 false (預設值) 時cdcInsertsOnly, AWS DMS 也一律會在每個 .csv 或 .store 記錄中建立額外的第一個欄位。此欄位包含字母 I (INSERT)、U (UPDATE) 或 D (DELETE),用來指示來源資料庫的插入、更新或刪除資料列。

在下表中,您可以了解如何 includeOpForFullLoadcdcInsertsOnly 屬性的設定如何共同運作,影響遷移記錄設定。

使用這些參數設定 DMS 對於 .csv 和 .parquet 輸出的設定目標記錄如下
includeOpForFullLoad cdcInsertsOnly 對於完全載入 對於 CDC 載入
true true 新增第一個欄位的值設定為 I 新增第一個欄位的值設定為 I
false false 沒有新增的欄位 新增第一個欄位的值設定為 IU、或 D
false true 沒有新增的欄位 沒有新增的欄位
true false 新增第一個欄位的值設定為 I 新增第一個欄位的值設定為 IU、或 D

includeOpForFullLoadcdcInsertsOnly 設定為相同的值,目標記錄會根據控制目前遷移類型設定記錄的屬性設定。這個屬性是 includeOpForFullLoad 用於完全載入和 cdcInsertsOnly CDC 載入。

includeOpForFullLoadcdcInsertsOnly設定為不同的值時, AWS DMS 使 CDC 和滿載的目標記錄設定保持一致。藉由任何先前 includeOpForFullLoad 指定的完全載入記錄,設定 CDC 載入符合記錄設定。

換言之,假設完全載入設為新增第一個欄位,用來指示插入記錄。在這種情況下,接下來的 CDC 載入設為新增第一個欄位,用來指示插入、更新或刪除記錄作為適當的來源。相反地,假設完全載入設定為 新增第一個欄位,用來指示插入記錄。在這種情況下,CDC 載入也設定為每個記錄不新增第一個欄位,無論來源對應的記錄操作為何。

同樣地,DMS 建立及設定額外第一個欄位的方式,取決於 includeOpForFullLoadcdcInsertsAndUpdates 的設定。在下表中,您可以了解如何 includeOpForFullLoadcdcInsertsAndUpdates 屬性的設定如何共同運作,以影響此格式中的遷移記錄設定。

使用這些參數設定 DMS 對於 .csv 輸出的設定目標記錄如下
includeOpForFullLoad cdcInsertsAnd更新 對於完全載入 對於 CDC 載入
true true 新增第一個欄位的值設定為 I 新增第一個欄位的值設定為 IU
false false 沒有新增的欄位 新增第一個欄位的值設定為 IU、或 D
false true 沒有新增的欄位 新增第一個欄位的值設定為 IU
true false 新增第一個欄位的值設定為 I 新增第一個欄位的值設定為 IU、或 D

S3 Parquet 的目標資料類型

下表顯示使用時支援的 Parquet 目標資料類型,以 AWS DMS 及來自 AWS DMS 資料類型的預設對映。

如需有關資 AWS DMS 料類型的其他資訊,請參閱AWS Database Migration Service 的資料類型

AWS DMS 資料類型

S3 parquet 資料類型

BYTES BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT64
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL