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

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

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

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

  • スナップショットとスナップショットをリストアするターゲット・クラスタの間に索引名の競合があるシナリオの索引の名前を変更します。

  • 含めるまたは除外する特定の索引を指定します。

  • 含めるまたは除外する索引別名を指定します。

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

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

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

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

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

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

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

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

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

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

forceBucketCreation: true

このアプローチを使用する場合は、オブジェクト・ストレージ・バケットを作成するために、IAMポリシーでOpenSearchを使用してSearchに十分なアクセス権を付与する必要があります。

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操作の詳細は、スナップショットのリストアを参照してください。