

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

# 處理索引的中斷變更
<a name="opensearch-for-dynamodb-change-index"></a>

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

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

**Topics**
+ [運作方式](#opensearch-for-dynamodb-change-index-howitworks)
+ [刪除您的索引並重設管道 (以管道為中心的選項)](#opensearch-for-dynamodb-change-index-delete)
+ [重新建立索引並重設管道 (以索引為中心的選項)](#opensearch-for-dynamodb-change-index-recreate)
+ [建立新的索引和接收器 (線上選項)](#opensearch-for-dynamodb-change-index-create)
+ [避免和偵錯類型衝突的最佳實務](#opensearch-for-dynamodb-change-index-bp)

## 運作方式
<a name="opensearch-for-dynamodb-change-index-howitworks"></a>

以下是處理索引中斷變更時所採取動作的快速概觀。請參閱以下各節中的逐步引導程序。
+ **停止和啟動管道**：此選項會重設管道的狀態，而管道將以新的完整匯出重新啟動。它不具破壞性，因此**不會**刪除您的索引或 DynamoDB 中的任何資料。如果您在執行此操作之前未建立新的索引，您可能會因為版本衝突而看到大量錯誤，因為匯出會嘗試插入比索引中目前 `_version` 更舊的文件。可以放心忽略這些錯誤。管道停止時，不會向您收取管道費用。
+ **更新管道**：此選項會使用[藍/綠](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html)方法更新管道中的組態，而不會遺失任何狀態。如果您對管道進行重大變更 (例如將新路由、索引或索引鍵新增至現有索引)，您可能需要對管道進行完整重設並重新建立索引。此選項**不會**執行完整匯出。
+ **刪除並重新建立索引**：此選項會移除索引上的資料和映射設定。您應該在對映射進行任何重大變更之前執行此操作。它會中斷任何依賴索引的應用程式，直到索引重新建立和同步為止。刪除索引**不會**啟動新的匯出。請務必在更新管道之後，才可以刪除索引。否則，您的索引可能會在您更新設定之前重新建立。

## 刪除您的索引並重設管道 (以管道為中心的選項)
<a name="opensearch-for-dynamodb-change-index-delete"></a>

如果您仍在開發中，此方法通常是最快的選項。您將刪除 OpenSearch Service 中的索引，然後[停止並啟動](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline--stop-start.html)管道，以啟動所有資料的新匯出。這可確保映射範本不會與現有索引衝突，也不會遺失未完整處理之資料表的資料。

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

1. 使用新的變更[更新管道組態](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/update-pipeline.html)。

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

1. 透過 主控台或搭配 或 SDK 使用 `StartPipeline` API 操作 AWS CLI 來啟動管道。
**注意**  
這樣會啟動新的完整匯出，將產生額外費用。

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

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

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

## 重新建立索引並重設管道 (以索引為中心的選項)
<a name="opensearch-for-dynamodb-change-index-recreate"></a>

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

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

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

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

1. 透過 主控台，或使用 AWS CLI 或 SDK 呼叫 `StartPipeline` API 操作來啟動管道。
**注意**  
這樣將啟動新的完整匯出，會產生額外費用。

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

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

## 建立新的索引和接收器 (線上選項)
<a name="opensearch-for-dynamodb-change-index-create"></a>

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

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

1. 使用新的設定和不同的索引名稱[建立新的管道](OpenSearchIngestionForDynamoDB.md#opensearch-for-dynamodb-console-create)。

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

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

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

## 避免和偵錯類型衝突的最佳實務
<a name="opensearch-for-dynamodb-change-index-bp"></a>
+ 一律使用無效字母佇列 (DLQ)，以便在發生類型衝突時更輕鬆偵錯。
+ 一律使用索引範本搭配映射並設定 `include_keys`。雖然 OpenSearch Service 會動態映射新的索引鍵，這可能會導致非預期行為的問題 (例如預期某個項目是 `GeoPoint`，但被建立為 `string` 或 `object`) 或錯誤 (例如具有混合 `long` 和 `float` 值的 `number`)。
+ 如果您需要讓現有的索引在生產環境中運作，您也可以在管道組態檔案中重新命名索引，以取代任何先前的[刪除索引步驟](#opensearch-for-dynamodb-change-index-delete)。這會建立新的索引。接著，您的應用程式將需要更新，以便在完成之後指向新的索引。
+ 如果您有使用處理器修正的類型轉換問題，您可以使用 `UpdatePipeline` 測試此問題。若要這麼做，您需要停止並啟動或[處理無效字母佇列](https://opensearch.org/docs/latest/data-prepper/pipelines/dlq/)，以修正任何先前略過但發生錯誤的文件。