OpenSearchスナップショットAPIを使用したクラスタ・バックアップ

OpenSearchでは、OpenSearchスナップショットAPIを使用して、クラスタのバックアップを作成できます。

この方法は、クラスタに対してOpenSearchによって自動的に生成される管理対象バックアップとは異なります。OpenSearchで管理されるクラスタ・バックアップの詳細は、OpenSearch自動クラスタ・バックアップを参照してください。

OpenSearchスナップショットAPIを使用すると、OpenSearchクラスタでバックアップを作成またはリストアする際の柔軟性が向上するため、動作をカスタマイズできます。カスタマイズの例を次に示します。

  • スナップショットとスナップショットをリストアするターゲット・クラスタの間に索引名が競合するシナリオで、索引の名前を変更します。
  • 含める、または除外する特定の索引を指定します。
  • 含める、または除外する索引別名を指定します。

スナップショットは、テナンシに指定するオブジェクト・ストレージ・バケットに格納されます。請求には、クラスタ・スナップショットのストレージ・コストが含まれます。詳細は、クラウド・ストレージの価格を参照してください。

このトピックでは、クラスタでOpenSearchスナップショットAPIを使用するための前提条件とプロセスについて説明し、次のタスクが含まれます。

  1. クラスタ・スナップショットのリポジトリとして使用するオブジェクト・ストレージ・バケットを作成します
  2. 必要な権限で動的ポリシーを構成します
  3. リポジトリのスナップショットを登録します
  4. スナップショットの取得
  5. Restore Snapshot.

スナップショット・ファイルを格納するためのオブジェクト・ストレージ・バケットの作成

スナップショットのリポジトリは、テナンシのオブジェクト・ストレージ・バケットです。リポジトリとして登録するバケットがない場合は、バケットを作成する必要があります。バケットの作成方法を説明するチュートリアルは、オブジェクト・ストレージへのデータの配置を参照してください。

リポジトリとして登録するバケットに関する次の情報をノートにとります。この情報は、「バケット詳細」にあります。

  • ネームスペース
  • バケット名
  • コンパートメントOCID

コンパートメントOCIDを取得するには:

  1. 「バケット詳細」ページで、「コンパートメント」のリンクを選択します。
  2. 「コンパートメント情報」で、「OCID」「コピー」を選択します。
ノート

次のようにforceBucketCreation属性にtrueを指定することで、リポジトリの登録時にこのステップをスキップし、OpenSearchでバケットを作成できます。
forceBucketCreation: true

この方法を使用する場合は、OpenSearchがバケットを作成できるように、IAMポリシーで十分なアクセス権を付与する必要があります。

IAMポリシー

スナップショット・ファイルを格納するために、テナンシのバケットへのOpenSearchクラスタ・アクセスを提供する権限を構成する必要があります。

次のポリシーの例には、必要な権限が含まれています。

DEFINE tenancy opensearch-tenancy as <OpenSearch_Tenancy_ID>
ADMIT resource opensearch opensearchsnapshots of tenancy opensearch-tenancy to manage object-family in compartment <snapshot_bucket_compartment> where ALL {request.principal.clusterid='<cluster_OCID>', request.principal.ownertenant='<customer_tenancy_OCID>', request.principal.ownercompartment='<customer_compartment_OCID>', target.bucket.name='<snapshot_bucket_name>'}

前述のポリシーでは、指定したバケットをスナップショット・リポジトリとして登録できます。

<OpenSearch_Tenancy_ID>は、OpenSearchテナンシを使用したOCI検索のOCIDです。この値は、クラスタの「クラスタ詳細」ページの「追加情報」セクションの「OpensearchテナンシOCID」フィールドにあります。

<customer_tenancy_OCID>は、OpenSearchクラスタを作成したテナンシのOCIDです。

<customer_compartment_OCID>は、OpenSearchクラスタがあるコンパートメントのOCIDです。

登録操作でforceBucketCreation : trueを指定した場合、指定したポリシーにテナンシでのバケット作成アクセス権が含まれていることを確認する必要があります。そうしないと、リポジトリを登録する操作は失敗します。

リポジトリの登録

スナップショットを作成するには、次の例に示すように、リポジトリを登録する必要があります。

PUT _snapshot/<repository_name>
{
  "type": "oci",
  "settings": {
    "client": "default",
    "endpoint": "<objectstorage_endpoint>",
    "bucket": "<bucket_name>",
    "namespace": "<namespace>",
    "authType": "RESOURCE_PRINCIPAL",
    "bucket_compartment_id": "<bucket_compartment_OCID>",
    "forceBucketCreation": true
  }
}

次の表に、リポジトリの登録時に指定するパラメータを示します。

パラメータ 摘要
リポジトリ名前 スナップショットのリポジトリに割り当てる名前。
エンド・ポイント オブジェクト・ストレージ・バケットのエンドポイント。

たとえば、米国東部(アッシュバーン)リージョンのオブジェクト・ストレージ・エンドポイントはhttps://objectstorage.us-ashburn-1.oraclecloud.comです。

名前空間 バケットのオブジェクト・ストレージ・ネームスペース。
authType OpenSearchによる検索がユーザーにかわって機能することを許可するリソース・プリンシパルを使用するように指定します。
bucket_compartment_id バケットが配置されているコンパートメントのOCID。
forceBucketCreation オブジェクト・ストレージ・バケットが存在しない場合は作成することを指定します。デフォルトはfalseです。

スナップショットの取得

リポジトリを登録したら、次の例に示すようにスナップショットを作成できます。

POST _snapshot/<repository_name>/<snapshot_name>?wait_for_completion=true

前述の例には、すべての索引とクラスタの状態が含まれます。次の例は、特定の索引およびその他の設定を含める方法を示しています。

POST _snapshot/<repository_name>/<snapshot_name>?wait_for_completion=true
{
"indices": "<index_name>,-<index_name>",
  "ignore_unavailable": true,
  "include_global_state": false
}

含める1つ以上の索引、<index_name_to_include>および除外する1つ以上の索引、-<index_name_to_exclude>を指定できます。

このAPI操作の詳細は、スナップショットの取得を参照してください。

スナップショットのリストア

スナップショットをリストアする前に、クラスタの既存のスナップショットをすべて取得できます。まず、次の例に示すように、クラスタに登録されているすべてのリポジトリを取得します。

GET _snapshot/_all?pretty

次に、次の例に示すように、リポジトリ内のすべてのスナップショットを取得します。

GET _snapshot/<repository_name>?pretty

次に、次の例に示すようにスナップショットを復元します。

POST _snapshot/<repository_name>/<snapshot_name>/_restore
{
     "indices": "<index_name_to_include>,-<index_name_to_exclude>",
     "ignore_unavailable": true,
     "include_global_state": false,
     "rename_pattern": "(.+)",
     "rename_replacement": "restored_$1",
     "include_aliases": true
}

含める1つ以上の索引、<index_name_to_include>および除外する1つ以上の索引、-<index_name_to_exclude>を指定できます。

このAPI操作の詳細は、スナップショットのリストアを参照してください。