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

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

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

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

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

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

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

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

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

  4. TheSnapshotRole を渡すための許可を持っているロールの ARN を追加します。[Backend roles] (バックエンドロール) の下にロール ARN を配置します

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

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

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

Snapshots

スナップショットリポジトリを登録するには、OpenSearch Service ドメインエンドポイントに 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 つだけにする必要があります。

ドメインが Virtual Private Cloud (VPC) に存在する場合は、リクエストが正常にスナップショットレポジトリに登録するようにお使いのコンピュータが VPC に接続されていることが必要です。VPC へのアクセスはネットワーク構成によって異なりますが、VPN あるいは社内ネットワークへの接続を含む場合がよくあります。OpenSearch Service ドメインにアクセスできるかを確認するには、ウェブブラウザで https://your-vpc-domain.region.es.amazonaws.com を開き、デフォルトの JSON 応答を受信していることを確認します。

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

Encrypted snapshots

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

スナップショットリポジトリとして使用しているバケットの S3 管理のキーを使って 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 つのドメインから別のドメインに移行するには、古いドメインと新しいドメインで同じスナップショットレポジトリを登録する必要があります。リポジトリ名は任意です。

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

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

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

サンプル 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)