使用遠端重新索引遷移 Amazon OpenSearch 服務索引 - Amazon OpenSearch 服務

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

使用遠端重新索引遷移 Amazon OpenSearch 服務索引

遠端重新索引可讓您將索引從一個 Amazon OpenSearch 服務網域複製到另一個網域。您可以從任何 OpenSearch 服務網域或自我管理 OpenSearch 和 Elasticsearch 叢集移轉索引。

遠端網域和索引是指資料的來源,或您要從中複製資料的網域和索引。本機網域和索引是指資料的目標,或是您要將資料複製到的網域和索引。

遠端重新建立索引需要 OpenSearch 1.0 或更新版本,或在本機網域上使用彈性搜尋 6.7 或更新版本。遠端網域必須與本機網域較低或相同的主要版本。Elasticsearch 版本被認為於 OpenSearch版本,這意味著您可以將數據從 Elasticsearch 域重新索引到域。 OpenSearch 在相同的主要版本中,遠端網域可以是任何次要版本。例如,支持從彈性搜索 7.10.x 到 7.9 的遠程重新索引,但不支持 OpenSearch 1.0 到彈性搜索 7.10.x。

注意

本文件說明如何在 Amazon OpenSearch 服務網域之間重新索引資料。如需reindex作業的完整文件,包括詳細步驟和支援的選項,請參閱文件中的重新建立索引文件。 OpenSearch

必要條件

遠端重新索引有以下要求:

  • 遠端網域必須可從本機網域存取。對於位於 VPC 內的遠端網域,本機網域必須具有 VPC 的存取權。此程序會因網路組態而異,但可能涉及連線至 VPN 或受管理網路,或使用原生 VPC 端點連線。如需進一步了解,請參閱在 VPC 中啟動您的 Amazon OpenSearch 服務域

  • 要求必須由遠端網域授權,就像任何其他 REST 要求一樣。如果遠端網域啟用了精細的存取控制,您必須擁有在遠端網域上執行重新索引並讀取本機網域上索引的權限。如需更多安全性考量,請參閱 Amazon OpenSearch 服務中的精細訪問控制

  • 建議您在開始重新建立索引程序之前,在本機網域上建立具有所需設定的索引。

  • 如果您的網域為資料節點使用 T2 或 T3 執行個體類型,則無法使用遠端重新索引。

重新索引 OpenSearch 服務互聯網域之間的數據

最基本的案例是,遠端索引與具有可公開存取端點的本機網域相同 AWS 區域 ,而且您已簽署 IAM 登入資料。

在遠端網域中,指定要重新建立索引的來源遠端索引,以及要重新建立索引的本機索引:

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

您必須在遠端網域端點的結尾新增 443,才能進行驗證檢查。

若要確認索引是否已複製到本機網域,請將此要求傳送至本機網域:

GET local_index/_search

如果遠端索引位於與本機網域不同的地區,請傳入其區域名稱,例如以下請求範例:

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "region": "eu-west-1" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

如果是隔離的區域 (例如 AWS GovCloud (US) 中國區域),端點可能無法存取,因為在這些區域中無法辨識您的 IAM 使用者。

如果遠端網域以基本驗證保護,請指定使用者名稱和密碼:

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "username": "username", "password": "password" }, "index": "remote_index" }, "dest": { "index": "local_index" } }

當遠端位於 VPC 中時,重新索引 OpenSearch 服務網域之間的資料

每個 OpenSearch 服務網域都是由其自己的內部虛擬私有雲 (VPC) 基礎結構組成。當您在現有的 OpenSearch Service VPC 中建立新網域時,會為 VPC 中的每個資料節點建立 elastic network interface。

由於遠端重新建立索引作業是從遠端 OpenSearch 服務網域執行,因此在其本身的私有 VPC 內執行,因此您需要一種方法來存取本機網域的 VPC。您可以透過使用內建 VPC 端點連線功能建立連線 AWS PrivateLink,或透過設定 Proxy 來執行此操作。

如果您的本機網域使用 1.0 或更新 OpenSearch 版本,您可以使用主控台或建立 AWS PrivateLink 連線。 AWS CLI AWS PrivateLink 連線可讓本機 VPC 中的資源私有連線至遠端 VPC 中的資源。 AWS 區域

您可以搭配主控台使用遠端重新索引,在共用 VPC 端點連線的兩個網域之間複製索引。

  1. 瀏覽至 Amazon OpenSearch 服務主控台,位於https://console.aws.amazon.com/aos/

  2. 在左側導覽窗格中選擇 Domains (網域)。

  3. 選取要將資料複製到的本機網域或網域。這會開啟網域詳細資訊頁面。選擇一般資訊下方的「連線」標籤,然後選擇「要求」。

  4. 在 [要求連線] 頁面上,為您的連線模式選取 [VPC 端點連線],然後輸入其他相關詳細資料。這些詳細資料包括遠端網域,也就是您要從中複製資料的網域。然後,選擇 Request (請求)。

  5. 瀏覽至遠端網域的詳細資訊頁面,選擇「連線」標籤,然後找到「輸入連線」表格。選取剛剛從中建立連線的網域名稱 (本機網域) 旁的核取方塊。選擇 Approve (核准)。

  6. 瀏覽至本機網域,選擇 Connections (連線) 標籤,然後找到 Outbound connections (傳出連線) 資料表。兩個網域之間的連線處於作用中狀態之後,資料表 Endpoint (端點) 欄中的端點就會變為可用。複製端點。

  7. 開啟本機網域的儀表板,然後在左側導覽中選擇 Dev Tools (開發工具)。若要確認遠端網域索引尚未存在於您的本機網域中,請執行下列 GET 要求。替換remote-domain-index-name為您自己的索引名稱。

    GET remote-domain-index-name/_search { "query":{ "match_all":{} } }

    在輸出中,您應該會看到一個錯誤,指出未找到索引。

  8. 如下所示,在 GET 請求下方,建立 POST 要求並使用端點作為遠端主機。

    POST _reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    執行此請求。

  9. 再次執行 GET 請求。輸出現在應指出本機索引的存在。您可以查詢此索引,以驗證是否已 OpenSearch複製遠端索引中的所有資料。

