本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 OpenSearch 擷取管道與 Amazon DynamoDB 使用
您可以將 OpenSearch 擷取管道與 DynamoDB 搭配使用,將 DynamoDB 表格事件 (例如建立、更新和刪除) 串流至 Amazon OpenSearch 服務網域和集合。 OpenSearch 擷取管道整合了變更資料擷取 (CDC) 基礎架構,以提供高規模、低延遲的方式來持續從 DynamoDB 表格串流資料。
您可以透過兩種方式使用 DynamoDB 做為處理資料的來源,無論是否有完整的初始快照。
完整的初始快照是 DynamoDB 使用point-in-time 復原 (PITR) 功能所採用的資料表備份。DynamoDB 此快照上傳到 Amazon S3。從那裡, OpenSearch 擷取管線會將其傳送到網域中的一個索引,或將其分割為網域中的多個索引。為了保持 DynamoDB 中的資料 OpenSearch 一致性,管線會將 DynamoDB 表中的所有建立、更新和刪除事件與儲存在索引中的文件同步。 OpenSearch
使用完整初始快照時,擷取管道會先 OpenSearch 擷取快照,然後開始從 DynamoDB Streams 讀取資料。它最終可以追趕並維持 DynamoDB 和. 之間近乎即時的資料一致性。 OpenSearch當您選擇此選項時,您必須在表格上同時啟用 PITR 和 DynamoDB 串流。
您也可以使用與 DynamoDB 的 OpenSearch 擷取整合,在沒有快照的情況下串流事件。如果您已經擁有其他機制的完整快照,或者您只想從 DynamoDB 資料表中 DynamoDB Streams 目前的事件,請選擇此選項。選擇此選項時,您只需要在表格上啟用 DynamoDB 串流即可。
如需有關此整合的詳細資訊,請參閱開發人員指南中的 DynamoDB 零 ETL 與 Amazon OpenSearch 服務整合。Amazon DynamoDB
必要條件
若要設定管線,您必須啟用 DynamoDB 串流的 DynamoDB 表格。您的串流應該使用NEW_IMAGE
串流檢視類型。不過,NEW_AND_OLD_IMAGES
如果此串流檢視類型符合您的使用案例, OpenSearch 擷取管線也可以串流事件。
如果您使用的是快照,您也必須在資料表上啟用 point-in-time 復原功能。如需詳細資訊,請參閱 Amazon DynamoDB 開發人員指南中的建立表格、啟用 point-in-time 復原和啟用串流。
步驟 1:設定管線角色
設定 DynamoDB 表之後,請設定要在管線組態中使用的管線角色,並在角色中新增下列 DynamoDB 權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowRunExportJob", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeContinuousBackups", "dynamodb:ExportTableToPointInTime" ], "Resource": [ "arn:aws:dynamodb:
us-east-1
:{account-id}
:table/my-table
" ] }, { "Sid": "allowCheckExportjob", "Effect": "Allow", "Action": [ "dynamodb:DescribeExport" ], "Resource": [ "arn:aws:dynamodb:us-east-1
:{account-id}
:table/my-table
/export/*" ] }, { "Sid": "allowReadFromStream", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": [ "arn:aws:dynamodb:us-east-1
:{account-id}
:table/my-table
/stream/*" ] }, { "Sid": "allowReadAndWriteToS3ForExport", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::my-bucket
/{exportPath}
/*" ] } ] }
您也可以使用 AWS KMS 客戶管理的金鑰來加密匯出資料檔案。若要解密匯出的物件,s3_sse_kms_key_id
請以下列格式在管線的匯出組態中指定金鑰 ID:arn:aws:kms:
下列原則包含使用客戶管理金鑰的必要權限:us-west-2
:{account-id}
:key/my-key-id
{ "Sid": "allowUseOfCustomManagedKey", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource":
arn:aws:kms:
}us-west-2
:{account-id}
:key/my-key-id
步驟 2:建立管道
然後,您可以如下所示設定 OpenSearch 擷取管道,該管道會將 DynamoDB 指定為來源。此範例管道會從 table-a
PITR 快照擷取資料,接著是 DynamoDB Streams 中的事件。的開始位置LATEST
表示管道應從 DynamoDB Streams 讀取最新資料。
version: "2" cdc-pipeline: source: dynamodb: tables: - table_arn: "arn:aws:dynamodb:
us-west-2
:{account-id}
:table/table-a
" export: s3_bucket: "my-bucket
" s3_prefix: "export/" stream: start_position: "LATEST" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::{account-id}
:role/pipeline-role" sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com
"] index: "${getMetadata(\"table_name
\")}" index_type: custom normalize_index: true document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external"
您可以使用預先設定的 DynamoDB 藍圖來建立此管道。如需詳細資訊,請參閱 使用藍圖建立管道。
資料一致性
OpenSearch 擷取支援確 end-to-end 認,以確保資料耐久性。管道讀取快照或串流時,會動態建立分割區以進行 parallel 處理。管道會在擷取 OpenSearch 網域或集合中的所有記錄後收到確認後,將分割區標示為完整。
如果您想要導入 OpenSearch 無伺服器搜尋集合,可以在管道中產生文件 ID。如果您想要導入 OpenSearch 無伺服器時間序列集合,請注意,管線不會產生文件 ID。
OpenSearch 擷取管線也會將傳入的事件動作對應至對應的大量索引動作,以協助擷取文件。這樣可以保持資料一致,以便 DynamoDB 中的每個資料變更都會與中的對應文件變更協調。 OpenSearch
對映資料類型
OpenSearch 服務會動態地將每個傳入文件中的資料類型對應至 DynamoDB 中的對應資料類型。下表顯示了 OpenSearch 服務如何自動映射各種數據類型。
資料類型 | OpenSearch | DynamoDB |
---|---|---|
Number |
OpenSearch 自動對應數值資料。如果數字是整數,則將其 OpenSearch 映射為長值。如果數字是分數,則將其 OpenSearch 映射為浮點值。 OpenSearch 根據第一個發送的文檔動態映射各種屬性。如果 DynamoDB 中的相同屬性混合了資料類型 (例如整數和小數),則對應可能會失敗。 例如,如果您的第一個文件具有整數的屬性,而稍後的文件具有與小數編號相同的屬性,則 OpenSearch 無法內嵌第二個文件。在這些情況下,您應該提供明確的對應範本,如下所示:
如果您需要雙精度,請使用字符串類型的字段映射。中沒有支持 38 位精度的等效數字類型 OpenSearch。 |
|
數字, 集合 | OpenSearch 自動將數字集合映射到長值或浮點值的數組中。與標量數一樣,這取決於攝入的第一個數字是整數還是小數。您可以使用與對映純量字串相同的方式,為數字集提供對映。 |
DynamoDB 支援代表一組數字的類型。 |
字串 |
OpenSearch 自動將字串值對應為文字。在某些情況下 (例如列舉值),您可以對應至關鍵字類型。 下列範例顯示如何將名為的 DynamoDB 屬性對應
|
|
字符串集 |
OpenSearch 自動將一個字符串集映射到字符串數組中。您可以使用與對映純量字串相同的方式,為字串集提供對應。 |
DynamoDB 支援代表字串集合的類型。 |
二進位 |
OpenSearch 自動將二進位資料對應為文字。您可以提供一個映射,將這些字段寫入為中的二進制字段 OpenSearch。 下列範例顯示如何將名為的 DynamoDB 屬性對應
|
DynamoDB 進位類型屬性。 |
二進制集 |
OpenSearch 自動將二進制集映射到二進制數據的數組作為文本。您可以使用與對映純量二進位相同的方式,為數字集提供對應。 |
DynamoDB 支援代表二進位值集合的類型。 |
Boolean |
OpenSearch 將 DynamoDB 布林型別對應至布 OpenSearch 林型別。 |
DynamoDB 林型別屬性。 |
Null |
OpenSearch 可以擷取具有 DynamoDB 空值類型的文件。它將值保存為文檔中的空值。此類型沒有對應,且此欄位無法編製索引或搜尋。 如果空類型使用相同的屬性名稱,然後稍後變更為不同類型 (例如 string),則會為第一個非空值 OpenSearch 建立動態對應。後續的值仍然 DynamoDB 是空值。 |
支援空類型屬性。 |
Map |
OpenSearch 將 DynamoDB 會將屬性對應至巢狀欄位。相同的對映適用於巢狀欄位中。 下列範例會將巢狀欄位中的字串對應至中的關鍵字類型 OpenSearch:
|
支援對應類型屬性。 |
清單 |
OpenSearch 根據清單中的內容,為 DynamoDB 清單提供不同的結果。 當清單包含所有相同類型的純量類型時 (例如,所有字串的清單),則會將清單 OpenSearch 內嵌為該類型的陣列。這適用於字符串,數字,布爾和空類型。每種類型的限制都與該類型的標量的限制相同。 您也可以使用與用於地圖相同的對映來提供對映清單的對映。 您無法提供混合類型的清單。 |
支援清單類型屬性。 |
設定 |
OpenSearch 根據集合中的內容,為 DynamoDB 集提供不同的結果。 當一個集合包含所有相同類型的標量類型(例如,一組所有字符串),然後將該集合 OpenSearch 內嵌為該類型的數組。這適用於字符串,數字,布爾和空類型。每種類型的限制都與該類型的標量的限制相同。 您也可以使用與用於地圖相同的對映來提供對映集的對映。 您無法提供一組混合類型。 |
DynamoDB 支援代表集合的類型。 |
建議您在擷取管線中設定無效字母佇列 (DLQ)。 OpenSearch 如果您已設定佇列, OpenSearch Service 會將由於動態對應失敗而無法擷取的所有失敗文件傳送至佇列。
如果自動對映失敗,您可以在管線組態template_content
中使用 template_type
and 來定義明確的對應規則。或者,您可以在啟動管道之前,直接在搜尋網域或集合中建立對應範本。
限制
為 DynamoDB 設定 OpenSearch 擷取管線時,請考慮下列限制:
-
與 DynamoDB 的 OpenSearch 擷取整合目前不支援跨區域擷取。您的 DynamoDB 資料表和 OpenSearch 擷取管道必須位於相同的資料表中。 AWS 區域
-
您的 DynamoDB 資料表和 OpenSearch 擷取管道必須位於相同的資料表中。 AWS 帳戶
-
OpenSearch 擷取管線僅支援一個 DynamoDB 表做為其來源。
-
DynamoDB Streams 最多只能將資料儲存在記錄中,最多可儲存 24 小時。如果從大型資料表的初始快照擷取需要 24 小時或更長時間,則會有一些初始資料遺失。若要減少此資料遺失,請預估資料表的大小,並設定 OpenSearch 擷取管線的適當運算單元。