

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

# Amazon OpenSearch Service 中的索引狀態管理
<a name="ism"></a>

Amazon OpenSearch Service 中的索引狀態管理 (ISM) 可讓您定義自訂管理政策，這些政策能夠自動化例行任務並將它們套用至索引和索引模式。您不再需要設定和管理外部程序來執行索引操作。

政策包含預設狀態和狀態清單，供索引進行相互轉換。在每種狀態下，您可以定義要執行的操作清單和觸發這些轉換的條件。典型的使用案例是在一段時間後定期刪除舊的索引。例如，您可以定義一個政策，在 30 天後將索引移至 `read_only` 狀態，然後最終在 90 天後將索引刪除。

在您將政策連接至索引之後，ISM 會建立一個任務，每 5 至 8 分鐘 (或預先 1.3 個叢集為每 30 到 48 分鐘) 執行一次，以執行政策動作、檢查條件，然後將索引轉換為不同的狀態。執行此任務的基準時間是每 5 分鐘一次，再加上隨機的 0-60% 抖動，以確保您不會同時看到來自所有索引的活動突增。如果叢集狀態為紅色，ISM 就不會執行任務。

ISM 需要 OpenSearch 或 Elasticsearch 6.8 或更新版本。

**注意**  
本文件提供 ISM 和數個範例政策的簡短概觀。它還說明 Amazon OpenSearch Service 網域的 ISM 與自我管理 OpenSearch 叢集上的 ISM 有何不同。如需 ISM 的完整文件，包括完整的參數參考、每個設定的描述和 API 參考，請參閱 OpenSearch 文件中的[索引狀態管理](https://docs.opensearch.org/latest/im-plugin/ism/index/)。

**重要**  
您無法再使用索引範本將 ISM 政策套用至新建立的索引。使用 [ISM 範本欄位](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)，您可以繼續自動管理新建立的索引。此更新引入了重大變更，它會影響使用此設定的現有 CloudFormation 範本。

## 建立 ISM 政策。
<a name="ism-start"></a>

**開始使用索引狀態管理**

1. 開啟位於 https：//[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home) 的 Amazon OpenSearch Service 主控台。

1. 選取您要為其建立 ISM 政策的網域。

1. 從網域的儀表板，導覽至 OpenSearch Dashboards URL，並使用主要使用者名稱和密碼登入。URL 遵循以下格式：

   ```
   {{domain-endpoint}}/_dashboards/
   ```

1. 開啟 OpenSearch Dashboards 的左側導覽面板，然後依序選擇 **Index Management** (索引管理) 和 **Create policy** (建立政策)。

1. 使用[視覺化編輯器](https://opensearch.org/docs/latest/im-plugin/ism/index/#visual-editor)或 [JSON 編輯器](https://opensearch.org/docs/latest/im-plugin/ism/index/#json-editor)來建立政策。我們推薦使用視覺化編輯器，因為它提供一種更加結構化的政策定義方式。如需建立政策的協助，請參閱下方的[範例政策](#ism-example)。

1. 建立政策之後，請將其連接到一或多個索引：

   ```
   POST _plugins/_ism/add/{{my-index}}
   {
     "policy_id": "{{my-policy-id}}"
   }
   ```
**注意**  
如果您的網域正在執行舊版 Elasticsearch 版本，請使用 `_opendistro` 而非 `_plugins`。

   或者，在 OpenSearch Dashboards 中選取索引，然後選擇 **Apply policy** (套用政策)。

## 範例政策
<a name="ism-example"></a>

下列範例政策示範如何自動化常見的 ISM 使用案例。

### 熱至暖再至冷儲存
<a name="ism-example-cold"></a>

此範例政策會將索引從熱儲存移至 [UltraWarm](ultrawarm.md)，最後再移至  [冷儲存](cold-storage.md)。然後，它會刪除索引。

該索引最初位於 `hot` 狀態。十天之後，ISM 將其移至 `warm` 狀態。80 天後，索引已經超過 90 天，ISM會將索引移至 `cold` 狀態。一年之後，服務會將通知傳送到正在刪除索引的 Amazon Chime 空間，然後永久將其刪除。

請注意，冷索引需要 `cold_delete` 操作，而不是正常的 `delete` 操作。另請注意，資料中必須有明確的 `timestamp_field`，以便使用 ISM 管理冷索引。

```
{
  "policy": {
    "description": "Demonstrate a hot-warm-cold-delete workflow.",
    "default_state": "hot",
    "schema_version": 1,
    "states": [{
        "name": "hot",
        "actions": [],
        "transitions": [{
          "state_name": "warm",
          "conditions": {
            "min_index_age": "10d"
          }
        }]
      },
      {
        "name": "warm",
        "actions": [{
          "warm_migration": {},
          "retry": {
            "count": 5,
            "delay": "1h"
          }
        }],
        "transitions": [{
          "state_name": "cold",
          "conditions": {
            "min_index_age": "90d"
          }
        }]
      },
      {
        "name": "cold",
        "actions": [{
            "cold_migration": {
              "timestamp_field": "<your timestamp field>"
            }
          }
        ],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
             "min_index_age": "365d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "notification": {
            "destination": {
              "chime": {
                "url": "<URL>"
              }
            },
            "message_template": {
              "source": "The index {{ctx.index}} is being deleted."
            }
          }
        },
        {
          "cold_delete": {}
        }]
      }
    ]
  }
}
```

### 減少複本計數
<a name="ism-example-replica"></a>

此範例政策會在七天後將複本計數縮減至零以保留磁碟空間，然後在 21 天後刪除索引。此政策會假設索引不重要且不再接收寫入請求；擁有零個複本會伴隨某種程度的資料遺失風險。

```
{
  "policy": {
    "description": "Changes replica count and deletes.",
    "schema_version": 1,
    "default_state": "current",
    "states": [{
        "name": "current",
        "actions": [],
        "transitions": [{
          "state_name": "old",
          "conditions": {
            "min_index_age": "7d"
          }
        }]
      },
      {
        "name": "old",
        "actions": [{
          "replica_count": {
            "number_of_replicas": 0
          }
        }],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
            "min_index_age": "21d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "delete": {}
        }],
        "transitions": []
      }
    ]
  }
}
```

### 拍攝索引快照
<a name="ism-example-snapshot"></a>

此範例政策會使用 `[snapshot](https://docs.opensearch.org/latest/im-plugin/ism/policies/#snapshot)` 操作在索引包含至少一個文件時立即拍攝快照。`repository` 是您在 Simple Storage Service (Amazon S3) 中註冊的手動快照儲存庫的名稱。`snapshot` 是快照的名稱。如需快照必要條件和註冊儲存庫的步驟，請參閱[在 Amazon OpenSearch Service 中建立索引快照](managedomains-snapshots.md)。

```
{
  "policy": {
    "description": "Takes an index snapshot.",
    "schema_version": 1,
    "default_state": "empty",
    "states": [{
        "name": "empty",
        "actions": [],
        "transitions": [{
          "state_name": "occupied",
          "conditions": {
            "min_doc_count": 1
          }
        }]
      },
      {
        "name": "occupied",
        "actions": [{
          "snapshot": {
            "repository": "<my-repository>",
            "snapshot": "<my-snapshot>"
            }
          }],
          "transitions": []
      }
    ]
  }
}
```

## ISM 範本
<a name="ism-template"></a>

您可以在政策中設定 `ism_template` 欄位，以便當您建立符合範本模式的索引時，該政策可自動連接至該索引。在此範例中，您建立的名稱以 "log" 開頭的任何索引都會自動匹配 ISM 政策 `my-policy-id`：

```
PUT _plugins/_ism/policies/{{my-policy-id}}
{
  "policy": {
    "description": "Example policy.",
    "default_state": "...",
    "states": [...],
    "ism_template": {
      "index_patterns": ["log*"],
      "priority": 100
    }
  }
}
```

如需更詳細的範例，請參閱[使用 ISM 範本進行自動變換的範例政策](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)。

## 差異
<a name="ism-diff"></a>

與 Open Search 和 Elasticsearch 相比，Amazon OpenSearch Service 的 ISM 有幾個不同之處。

### ISM 操作
<a name="alerting-diff-op"></a>
+ OpenSearch Service 支援三個獨特的 ISM 操作，`warm_migration`、`cold_migration` 以及 `cold_delete`。
  + 如果您的網域已啟用 [UltraWarm](ultrawarm.md)，則 `warm_migration` 動作會將索引轉換為暖儲存。
  + 如果您的網域啟用了[冷儲存](cold-storage.md)，`cold_migration` 動作會將索引轉換為冷儲存，而 `cold_delete` 動作則會從冷存儲中刪除索引。

  即使其中一個動作沒有在[設定的逾時期限](https://docs.opensearch.org/latest/im-plugin/ism/policies/#actions)內完成，仍會繼續遷移至熱索引。針對上述其中一個動作設定一個 [error\_notification](https://opensearch.org/docs/latest/im-plugin/ism/policies/#error-notifications)，如果動作未在逾時期限內完成，會通知您該動作失敗，但該通知僅供您自己參考。實際操作沒有固有的逾時，會在最終成功或失敗之前持續執行。
+ 如果您的網域執行 OpenSearch 或 Elasticsearch 7.4 或更新版本，則 OpenSearch Service 支援 ISM `open` 和 `close` 操作。
+ 如果您的網域執行 OpenSearch 或 Elasticsearch 7.7 或更新版本，則 OpenSearch Service 支援 ISM `snapshot` 操作。

### 冷儲存 ISM 操作
<a name="ism-cold-storage"></a>

對於冷索引，當您使用下列 ISM API 時，必須指定 `?type=_cold` 參數：
+ [新增政策](https://opensearch.org/docs/latest/im-plugin/ism/api/#add-policy)
+ [移除政策](https://opensearch.org/docs/latest/im-plugin/ism/api/#remove-policy-from-index)
+ [更新政策](https://opensearch.org/docs/latest/im-plugin/ism/api/#update-policy)
+ [重試失敗的索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#retry-failed-index)
+ [解釋索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#explain-index)

這些適用於冷索引的 API 具有以下其他不同之處：
+ 不支援萬用字元運算子，除非您在結尾處使用。例如，支援 `_plugins/_ism/<add, remove, change_policy, retry, explain>/logstash-*`\|，但不支援 `_plugins/_ism/<add, remove, change_policy, retry, explain>/iad-*-prod`。
+ 不支援多行索引名稱和模式。例如，支援 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs`\|，但不支援 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs,sample-data`。

### ISM 設定
<a name="ism-diff-settings"></a>

OpenSearch 和 Elasticsearch 可讓您使用 `_cluster/settings` API 變更所有可用的 ISM 設定。在 Amazon OpenSearch Service 中，您只能變更下列 [ISM 設定](https://opensearch.org/docs/latest/im-plugin/ism/settings/)：
+ **叢集層級設定：**
  + `plugins.index_state_management.enabled`
  + `plugins.index_state_management.history.enabled`
+ **索引層級設定：**
  + `plugins.index_state_management.rollover_alias`

   