スナップショットの復元API

クラスターまたは指定されたデータストリームとインデックスのsnapshotを復元します。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="my_snapshot",
  4. )
  5. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'my_snapshot'
  4. )
  5. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "my_snapshot",
  4. });
  5. console.log(response);

Console

  1. POST /_snapshot/my_repository/my_snapshot/_restore

Request

POST /_snapshot/<repository>/<snapshot>/_restore

前提条件

  • Elasticsearchのセキュリティ機能を使用している場合、このAPIを使用するにはmanageまたはcluster:admin/snapshot/*のクラスター権限が必要です。

  • スナップショットは、選出されたマスターノードを持つ稼働中のクラスターにのみ復元できます。スナップショットのリポジトリは登録済みで、クラスターに利用可能でなければなりません。

  • スナップショットとクラスターのバージョンは互換性がある必要があります。スナップショットの互換性を参照してください。
  • スナップショットを復元するには、クラスターのグローバルメタデータが書き込み可能である必要があります。書き込みを防ぐクラスターブロックがないことを確認してください。復元操作はインデックスブロックを無視します。
  • データストリームを復元する前に、クラスターにデータストリームが有効な一致するインデックステンプレートが含まれていることを確認してください。確認するには、Kibanaのインデックス管理機能またはget index template APIを使用します。

Python

  1. resp = client.indices.get_index_template(
  2. name="*",
  3. filter_path="index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_index_template(
  2. name: '*',
  3. filter_path: 'index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getIndexTemplate({
  2. name: "*",
  3. filter_path:
  4. "index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream",
  5. });
  6. console.log(response);

Console

  1. GET _index_template/*?filter_path=index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream

スナップショットに一致するテンプレートが存在しない場合、作成するか、クラスター状態を復元することができます。一致するインデックステンプレートがない場合、データストリームはロールオーバーできず、バックインデックスを作成できません。

  • スナップショットにApp SearchまたはWorkplace Searchのデータが含まれている場合、スナップショットを復元する前にEnterprise Search暗号化キーを復元していることを確認してください。

パスパラメータ

  • <repository>
  • (必須、文字列) スナップショットを復元するためのリポジトリの名前。
  • <snapshot>
  • (必須、文字列) 復元するスナップショットの名前。

クエリパラメータ

  • master_timeout
  • (オプション、時間単位) マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーが返されます。デフォルトは30sです。リクエストがタイムアウトしないことを示すために-1に設定することもできます。
  • wait_for_completion
  • (オプション、Boolean) trueの場合、リクエストは復元操作が完了したときに応答を返します。復元されたインデックスのプライマリシャードを回復するためのすべての試行が完了したときに操作が完了します。これは、1つ以上の回復試行が失敗した場合でも適用されます。
    falseの場合、リクエストは復元操作が初期化されたときに応答を返します。デフォルトはfalseです。

リクエストボディ

  • ignore_unavailable
  • (オプション、Boolean) trueの場合、リクエストはスナップショットから欠落しているindicesのインデックスまたはデータストリームを無視します。falseの場合、リクエストは欠落しているインデックスまたはデータストリームに対してエラーを返します。デフォルトはfalseです。
  • ignore_index_settings
  • (オプション、文字列または文字列の配列) スナップショットから復元しないインデックス設定。index.number_of_shards(0dd33dc5c1f7a36a.md#index-number-of-shards)を無視するためにこのオプションを使用することはできません。
    データストリームの場合、このオプションは復元されたバックインデックスにのみ適用されます。新しいバックインデックスはデータストリームの一致するインデックステンプレートを使用して構成されます。
  • include_aliases
  • (オプション、Boolean) trueの場合、リクエストは復元されたデータストリームとインデックスのエイリアスを復元します。falseの場合、リクエストはエイリアスを復元しません。デフォルトはtrueです。

  • include_global_state
  • (オプション、Boolean) trueの場合、クラスター状態を復元します。デフォルトはfalseです。
    クラスター状態には次が含まれます:

    • 永続的なクラスター設定
    • インデックステンプレート
    • レガシーインデックステンプレート
    • インジェストパイプライン
    • ILMポリシー
    • 保存されたスクリプト
    • 7.12.0以降に取得されたスナップショットの機能状態
      include_global_statetrueの場合、復元操作はクラスター内のレガシーインデックステンプレートをスナップショットに含まれるテンプレートとマージし、スナップショット内の名前と一致する既存のものを置き換えます。クラスター内に存在するすべての永続的な設定、非レガシーインデックステンプレート、インジェストパイプライン、ILMライフサイクルポリシーは完全に削除され、スナップショットからの対応する項目に置き換えられます。
      機能状態の復元方法を構成するには、feature_statesパラメータを使用します。
      include_global_statetrueであり、グローバル状態なしでスナップショットが作成された場合、復元リクエストは失敗します。

  • feature_states
  • (オプション、文字列の配列) 復元する機能状態
    include_global_statetrueの場合、リクエストはデフォルトでスナップショット内のすべての機能状態を復元します。include_global_statefalseの場合、リクエストはデフォルトで機能状態を復元しません。空の配列を指定するとデフォルトの動作になります。include_global_stateの値に関係なく機能状態を復元しないには、noneの値のみを含む配列を指定します(["none"])。

  • index_settings
  • (オプション、オブジェクト) 復元されたインデックス、バックインデックスに追加または変更するインデックス設定。index.number_of_shards(0dd33dc5c1f7a36a.md#index-number-of-shards)を変更するためにこのオプションを使用することはできません。
    データストリームの場合、このオプションは復元されたバックインデックスにのみ適用されます。新しいバックインデックスはデータストリームの一致するインデックステンプレートを使用して構成されます。
  • indices
  • (オプション、文字列または文字列の配列) 復元するインデックスとデータストリームのカンマ区切りリスト。 マルチターゲット構文をサポートします。デフォルトはスナップショット内のすべての通常のインデックスと通常のデータストリームです。
    このパラメータを使用してシステムインデックスまたはシステムデータストリームを復元することはできません。feature_statesを代わりに使用してください。

  • partial
  • (オプション、Boolean) falseの場合、スナップショットに含まれるインデックスの1つ以上のプライマリシャードが利用できない場合、復元操作全体が失敗します。デフォルトはfalseです。
    trueの場合、利用できないシャードを持つインデックスの部分的なスナップショットを復元することを許可します。スナップショットに正常に含まれたシャードのみが復元されます。すべての欠落シャードは空として再作成されます。

  • rename_pattern
  • (オプション、文字列) 復元されたデータストリームとインデックスに適用する名前変更パターンを定義します。名前変更パターンに一致するデータストリームとインデックスは、rename_replacementに従って名前が変更されます。
    名前変更パターンは、元のテキストを参照することをサポートする正規表現によって定義された通りに適用されます。appendReplacementのロジックに従います。

  • rename_replacement
  • (オプション、文字列) 名前変更の置換文字列を定義します。詳細についてはrename_patternを参照してください。

名前変更された復元

次のリクエストは、index_1index_2snapshot_2から復元します。rename_patternrename_replacementのパラメータは、正規表現index_(.+)に一致するインデックスが復元時にパターンrestored_index_$1を使用して名前が変更されることを示します。

たとえば、index_1restored_index_1に名前が変更されます。index_2restored_index_2に名前が変更されます。

Python

  1. resp = client.snapshot.restore(
  2. repository="my_repository",
  3. snapshot="snapshot_2",
  4. wait_for_completion=True,
  5. indices="index_1,index_2",
  6. ignore_unavailable=True,
  7. include_global_state=False,
  8. rename_pattern="index_(.+)",
  9. rename_replacement="restored_index_$1",
  10. include_aliases=False,
  11. )
  12. print(resp)

Ruby

  1. response = client.snapshot.restore(
  2. repository: 'my_repository',
  3. snapshot: 'snapshot_2',
  4. wait_for_completion: true,
  5. body: {
  6. indices: 'index_1,index_2',
  7. ignore_unavailable: true,
  8. include_global_state: false,
  9. rename_pattern: 'index_(.+)',
  10. rename_replacement: 'restored_index_$1',
  11. include_aliases: false
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.snapshot.restore({
  2. repository: "my_repository",
  3. snapshot: "snapshot_2",
  4. wait_for_completion: "true",
  5. indices: "index_1,index_2",
  6. ignore_unavailable: true,
  7. include_global_state: false,
  8. rename_pattern: "index_(.+)",
  9. rename_replacement: "restored_index_$1",
  10. include_aliases: false,
  11. });
  12. console.log(response);

Console

  1. POST /_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true
  2. {
  3. "indices": "index_1,index_2",
  4. "ignore_unavailable": true,
  5. "include_global_state": false,
  6. "rename_pattern": "index_(.+)",
  7. "rename_replacement": "restored_index_$1",
  8. "include_aliases": false
  9. }

APIはリクエストが成功した場合に確認応答を返します。リクエストがエラーに遭遇した場合、応答は復元操作の完了を妨げるオープンインデックスなど、見つかった問題を示します。

インプレース復元

インデックスをインプレースで復元したい場合があります。たとえば、クラスター割り当ての説明APIがno_valid_shard_copyを報告した後に代替オプションが表示されない場合です。

次のリクエストは、index_1閉じるし、my_repositoryリポジトリのsnapshot_2スナップショットからインプレースで復元します。

Python

  1. resp = client.indices.close(
  2. index="index_1",
  3. )
  4. print(resp)
  5. resp1 = client.snapshot.restore(
  6. repository="my_repository",
  7. snapshot="snapshot_2",
  8. wait_for_completion=True,
  9. indices="index_1",
  10. )
  11. print(resp1)

Ruby

  1. response = client.indices.close(
  2. index: 'index_1'
  3. )
  4. puts response
  5. response = client.snapshot.restore(
  6. repository: 'my_repository',
  7. snapshot: 'snapshot_2',
  8. wait_for_completion: true,
  9. body: {
  10. indices: 'index_1'
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.indices.close({
  2. index: "index_1",
  3. });
  4. console.log(response);
  5. const response1 = await client.snapshot.restore({
  6. repository: "my_repository",
  7. snapshot: "snapshot_2",
  8. wait_for_completion: "true",
  9. indices: "index_1",
  10. });
  11. console.log(response1);

Console

  1. POST index_1/_close
  2. POST /_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true
  3. {
  4. "indices": "index_1"
  5. }