翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon OpenSearch Service でのインデックススナップショットの作成
Amazon OpenSearch Service のスナップショットは、クラスターのインデックスと状態のバックアップです。状態には、クラスター設定、ノード情報、インデックス設定、シャードの割り当てなどが含まれます。
OpenSearch サービススナップショットには次の形式があります。
-
自動スナップショットは、クラスターの復元専用です。クラスターのステータスが赤くなった場合や、データが失われた場合に、ドメインを復元するために使用できます。詳細については、以下の「スナップショットの復元」を参照してください。 OpenSearch サービスは、自動スナップショットを事前設定された Amazon S3 バケットに追加料金なしで保存します。
-
手動スナップショットは、クラスターの復元、またはクラスター間でのデータの移行に使用します。手動スナップショットを開始する必要があります。これらのスナップショットは独自の Amazon S3 バケットに保存され、標準の S3 料金が適用されます。セルフマネージド OpenSearch クラスターのスナップショットがある場合は、そのスナップショットを使用して OpenSearch サービスドメインに移行できます。詳細については、「Amazon OpenSearch Service への移行」を参照してください。
すべての OpenSearch サービスドメインは自動スナップショットを作成しますが、頻度は次の点で異なります。
-
OpenSearch または Elasticsearch 5.3 以降を実行しているドメインの場合、 OpenSearch Service は 1 時間ごとに自動スナップショットを取得し、そのうち最大 336 個を 14 日間保持します。時間単位のスナップショットは増分的な性質があるため、中断が少なくなります。また、ドメインの問題が発生した場合に、より最近のリカバリポイントを提供します。
-
Elasticsearch 5.1 以前を実行しているドメインの場合、 OpenSearch Service は指定した時間内に毎日自動スナップショットを取得し、そのうち最大 14 個を保持し、30 日以上スナップショットデータを保持しません。
クラスターのステータスが赤になると、クラスターのステータスが維持されている間、すべての自動スナップショットが失敗します。2 週間以内にこの問題を解決しない場合、クラスターのデータは永遠に失われます。トラブルシューティングステップについては、「赤のクラスター状態」を参照してください。
トピック
前提条件
スナップショットを手動で作成するには、IAM および Amazon S3 を使用して作業する必要があります。スナップショットの取得を試す前に、次の前提条件を満たしていることを確認します。
前提条件 | 説明 |
---|---|
S3 バケット | OpenSearch サービスドメインの手動スナップショットを保存する S3 バケットを作成します。手順については、Amazon Simple Storage Service ユーザーガイドの「最初のバケットを作成する」を参照してください。 次の場所で使用するには、バケットの名前を覚えておいてください。
重要S3 Glacier ライフサイクルルールをこのバケットに適用しないでください。手動スナップショットは、S3 Glacier ストレージクラスをサポートしていません。 |
IAM ロール | サービスにアクセス許可を委任する IAM OpenSearch ロールを作成します。手順については、IAM ユーザーガイドの「IAM ロールの作成 (コンソール)」を参照してください。この章の残りの部分では、このロールを IAM ポリシーのアタッチ 次のポリシーを
ポリシーをロールにアタッチする方法については、IAM ユーザーガイドの「IAM ID 許可の追加」を参照してください。 信頼関係を編集する 次の例に示すように、 の信頼関係を編集
信頼関係を編集する手順については、IAM ユーザーガイドの「ロールの信頼ポリシーの変更」を参照してください。 |
アクセス許可 |
スナップショットリポジトリを登録するには、
ユーザーまたはロールが
|
手動スナップショットレポジトリの登録
手動インデックススナップショットを作成する前に、スナップショットリポジトリを OpenSearch Service に登録する必要があります。この 1 回限りのオペレーションでは、「」で説明されているようにTheSnapshotRole
、 へのアクセスが許可されている認証情報を使用して AWS リクエストに署名する必要があります前提条件。
ステップ 1: OpenSearch Dashboards でスナップショットロールをマッピングする (きめ細かなアクセスコントロールを使用している場合)
きめ細かなアクセスコントロールにより、リポジトリの登録時に追加のステップが導入されます。HTTP 基本認証を他のすべての目的で使用する場合でも、TheSnapshotRole
を渡すための iam:PassRole
許可を持っている IAM ロールまたはユーザーに manage_snapshots
ロールをマップする必要があります。
-
OpenSearch サービスドメインの OpenSearch Dashboards プラグインに移動します。Dashboards エンドポイントは、 OpenSearch サービスコンソールのドメインダッシュボードにあります。
-
メインメニューから [セキュリティ]、[ロール] を選択し、[manage_snapshots] ロールを選択します。
-
[マッピングされたユーザー]、[マッピングの管理] を選択します。
-
TheSnapshotRole
を渡すための許可を持っているロールの ARN を追加します。[Backend roles] (バックエンドロール) の下にロール ARN を配置しますarn:aws:iam::
123456789123
:role/role-name
-
[マップ] を選択し、ユーザーまたはロールが [マッピングされたユーザー] の下に表示されていることを確認します。
ステップ 2: リポジトリを登録する
次の [Snapshots] (スナップショット) のタブには、スナップショットディレクトリの登録方法が記されています。手動スナップショットの暗号化に関するオプションと、新しいドメインに移行した後にスナップショットを登録する際のオプションについては、関連するタブを参照してください。
サンプル Python クライアントの使用
Python クライアントは、シンプルな HTTP リクエストよりも自動化が容易で、再利用性が向上します。この方法を使用してスナップショットリポジトリを登録する場合は、次のサンプル Python コードを register-repo.py
などの Python ファイルとして保存します。クライアントでは、AWS SDK for Python (Boto3)
サンプルコードで、次の変数を更新します: host
、region
、path
、および payload
。
import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # domain endpoint region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '/_snapshot/
my-snapshot-repo-name
' # the OpenSearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name
", "base_path": "my/snapshot/directory
", "region": "us-west-1
", "role_arn": "arn:aws:iam::123456789012
:role/snapshot-role
" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indexes except Dashboards and fine-grained access control) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security,-.opendistro-*", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)
手動スナップショットの作成
スナップショットは瞬時に取得されません。完了するまでに時間がかかり、クラスターの完全な point-in-time ビューを表すものではありません。スナップショットが進行中の間も、ドキュメントのインデックス作成や、クラスターへの他のリクエストを行うことはできますが、新しいドキュメントおよび既存のドキュメントの更新は一般的にスナップショットに含まれません。スナップショットには、スナップショット OpenSearch の開始時に存在していたプライマリシャードが含まれます。スナップショットのスレッドプールのサイズによっては、わずかな時間の違いで、スナップショットにさまざまなシャードが含まれることがあります。スナップショットのベストプラクティスについては、「スナップショットパフォーマンスの向上」を参照してください。
スナップショットのストレージとパフォーマンス
OpenSearch スナップショットは増分です。つまり、最後に成功したスナップショット以降に変更されたデータのみを保存します。増分のみ保存されるため、スナップショットの取得頻度が高い場合でも低い場合でも、ディスク使用量を最小限に抑えることができます。つまり、スナップショットを 1 時間ごとに 1 週間 (合計 168 個) 取得すると、週末に 1 つのスナップショットを取得する場合よりも、使用するディスク容量は少なくなる場合があります。また、スナップショットの取得頻度が高くなるほど、完了までにかかる時間は短くなります。例えば、日次スナップショットの完了には 20~30 分かかる場合がありますが、時間単位のスナップショットは数分以内に完了することもあります。一部の OpenSearch ユーザーは、30 分ごとにスナップショットを作成します。
スナップショットを取得する
スナップショットを作成するときは、以下の情報を指定します。
-
スナップショットリポジトリの名前
-
スナップショットの名前
この章の例では、わかりやすく簡潔にするために、一般的な HTTP クライアントである curl
アクセスポリシーでユーザーまたはロールを指定する場合は、スナップショットリクエストに署名する必要があります。curl の場合、--aws-sigv4
のオプション
手動スナップショットを作成するには、次のステップを実施します。
-
現在進行中のスナップショットは取得できません。確認するには、以下のコマンドを実行します。
curl -XGET '
domain-endpoint
/_snapshot/_status' -
次のコマンドを実行して、手動でスナップショットを取得します。
curl -XPUT '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
'特定のインデックスを包含または除外したり、他の設定を指定したりするには、リクエスト本文を追加します。リクエスト構造については、 OpenSearch ドキュメントの「スナップショット
を作成する」を参照してください。
注記
スナップショットの作成に必要な時間は、 OpenSearch サービスドメインのサイズに応じて増加します。長時間実行しているスナップショット操作の場合は、504 GATEWAY_TIMEOUT
エラーが発生する場合があります。通常、このエラーは無視して、オペレーションが正常に完了するのを待ってかまいません。次のコマンドを実行して、ドメインのすべてのスナップショットの状態を確認します。
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'
スナップショットの復元
スナップショットを復元する前に、宛先ドメインがスタンバイ付きマルチ AZ を使用していないことを確認してください。スタンバイが有効になっている場合、復元オペレーションは失敗します。
警告
インデックスのエイリアスを使用する場合は、インデックスを削除する前に、エイリアスへの書き込みリクエストを中止するか、エイリアスを別のインデックスに切り替える必要があります。書き込みリクエストを中止すると、次のシナリオの回避に有効です。
-
インデックスを削除すると、そのエイリアスも削除される。
-
削除したばかりのエイリアスに対する障害のある書き込みリクエストにより、エイリアスと同じ名前で新しいインデックスが作成される。
-
新しいインデックスとの命名の競合により、エイリアスを使用できなくなる。エイリアスを別のインデックスに切り替えた場合は、スナップショットから復元するときに
"include_aliases": false
を指定します。
スナップショットを復元するには
-
復元するスナップショットを特定します。カスタムアナライザーパッケージや割り当て要件設定など、このインデックスのすべての設定がドメインと互換性があることを確認してください。すべてのスナップショットレポジトリを表示するには、次のコマンドを実行します。
curl -XGET '
domain-endpoint
/_snapshot?pretty'リポジトリを識別した後、次のコマンドを実行してすべてのスナップショットを表示します。
curl -XGET '
domain-endpoint
/_snapshot/repository-name
/_all?pretty'注記
ほとんどの自動スナップショットは、
cs-automated
リポジトリに保存されます。ドメインで暗号化された保管中のデータはcs-automated-enc
リポジトリに保存されます。検索する手動スナップショットレポジトリが表示されない場合は、ドメインにその登録をしたことを確認します。 -
(オプション) クラスターのインデックスとスナップショットのインデックスの間に名前の競合がある場合は、 OpenSearch サービスドメインの 1 つ以上のインデックスを削除または名前を変更します。インデックスのスナップショットを、同じ名前のインデックスがすでに含まれている OpenSearch クラスターに復元することはできません。
インデックスの付けた名前の競合がある場合は、次のオプションがあります。
-
既存の OpenSearch サービスドメインのインデックスを削除し、スナップショットを復元します。
-
スナップショットから復元する際、インデックスの名前を変更し、その後インデックスを再作成します。インデックスの名前を変更する方法については、 OpenSearch ドキュメントのこのリクエスト例
を参照してください。 -
スナップショットを別の OpenSearch サービスドメインに復元します (手動スナップショットでのみ可能)。
次のコマンドは、ドメイン内の既存のインデックスをすべて削除します。
curl -XDELETE '
domain-endpoint
/_all'ただし、すべてのインデックスを復元する予定がない場合は、インデックスを 1 つだけ削除できます。
curl -XDELETE '
domain-endpoint
/index-name
' -
-
スナップショットを復元するには、次のコマンドを実行します。
curl -XPOST '
domain-endpoint
/_snapshot/repository-name
/snapshot-name
/_restore'OpenSearch Dashboards に対する特別なアクセス許可ときめ細かなアクセスコントロールインデックスにより、特に自動スナップショットから復元しようとすると、すべてのインデックスの復元が失敗する可能性があります。次の例では、1 つのインデックスである
my-index
を2020-snapshot
からcs-automated
スナップショットレポジトリで復元します。curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' \ -d '{"indices": "my-index"}' \ -H 'Content-Type: application/json'または、Dashboards ときめ細かなアクセスコントロールインデックスを除くすべてのインデックスを復元することもできます。
curl -XPOST '
domain-endpoint
/_snapshot/cs-automated/2020-snapshot/_restore' \ -d '{"indices": "-.kibana*,-.opendistro*"}' \ -H 'Content-Type: application/json'rename_pattern
とrename_replacement
のパラメータを使用すると、データを削除することなくスナップショットを復元することができます。これらのパラメータの詳細については、 OpenSearch ドキュメントの「スナップショットの復元 API リクエストフィールド」と「リクエストの例 」を参照してください。
注記
関連するインデックスに対してすべてのプライマリシャードを使用できなかった場合、スナップショットが PARTIAL
の state
になっている可能性があります。この値は、1 つ以上のシャードからのデータが正しく保存されていないことを示します。部分スナップショットからの復元も可能ですが、不足しているインデックスの復元に古いスナップショットの使用が必要になる場合もあります。
手動スナップショットの削除
次のコマンドを実行して、手動スナップショットを削除します。
DELETE _snapshot/
repository-name
/snapshot-name
Snapshot Management を用いたスナップショットの自動化
OpenSearch Dashboards でスナップショット管理 (SM) ポリシーを設定して、スナップショットの定期的な作成と削除を自動化できます。SM は、インデックスのグループのスナップショットを作成できますが、Index State Management は、インデックスごとに 1 つのスナップショットしか作成できません。Service で SM を使用するには OpenSearch 、独自の Amazon S3 リポジトリを登録する必要があります。リポジトリの登録手順については、「手動スナップショットレポジトリの登録」を参照してください。
SM 以前は、 OpenSearch Service は、デフォルトでオンになっている無料の自動スナップショット機能を提供していました。この機能は、サービスが管理する cs-*
リポジトリにスナップショットを送信します。この機能を無効にする場合は、 AWS Supportまでお問い合わせください。
SM 機能の詳細については、 OpenSearch ドキュメントの「スナップショット管理
SM は、現在は、複数のインデックスタイプでのスナップショット作成をサポートしていません。例えば、*
を使って複数のインデックスでスナップショットを作成する際に、一部のインデックスがウォーム層にある場合、スナップショットの作成は失敗します。スナップショットに複数のインデックスタイプを含める必要がある場合は、SM でこのオプションがサポートされるまでは、ISM スナップショットアクション
のアクセス許可を設定します。
以前の OpenSearch サービスドメインバージョンから 2.5 にアップグレードする場合、スナップショット管理のセキュリティ許可がドメインで定義されていない可能性があります。きめ細かいアクセスコントロールを使用して、ドメインでスナップショット管理を使用するには、管理者以外のユーザーがこのロールにマッピングされている必要があります。スナップショット管理ロールを手動で作成するときは、次の手順を実行します。
-
OpenSearch ダッシュボードで、セキュリティに移動し、アクセス許可 を選択します。
-
[アクショングループの作成] を選択し、以下のグループを設定します。
グループ名 許可 snapshot_management_full_access
-
cluster:admin/opensearch/snapshot_management/*
-
cluster:admin/opensearch/notifications/feature/publish
-
cluster:admin/repository/*
-
cluster:admin/snapshot/*
snapshot_management_read_access
-
cluster:admin/opensearch/snapshot_management/policy/get
-
cluster:admin/opensearch/snapshot_management/policy/search
-
cluster:admin/opensearch/snapshot_management/policy/explain
-
cluster:admin/repository/get
-
cluster:admin/snapshot/get
-
-
[ロール]、[ロールの作成] の順に選択します。
-
ロールに snapshot_management_role という名前を付けます。
-
[Cluster permissions] (クラスターのアクセス権限) で、
snapshot_management_full_access
またはsnapshot_management_read_access
を選択します。 -
[作成] を選択します。
-
ロールを作成したら、任意のユーザー、またはスナップショットを管理するバックエンドロールにそれをマッピングします。
考慮事項
Snapshot Management を設定するときは、次の点を考慮します。
-
リポジトリごとに使用できるポリシーは 1 つです。
-
1 つのポリシーで最大 400 のスナップショットを作成できます。
-
この機能は、ドメインのステータスが赤色の場合、JVM の負荷が高い(85% 以上)場合、スナップショット機能が停止している場合は、実行されません。クラスターの全体的なインデックス作成と検索のパフォーマンスが影響を受けていると、SM も影響を受けている可能性があります。
-
スナップショットのオペレーションは、前のオペレーションが完了した後に始まるため、1 つのポリシーでスナップショットのオペレーションが並行して実行されることはありません。
-
同じスケジュールのポリシーが複数存在すると、リソースが急増する可能性があります。ポリシーのスナップショット化したインデックスが重複している場合、シャードレベルのスナップショットオペレーションは順番にしか実行されないため、パフォーマンスの問題が連鎖的に発生する可能性があります。ポリシーがリポジトリを共有すると、そのリポジトリへの書き込みオペレーションが急増します。
-
特別なユースケースでない限り、スナップショットオペレーションの自動化は 1 時間に 1 回以下でスケジュールすることが推奨されます。
インデックスステート管理を用いたスナップショットの自動化
Index State Management (ISM) snapshot
オペレーションを使用して、経過時間、サイズ、ドキュメント数の変化に基づいてインデックスのスナップショットを自動的にトリガーできます。ISM は、インデックスごとに 1 つのスナップショットが必要な場合に最適です。インデックスグループのスナップショットが必要な場合は、「Snapshot Management を用いたスナップショットの自動化」を参照してください。
OpenSearch サービスで SM を使用するには、独自の Amazon S3 リポジトリを登録する必要があります。snapshot
オペレーションを使用した ISM ポリシーの例については、「サンプルポリシー」を参照してください。
スナップショットの Curator の使用
ISM がインデックスとスナップショットの管理に機能しない場合は、代わりに Curator を使用できます。複雑なクラスターでの管理タスクの単純化に役立つ、アドバンストフィルタリング機能が提供されています。pip
pip install elasticsearch-curator
Curator はコマンドラインインターフェース (CLI) または Python API として使用できます。Python API を使用する場合は、従来の elasticsearch-py
CLI を使用する場合は、コマンドラインで認証情報をエクスポートして curator.yml
を次のように設定します。
client: hosts: search-
my-domain
.us-west-1
.es.amazonaws.com port: 443 use_ssl: True aws_region:us-west-1
aws_sign_request: True ssl_no_validate: False timeout: 60 logging: loglevel: INFO