View a markdown version of this page

處理索引的中斷變更 - Amazon DynamoDB

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

處理索引的中斷變更

OpenSearch 可以動態地將新屬性新增至您的索引。不過,為指定索引鍵設定映射範本之後,您將需要採取其他動作來變更它。此外,如果您的變更需要重新處理 DynamoDB 資料表中的所有資料,則需要採取步驟來啟動新的匯出。

注意

在所有這些選項中,如果您的 DynamoDB 資料表類型與您指定的映射範本發生衝突,您仍可能會遇到問題。確定您已啟用無效字母佇列 (DLQ) (即使在開發過程中也是如此)。這可讓您更輕鬆了解在 OpenSearch 上為記錄編製索引時,造成衝突的記錄可能發生的問題。

運作方式

以下是處理索引中斷變更時所採取動作的快速概觀。請參閱以下各節中的逐步引導程序。

  • 停止和啟動管道:此選項會重設管道的狀態,而管道將以新的完整匯出重新啟動。它不具破壞性,因此不會刪除您的索引或 DynamoDB 中的任何資料。如果您在執行此操作之前未建立新的索引,您可能會因為版本衝突而看到大量錯誤,因為匯出會嘗試插入比索引中目前 _version 更舊的文件。可以放心忽略這些錯誤。管道停止時,不會向您收取管道費用。

  • 更新管道:此選項會使用藍/綠方法更新管道中的組態,而不會遺失任何狀態。如果您對管道進行重大變更 (例如將新路由、索引或索引鍵新增至現有索引),您可能需要對管道進行完整重設並重新建立索引。此選項不會執行完整匯出。

  • 刪除並重新建立索引:此選項會移除索引上的資料和映射設定。您應該在對映射進行任何重大變更之前執行此操作。它會中斷任何依賴索引的應用程式,直到索引重新建立和同步為止。刪除索引不會啟動新的匯出。請務必在更新管道之後,才可以刪除索引。否則,您的索引可能會在您更新設定之前重新建立。

刪除您的索引並重設管道 (以管道為中心的選項)

如果您仍在開發中,此方法通常是最快的選項。您將刪除 OpenSearch Service 中的索引,然後停止並啟動管道,以啟動所有資料的新匯出。這可確保映射範本不會與現有索引衝突,也不會遺失未完整處理之資料表的資料。

  1. 透過 AWS 管理主控台或搭配 或 AWS CLI SDK 使用 StopPipeline API 操作來停止管道。

  2. 使用新的變更更新管道組態

  3. 透過 REST API 呼叫或 OpenSearch Dashboard 在 OpenSearch Service 中刪除索引。

  4. 透過 主控台或搭配 或 SDK 使用 StartPipeline API 操作 AWS CLI 來啟動管道。

    注意

    這樣會啟動新的完整匯出,將產生額外費用。

  5. 監控是否有任何非預期的問題,因為會產生新的匯出以建立新索引。

  6. 確認索引符合您在 OpenSearch Service 中的期望。

匯出完成後,會繼續從串流讀取,您的 DynamoDB 資料表資料現在將可在索引中使用。

重新建立索引並重設管道 (以索引為中心的選項)

如果您需要在 OpenSearch Service 中對索引設計執行大量迭代,再從 DynamoDB 繼續管道,則此方法很有效。當您想要在搜尋模式中快速迭代,並希望避免在每次迭代之間等待新匯出完成時,這對於開發很有用。

  1. 透過 停止管道 AWS 管理主控台,或使用 AWS CLI 或 SDK 呼叫 StopPipeline API 操作。

  2. 使用您要使用的映射範本,在 OpenSearch 中刪除並重新建立索引。您可以手動插入一些範例資料,以確認您的搜尋如預期般運作。如果您的範例資料可能與 DynamoDB 中的任何資料衝突,請務必先將其刪除,再繼續進行下一個步驟。

  3. 如果您的管道中有索引範本,請將其移除,或將其取代為您已在 OpenSearch Service 中建立的範本。請確定您的索引名稱與管道中的名稱相符。

  4. 透過 主控台,或使用 AWS CLI 或 SDK 呼叫 StartPipeline API 操作來啟動管道。

    注意

    這樣將啟動新的完整匯出,會產生額外費用。

  5. 監控是否有任何非預期的問題,因為會產生新的匯出以建立新索引。

匯出完成後,會繼續從串流讀取,您的 DynamoDB 資料表資料現在可在索引中使用。

建立新的索引和接收器 (線上選項)

如果您需要更新映射範本,但目前在生產環境中使用您的索引,則此方法很有效。這會建立全新的索引,您需要在該索引同步和驗證後將應用程式移至該處。

注意

這將在串流上建立另一個取用者。如果您還有其他消費者,例如 AWS Lambda 或 全域資料表,這可能是問題。您可能需要暫停現有管道的更新,以建立能載入新索引的容量。

  1. 使用新的設定和不同的索引名稱建立新的管道

  2. 監控新索引是否有任何非預期的問題。

  3. 將應用程式切換到新索引。

  4. 驗證一切正常運作後,停止並刪除舊管道。

避免和偵錯類型衝突的最佳實務

  • 一律使用無效字母佇列 (DLQ),以便在發生類型衝突時更輕鬆偵錯。

  • 一律使用索引範本搭配映射並設定 include_keys。雖然 OpenSearch Service 會動態映射新的索引鍵,這可能會導致非預期行為的問題 (例如預期某個項目是 GeoPoint,但被建立為 stringobject) 或錯誤 (例如具有混合 longfloat 值的 number)。

  • 如果您需要讓現有的索引在生產環境中運作,您也可以在管道組態檔案中重新命名索引,以取代任何先前的刪除索引步驟。這會建立新的索引。接著,您的應用程式將需要更新,以便在完成之後指向新的索引。

  • 如果您有使用處理器修正的類型轉換問題,您可以使用 UpdatePipeline 測試此問題。若要這麼做,您需要停止並啟動或處理無效字母佇列,以修正任何先前略過但發生錯誤的文件。