手動スナップショットレポジトリの登録 - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

手動スナップショットレポジトリの登録

手動インデックススナップショットを作成する前に、スナップショットリポジトリを OpenSearch Service に登録する必要があります。この 1 回限りの操作では、「」で説明されているようにTheSnapshotRole、 へのアクセスが許可されている認証情報を使用して AWS リクエストに署名する必要があります前提条件

ステップ 1: OpenSearch ダッシュボードにスナップショットロールをマッピングする (きめ細かなアクセスコントロールを使用している場合)

きめ細かなアクセスコントロールにより、リポジトリの登録時に追加のステップが導入されます。他のすべての目的でHTTP基本認証を使用している場合でも、 manage_snapshots を渡すiam:PassRoleアクセス許可を持つロールにIAMロールをマッピングする必要がありますTheSnapshotRole

  1. OpenSearch サービスドメインの OpenSearch Dashboards プラグインに移動します。Dashboards エンドポイントは、 OpenSearch サービスコンソールのドメインダッシュボードにあります。

  2. メインメニューから [セキュリティ]、[ロール] を選択し、[manage_snapshots] ロールを選択します。

  3. [マッピングされたユーザー]、[マッピングの管理] を選択します。

  4. を渡すアクセス許可を持つロールARNの を追加しますTheSnapshotRole。バックエンドロール ARNsの下にロールを配置します。

    arn:aws:iam::123456789123:role/role-name
  5. [マップ] を選択し、ユーザーまたはロールが [マッピングされたユーザー] の下に表示されていることを確認します。

ステップ 2: リポジトリを登録する

次の [Snapshots] (スナップショット) のタブには、スナップショットディレクトリの登録方法が記されています。手動スナップショットの暗号化に関するオプションと、新しいドメインに移行した後にスナップショットを登録する際のオプションについては、関連するタブを参照してください。

Snapshots

スナップショットリポジトリを登録するには、 OpenSearch サービスドメインエンドポイントにPUTリクエストを送信します。curlサンプル Python クライアントPostman、またはその他の方法を使用して署名付きリクエストを送信し、スナップショットリポジトリを登録できます。 OpenSearch Dashboards コンソールでPUTリクエストを使用してリポジトリを登録することはできません。

リクエストは以下のような形式です。

PUT domain-endpoint/_snapshot/my-snapshot-repo-name { "type": "s3", "settings": { "bucket": "s3-bucket-name", "base_path": "my/snapshot/directory", "region": "region", "role_arn": "arn:aws:iam::123456789012:role/TheSnapshotRole" } }
注記

リポジトリ名は「cs-」で始めることはできません。さらに、複数のドメインから同じリポジトリに書き込まない必要があります。リポジトリへの書き込みアクセス権を持つドメインは、1 つだけにする必要があります。

ドメインが仮想プライベートクラウド (VPC) 内に存在する場合、スナップショットリポジトリを正常に登録するには、コンピュータVPCを に接続する必要があります。へのアクセスVPCはネットワーク設定によって異なりますが、 VPNまたは企業ネットワークへの接続が必要になる可能性があります。 OpenSearch サービスドメインに到達できることを確認するには、ウェブブラウザhttps://your-vpc-domain.region.es.amazonaws.comで に移動し、デフォルトのJSONレスポンスを受信していることを確認します。

Amazon S3 バケットがドメイン AWS リージョン 以外の にある場合は OpenSearch、リクエスト"endpoint": "s3.amazonaws.com"に パラメータを追加します。

Encrypted snapshots

現在、 AWS Key Management Service (KMS) キーを使用して手動スナップショットを暗号化することはできませんが、サーバー側の暗号化 () を使用して保護できますSSE。

スナップショットリポジトリとして使用するバケットの S3-managedキーSSEで を有効にするには、 をPUTリクエストの "settings"ブロック"server_side_encryption": trueに追加します。詳細については、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 管理の暗号化キー によるサーバー側の暗号化を使用したデータの保護」を参照してください。

または、スナップショットリポジトリとして使用する S3 バケットのサーバー側の暗号化に AWS KMS キーを使用することもできます。このアプローチを使用する場合は、S3 バケットの暗号化に使用される AWS KMS キーにアクセスTheSnapshotRole許可を付与してください。詳細については、「AWS KMSのキーポリシー」を参照してください。

Domain migration

スナップショットリポジトリの登録は 1 回限りのオペレーションです。ただし、1 つのドメインから別のドメインに移行するには、古いドメインと新しいドメインで同じスナップショットレポジトリを登録する必要があります。リポジトリ名は任意です。

新しいドメインに移行する場合、または同じリポジトリを複数のドメインに登録する場合は、次のガイドラインを考慮してください。

  • 新しいドメインにリポジトリを登録するときは、 をPUTリクエストの "settings"ブロック"readonly": trueに追加します。この設定により、古いドメインのデータが誤って上書きされるのを防ぐことができます。リポジトリへの書き込みアクセス権を持つドメインは、1 つだけにする必要があります。

  • 別の のドメインにデータを移行する場合 AWS リージョン(us-east-2 にある古いドメインとバケットから us-west-2 の新しいドメインなど)、 PUT ステートメント"endpoint": "s3.amazonaws.com""region": "region" を に置き換えてリクエストを再試行します。

サンプル Python クライアントの使用

Python クライアントは、単純なHTTPリクエストよりも自動化が簡単で、再利用性に優れています。この方法を使用してスナップショットリポジトリを登録する場合は、次のサンプル Python コードを register-repo.py などの Python ファイルとして保存します。クライアントでは、AWS SDK for Python (Boto3)リクエストおよび requests-aws4auth パッケージが必要になります。クライアントには、他のスナップショットオペレーションのコメントアウトされた例が含まれています。

サンプルコードで、次の変数を更新します: hostregionpath、および 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)