使用 OpenSearch 擷取管道搭配 Amazon DocumentDB - Amazon OpenSearch 服務

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

使用 OpenSearch 擷取管道搭配 Amazon DocumentDB

您可以將 OpenSearch 擷取管道與 Amazon DocumentDB 搭配使用,將文件變更 (例如建立、更新和刪除) 串流至 Amazon OpenSearch 服務網域和集合。 OpenSearch 擷取管道可利用變更資料擷取 (CDC) 機制 (如果 Amazon DocumentDB 叢集上有的話),或者API輪詢提供高規模、低延遲的方式來持續從 Amazon DocumentDB 叢集串流資料。

您可以透過兩種方式使用 Amazon DocumentDB 做為處理資料的來源,無論是否有完整的初始快照。

完整的初始快照是整個 Amazon DocumentDB 集合的大量查詢。Amazon DocumentDB 將此快照上傳到 Amazon S3。從那裡, OpenSearch 擷取管線會將其傳送到網域中的一個索引,或將其分割為網域中的多個索引。為了保持 Amazon DocumentDB 中的資料和 OpenSearch 一致性,管道會將 Amazon DocumentDB 集合中的所有建立、更新和刪除事件與儲存在索引中的文件同步。 OpenSearch

當您使用完整的初始快照時, OpenSearch 擷取管道會先擷取快照,然後開始從 Amazon DocumentDB 變更串流讀取資料。它最終趕上並維持 Amazon DocumentDB 和. 之間的近乎即時的資料一致性。 OpenSearch

您也可以使用 Amazon DocumentDB 的 OpenSearch 擷取整合,在不使用快照的情況下串流事件。如果您已經擁有來自某些其他機制的完整快照,或者只是想要使用變更串流從 Amazon DocumentDB 集合串流目前的事件,請選擇此選項。

使用這兩個選項時,如果在管道中設定中啟用串流,則必須在 Amazon DocumentDB 集合上啟用變更串流。如果您只使用完整載入或匯出,則不需要啟用變更串流。

必要條件

建立 OpenSearch 擷取管道之前,請執行下列步驟:

  1. 依照 Amazon DocumentDB 開發人員指南中的建立 Amazon DocumentDB 叢集中的步驟,建立具有讀取資料權限的 Amazon DocumentDB 叢集如果您使用CDC基礎設施,請確保將 Amazon DocumentDB 叢集設定為發佈變更串流。

  2. TLS在您的 Amazon DocumentDB 叢集上啟用。

  3. 設定要與 OpenSearch 擷取搭配使用的私人位址空間。VPC CIDR

  4. 使用設定您的 Amazon DocumentDB 叢集上的身份驗證。 AWS Secrets Manager按照自動輪替 Amazon DocumentDB 的密碼中的步驟啟用密碼輪替。如需詳細資訊,請參閱 Amazon DocumentDB 中使用以角色為基礎的存取控制和安全性進行資料庫存取。

  5. 如果您使用變更串流訂閱 Amazon DocumentDB 收集上的資料變更,請使用參數將保留期延長至最多 7 天,以避免資料遺失。change_stream_log_retention_duration根據預設,在記錄事件之後,變更串流事件會儲存 3 小時,因此時間不足以容納大型集合。如要修改串流保留期間的變更,請參閱修改變串流記錄保留期間

  6. 建立 OpenSearch 服務網域或 OpenSearch 無伺服器集合。如需詳細資訊,請參閱建立 OpenSearch 服務網域建立集合

  7. 資源型政策附加至您的網域,或將資料存取原則附加至您的集合。這些存取政策允許 OpenSearch 擷取將資料從 Amazon DocumentDB 叢集寫入您的網域或集合。

    下列範例網域存取原則允許您在下一個步驟中建立的管線角色將資料寫入網域。確保您使用自己resource的更新ARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{pipeline-account-id}:role/pipeline-role" }, "Action": [ "es:DescribeDomain", "es:ESHttp*" ], "Resource": [ "arn:aws:es:{region}:{account-id}:domain/domain-name" ] } ] }

    若要建立具有正確權限的IAM角色,以存取集合或網域的寫入資料,請參閱網域的必要權限集合的必要權限