您可以搭配 API 使用遠端重新索引,在共用 VPC 端點連線的兩個網域之間複製索引。

  1. 使用 CreateOutboundConnectionAPI 作業可要求從本機網域到遠端網域的新連線。

    POST https://es.region.amazonaws.com/2021-01-01/opensearch/cc/outboundConnection { "ConnectionAlias": "remote-reindex-example", "ConnectionMode": "VPC_ENDPOINT", "LocalDomainInfo": { "AWSDomainInformation": { "DomainName": "local-domain-name", "OwnerId": "aws-account-id", "Region": "region" } }, "RemoteDomainInfo": { "AWSDomainInformation": { "DomainName": "remote-domain-name", "OwnerId": "aws-account-id", "Region": "region" } } }

    您會在回應ConnectionId中收到。儲存此 ID 以在下一個步驟中使用。

  2. 使用 AcceptInboundConnectionAPI 作業搭配您的連線 ID 來核准來自本機網域的要求。

    PUT https://es.region.amazonaws.com/2021-01-01/opensearch/cc/inboundConnection/ConnectionId/accept
  3. 使用 DescribeOutboundConnectionsAPI 作業擷取遠端網域的端點。

    { "Connections": [ { "ConnectionAlias": "remote-reindex-example", "ConnectionId": "connection-id", "ConnectionMode": "VPC_ENDPOINT", "ConnectionProperties": { "Endpoint": "connection-endpoint" }, ... } ] }

    儲存要在步驟 5 中使用的連線端點

  4. 若要確認遠端網域索引尚未存在於您的本機網域中,請執行下列 GET 要求。替換remote-domain-index-name為您自己的索引名稱。

    GET local-domain-endpoint/remote-domain-index-name/_search { "query":{ "match_all":{} } }

    在輸出中,您應該會看到一個錯誤,指出未找到索引。

  5. 建立 POST 要求並使用您的端點做為遠端主機,如下所示。

    POST local-domain-endpoint/_reindex { "source":{ "remote":{ "host":"connection-endpoint", "username":"username", "password":"password" }, "index":"remote-domain-index-name" }, "dest":{ "index":"local-domain-index-name" } }

    執行此請求。

  6. 再次執行 GET 請求。輸出現在應指出本機索引的存在。您可以查詢此索引,以驗證是否已 OpenSearch複製遠端索引中的所有資料。

如果遠端網域託管在 VPC 內,而您不想使用 VPC 端點連線功能,則必須使用可公開存取的端點設定 Proxy。在此情況下, OpenSearch Service 需要公用端點,因為它無法將流量傳送到 VPC。

VPC 模式下執行網域時,VPC 中會放置一個或多個端點。但是,這些端點僅適用於進入 VPC 內網域的流量,並且不允許流量進入 VPC 本身。

遠端 reindex 命令是從本機網域執行,因此原始流量無法使用這些端點存取遠端網域。這就是為什麼在這個用例中需要代理。代理網域必須擁有由公有憑證授權單位 (CA) 所簽署的憑證。不支援自我簽署或私有 CA 簽署憑證。

重新索引非OpenSearch 服務網域之間的資料

如果遠端索引託管在 OpenSearch 服務之外,就像在自我管理 EC2 執行個體中一樣,請將external參數設定為true

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "username": "username", "password": "password", "external": true }, "index": "remote_index" }, "dest": { "index": "local_index" } }

在此情況下,僅支援使用者名稱和密碼的基本驗證。遠端網域必須具有可公開存取的端點 (即使它與本機 OpenSearch 服務網域位於相同的 VPC 中),以及由公用 CA 簽署的憑證。不支援自我簽署或私有 CA 簽署憑證。

重新索引大型資料集

遠端重新建立索引會使用下列預設值將捲動要求傳送至遠端網域:

  • 搜尋 5 分鐘內容

  • 通訊端逾時 30 秒

  • 批次大小為 1,000

我們建議您調整這些參數以容納您的資料。對於大型文件,請考慮較小的批次大小和/或較長的逾時。如需詳細資訊,請參閱捲動搜尋

POST _reindex?pretty=true&scroll=10h&wait_for_completion=false { "source": { "remote": { "host": "https://remote-domain-endpoint:443", "socket_timeout": "60m" }, "size": 100, "index": "remote_index" }, "dest": { "index": "local_index" } }

我們還建議將以下設置添加到本地索引以獲得更好的性能:

PUT local_index { "settings": { "refresh_interval": -1, "number_of_replicas": 0 } }

重新索引程序完成後,您可以設定想要的複本數,並移除重新整理間隔設定。

若只要重新索引您透過查詢選取的文件子集,請將此請求傳送至本機網域:

POST _reindex { "source": { "remote": { "host": "https://remote-domain-endpoint:443" }, "index": "remote_index", "query": { "match": { "field_name": "text" } } }, "dest": { "index": "local_index" } }

遠端重新索引不支援分割,因此您無法為同一個請求並行執行多個捲動操作。

遠端重新索引設定

除了標準的重新索引選項之外, OpenSearch Service 還支援下列選項:

選項 有效值 描述 必要
外部 Boolean 如果遠端網域不是 OpenSearch 服務網域,或者您要在兩個 VPC 網域之間重新建立索引,請指定為。true
region 字串 如果遠端網域位於不同的區域,請指定「地區」名稱。