步驟 1:設定管線角色

設定 Amazon DocumentDB 管道先決條件之後,請設定要在管道組態中使用的管道角色,並在該角色中新增以下 Amazon DocumentDB 許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowS3ListObjectAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::{s3_bucket}" ], "Condition": { "StringLike": { "s3:prefix": "{s3_prefix}/*" } } }, { "Sid": "allowReadAndWriteToS3ForExportStream", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::{s3_bucket}/{s3_prefix}/*" ] }, { "Sid": "SecretsManagerReadAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": ["arn:aws:secretsmanager:{region}:{account-id}:secret:secret-name"] }, { "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": [ "arn:aws:ec2:*:{account-id}:network-interface/*", "arn:aws:ec2:*:{account-id}:subnet/*", "arn:aws:ec2:*:{account-id}:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:Describe*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } } ] }

您必須對用於建立 OpenSearch 擷取管道的IAM角色提供上述 Amazon EC2 許可,因為管道使用這些許可在您VPC的網路界面中建立和刪除網路界面。管道只能透過此網路界面存取 Amazon DocumentDB 叢集。

步驟 2:建立管道

然後,您可以設定如下所示的 OpenSearch 擷取管道,該管道會將 Amazon DocumentDB 指定為來源。請注意,若要填入索引名稱,getMetadata函數會使用documentdb_collection做為中繼資料索引鍵。如果您想在不使用該getMetadata方法的情況下使用不同的索引名稱,則可以使用配置index: "my_index_name"

version: "2" documentdb-pipeline: source: documentdb: acknowledgments: true host: "https://docdb-cluster-id.us-east-1.docdb.amazonaws.com" port: 27017 authentication: username: ${aws_secrets:secret:username} password: ${aws_secrets:secret:password} aws: sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" s3_bucket: "bucket-name" s3_region: "bucket-region" s3_prefix: "path" #optional path for storing the temporary data collections: - collection: "dbname.collection" export: true stream: true sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"documentdb_collection\")}" index_type: custom document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external" extension: aws: secrets: secret: secret_id: "my-docdb-secret" region: "us-east-1" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" refresh_interval: PT1H

您可以使用預先設定的 Amazon DocumentDB 藍圖來建立此管道。如需詳細資訊,請參閱使用藍圖建立管道

如果您使用建立管道,您還必須將管道附加到您VPC的,才能使用 Amazon DocumentDB 做為來源。 AWS Management Console 若要這麼做,請找到 [網路設定] 區段,選取 [連接至] VPC 核取方塊,然後CIDR從提供的預設選項中選擇您的選項,或選取您自己的選項。您可以使用 CIDR「RFC1918 年最佳目前作法」中定義的私人位址空間中的任何位址空間。

若要提供自訂CIDR,請從下拉式功能表中選取「其他」。若要避免 OpenSearch 擷取和 Amazon DocumentDB 之間的 IP 地址發生衝突,請確保 Amazon DocumentDB 與用於擷取的VPCCIDR不同。CIDR OpenSearch

如需詳細資訊,請參閱設定管線的VPC存取權限

資料一致性

管道會持續輪詢或接收來自 Amazon DocumentDB 叢集的變更,並更新索引中的對應文件,以確保資料一致性。 OpenSearch

OpenSearch 擷取支援確 end-to-end 認,以確保資料耐久性。管道讀取快照或串流時,會動態建立分割區以進行 parallel 處理。管道會在擷取 OpenSearch 網域或集合中的所有記錄後收到確認後,將分割區標示為完整。

如果您想要導入 OpenSearch 無伺服器搜尋集合,可以在管道中產生文件 ID。如果您想要內嵌至 OpenSearch 無伺服器時間序列集合,請注意,管線不會產生文件 ID,因此您必須在管線接收器組態document_id: "${getMetadata(\"primary_key\")}"中省略。

OpenSearch 擷取管線也會將傳入的事件動作對應至對應的大量索引動作,以協助擷取文件。這樣可以保持資料一致,以便 Amazon DocumentDB 中的每個資料變更都能與中的對應文件變更協調。 OpenSearch

對映資料類型

OpenSearch 服務會將每個傳入文件中的資料類型動態對應至 Amazon DocumentDB 中的對應資料類型。下表顯示了 OpenSearch 服務如何自動映射各種數據類型。

資料類型 OpenSearch Amazon DocumentDB
Integer

OpenSearch 自動將 Amazon DocumentDB 整數值映射到 OpenSearch整數。

OpenSearch 根據第一個傳送的文件動態對應欄位。如果您在 Amazon DocumentDB 中混合使用相同屬性的資料類型,則自動對應可能會失敗。

例如,如果您的第一個文件具有 long 屬性,而稍後的文件具有與整數相同的屬性,則 OpenSearch 無法內嵌第二個文件。在這些情況下,您應該提供一個明確的映射模板,以選擇最靈活的數字類型,如下所示:

{ "template": { "mappings": { "properties": { "MixedNumberField": { "type": "float" } } } } }

Amazon DocumentDB 支持整數。

Long

OpenSearch 自動將 Amazon DocumentDB 長值映射到 OpenSearch多頭。

OpenSearch 根據第一個傳送的文件動態對應欄位。如果您在 Amazon DocumentDB 中混合使用相同屬性的資料類型,則自動對應可能會失敗。

例如,如果您的第一個文件具有 long 屬性,而稍後的文件具有與整數相同的屬性,則 OpenSearch 無法內嵌第二個文件。在這些情況下,您應該提供一個明確的映射模板,以選擇最靈活的數字類型,如下所示:

{ "template": { "mappings": { "properties": { "MixedNumberField": { "type": "float" } } } } }

Amazon DocumentDB 支持多頭。

字串

OpenSearch 自動將字串值對應為文字。在某些情況下 (例如列舉值),您可以對應至關鍵字類型。

下面的示例演示了如何將 Amazon DocumentDB 屬性映射PartType到一個 OpenSearch 關鍵字。

{ "template": { "mappings": { "properties": { "PartType": { "type": "keyword" } } } } }

Amazon DocumentDB 支持字符串。

Double

OpenSearch 自動將 Amazon DocumentDB 雙值映射到 OpenSearch雙倍。

OpenSearch 根據第一個傳送的文件動態對應欄位。如果您在 Amazon DocumentDB 中混合使用相同屬性的資料類型,則自動對應可能會失敗。

例如,如果您的第一個文件具有 long 屬性,而稍後的文件具有與整數相同的屬性,則 OpenSearch 無法內嵌第二個文件。在這些情況下,您應該提供一個明確的映射模板,以選擇最靈活的數字類型,如下所示:

{ "template": { "mappings": { "properties": { "MixedNumberField": { "type": "float" } } } } }
Amazon DocumentDB 支持雙打。
日期

依預設,日期對應至中的整數 OpenSearch。您可以定義自訂對應範本,將日期對應至 OpenSearch 日期。

{ "template": { "mappings": { "properties": { "myDateField": { "type": "date", "format": "epoch_second" } } } } }
Amazon DocumentDB 支持日期。
時間戳記

依預設,時間戳記會對應至中的整數 OpenSearch。您可以定義自訂對應範本,將日期對應至 OpenSearch日期。

{ "template": { "mappings": { "properties": { "myTimestampField": { "type": "date", "format": "epoch_second" } } } } }
Amazon DocumentDB 支持時間戳。
Boolean

OpenSearch Amazon DocumentDB 布爾類型映射到一個 OpenSearch 布爾類型。

Amazon DocumentDB 支持布爾類型屬性。

Decimal (小數)

OpenSearch 將 Amazon DocumentDB 映射到嵌套字段的屬性。相同的對映適用於巢狀欄位。

下列範例會將巢狀欄位中的字串對應至中的關鍵字類型 OpenSearch:

{ "template": { "mappings": { "properties": { "myDecimalField": { "type": "double" } } } } }

使用此自定義映射,您可以查詢和聚合具有雙級精度的字段。原始值會保留文 OpenSearch件_source屬性中的完整精確度。如果沒有此對映,則依預設 OpenSearch 會使用文字。

Amazon DocumentDB 支持小數。
規則運算式 正則表達式類型創建嵌套字段。這些包括<myFieldName>.pattern<myFieldName>.options.

Amazon DocumentDB 支持正則表達式。

二進位資料

OpenSearch 自動將 Amazon DocumentDB 二進制數據映射到 OpenSearch文本。您可以提供一個映射,將這些字段寫入為中的二進制字段 OpenSearch。

下列範例顯示如何將名為的 Amazon DocumentDB 欄位對應imageData至 OpenSearch 二進位欄位。

{ "template": { "mappings": { "properties": { "imageData": { "type": "binary" } } } } }
Amazon DocumentDB 支持二進制數據字段
ObjectId 具有 objectId 映射到 OpenSearch 文本字段類型的字段。該值將是的字串表示objectId。 Amazon DocumentDB 支持。objectIds
Null

OpenSearch 可以使用 Amazon DocumentDB 空類型導入文檔。它將值保存為文檔中的空值。此類型沒有對應,且此欄位無法編製索引或搜尋。

如果空類型使用相同的屬性名稱,然後稍後變更為不同類型 (例如 string),則會為第一個非空值 OpenSearch 建立動態對應。後續值仍然可以是 Amazon DocumentDB 空值。

Amazon DocumentDB 支持空類型字段
未定義

OpenSearch 可以使用 Amazon DocumentDB 未定義類型導入文檔。它將值保存為文檔中的空值。此類型沒有對應,且此欄位無法編製索引或搜尋。

如果未定義的類型使用相同的欄位名稱,之後又變更為不同類型 (例如字串),則會為第一個非未定義值 OpenSearch 建立動態對應。後續值仍然可以是 Amazon DocumentDB 未定義的值。

Amazon DocumentDB 支持未定義的類型字段
MinKey

OpenSearch 可以使用 Amazon Document minKey DB 類型導入文檔。它將值保存為文檔中的空值。此類型沒有對應,且此欄位無法編製索引或搜尋。

如果 minKey 類型使用相同的欄位名稱,之後又變更為不同類型 (例如字串),則會為第一個非minKey 值 OpenSearch 建立動態對應。後續值仍然可以是 Amazon DocumentDB minKey 值。

Amazon DocumentDB 支持minKey 類型字段。
MaxKey

OpenSearch 可以使用 Amazon Document maxKey DB 類型導入文檔。它將值保存為文檔中的空值。此類型沒有對應,且此欄位無法編製索引或搜尋。

如果 maxKey 類型使用相同的欄位名稱,之後又變更為不同類型 (例如字串),則會為第一個非maxKey 值 OpenSearch 建立動態對應。後續值仍然可以是 Amazon DocumentDB maxKey 值。

Amazon DocumentDB 支持maxKey 類型字段。

建議您在 OpenSearch 擷取管線中設定無效字母佇列 (DLQ)。如果您已設定佇列, OpenSearch Service 會將由於動態對應失敗而無法擷取的所有失敗文件傳送至佇列。

如果自動對映失敗,您可以在管線組態template_content中使用 template_type and 來定義明確的對應規則。或者,您可以在啟動管道之前,直接在搜尋網域或集合中建立對應範本。

限制

為 Amazon DocumentDB 設定 OpenSearch 擷取管道時,請考慮下列限制:

  • 與 Amazon DocumentDB 的 OpenSearch 擷取整合目前不支援跨區域擷取。您的 Amazon DocumentDB 叢集和 OpenSearch 擷取管道必須位於相同。 AWS 區域

  • 與 Amazon DocumentDB 的 OpenSearch 擷取整合目前不支援跨帳戶擷取。您的 Amazon DocumentDB 叢集和 OpenSearch 擷取管道必須位於相同。 AWS 帳戶

  • OpenSearch 擷取管道僅支援一個 Amazon DocumentDB 叢集做為其來源。

  • 與 Amazon 文件資料庫的 OpenSearch 擷取整合特別支援 Amazon DocumentDB 執行個體型叢集。它不支援 Amazon DocumentDB 彈性叢集。

  • OpenSearch 擷取整合僅支援 AWS Secrets Manager 做為 Amazon DocumentDB 叢集的身分驗證機制。

  • 您無法更新現有管線組態,以便從不同的資料庫或集合擷取資料。相反地,您必須建立新的管線。