Amazon OpenSearch Service クラスターの手動スナップショットエラーを解決するにはどうすればよいですか?

最終更新日: 2022 年 5 月 12 日

Amazon OpenSearch Service クラスターの手動スナップショットを復元したいと考えています。ただし、リポジトリを登録したり、登録されたリポジトリにアクセスしようとしたりすると、エラーが発生します。このような問題が発生しているのはなぜですか? これを解決するにはどうすればよいですか?

簡単な説明

OpenSearch Service の手動スナップショットからデータを正常に移行するには、次の手順を実行します。

1.    スナップショットを格納する Amazon Simple Storage Service (Amazon S3) バケットを選択します。

2.    Amazon S3 バケットを OpenSearch Service ソースクラスターに登録します。

3.    OpenSearch Servie ソースクラスターのスナップショットを作成して、Amazon S3 バケットに保存します。

4.    送信先クラスターを同じ Amazon S3 バケットに登録して、手動スナップショットを表示できるようにします。

5.    OpenSearch Service の送信先クラスターに手動スナップショットを復元します。

復元しない場合、次のいずれかの問題が発生する可能性があります。

  • 403 Unauthorized (403 未承認) エラー
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • 「PARTIAL」スナップショットステータス
  • Amazon S3 Glacier のストレージクラスの問題

解決方法

403 Unauthorized (403 未承認) エラー

OpenSearch Service ドメインできめ細かなアクセスコントロール (FGAC) をアクティブ化している場合、スナップショットを作成するときに次のエラーが表示されることがあります。

{"error":{"root_cause":[{"type":"security_exception","reason":"no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"}],"type":"security_exception","reason":"no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"},"status":403}

403 Unauthorized (403 未承認) エラーを解決するには、手動スナップショットを作成するときに username:password パラメータを指定します。

curl -XPUT -u 'opensearch-domain-endpoint/_snapshot/snapshot-repository-name/snapshot-name'

注: OpenSearch Service ドメインについてきめ細かなアクセスコントロールをアクティブ化するには、スーパーユーザーである必要があります。スーパーユーザー名とパスワードを使用するか、AWS Identity Access Management (IAM) ロールをスーパーユーザーとして設定できます。クラスタースナップショットにアクセスする際に、スーパーユーザーの認証情報または IAM ロールを指定します。IAM ロールを指定する場合、IAM ロールは sigv4 を使用して HTTP リクエストに署名する必要があります。きめ細かなアクセスコントロールと IAM ロールの使用の詳細については、「Amazon OpenSearch Service ドメインの作成と管理」を参照してください。

また、スナップショットリポジトリをスナップショットに登録し、manage_snapshots ロールを IAM ロールにマッピングする必要があります。manage_snapshots ロールは、IAM ロール (TheSnapshotRole) を継承するための適切なアクセス許可 (IAM:PassRole) を持っている必要があります。詳細については、「手動スナップショット前提条件」を参照してください。

manage_snapshots ロールを IAM ロールにマッピングするには、次の手順を実行します。

1.    OpenSearch Dashboards コンソールを開きます。

2.    プライマリユーザーとしてログインします。

3.    [Security] (セキュリティ) を選択します。

4.    [Roles] (ロール) を選択します。

5.    ロールとして [managed_snapshots] を選択します。

6.    [Mapped users] (マッピングされたユーザー) を選択します。

7.    [Manage mapping] を選択します。

8.    [Users] で、ユーザー ARN を追加します (例: "arn:aws:iam::012345678912:user/username")。

9.    手動スナップショットリポジトリを登録します。

Repository_missing_exception

手動インデックススナップショットを作成する前に、OpenSearch Service で手動スナップショットリポジトリを登録する必要があります。IAM ロール (TheSnapshotRole) は、Amazon S3 で動作するように設定する必要があります。

手動スナップショットを作成する前にスナップショットリポジトリを登録していない場合、または誤ったリポジトリ名を使用すると、次のエラーが表示されます。

{"error":{"root_cause":[{"type":"repository_missing_exception","reason":"[snapshot-repository-name] missing"}],"type":"repository_missing_exception","reason":"[snapshot-repository-name] missing"},"status":404}

このエラーを解決するには、手動スナップショットの前提条件が満たされていることを確認してください、また、リポジトリ名にスペルミスがないか確認してください。

Concurrent_snapshot_execution_exception

スナップショットが現在進行中の場合、別のスナップショットを作成しようとすると、次のエラーが表示されます。

The below error “concurrent_snapshot_execution_exception” means that a snapshot is already in progress
{"error":{"root_cause":[{"type":"concurrent_snapshot_execution_exception","reason":"[snapshot-repository-name:snapshot-name] a snapshot is already running"}],"type":"concurrent_snapshot_execution_exception","reason":"[snapshot-repository-name:snapshot-name] a snapshot is already running"}

進行中の別のスナップショットがあるかどうかを確認するには、次のコマンドを実行します。

curl -XGET 'opensearch-domain-endpoint/_snapshot/_status'

スナップショットが既に進行中の場合は、現在のスナップショットが完了するまで待ちます。スナップショットがスタックしていることが疑われる場合は、時間単位のスナップショットの履歴を確認します。詳細については、「インデックスを削除したり、Amazon OpenSearch Service クラスターをアップグレードしたりできないのはなぜですか?」を参照してください。

Snapshot_restore_exception

オンプレミスのクラスターから OpenSearch Service ドメインにデータを移行しようとすると、次の例外が発生する可能性があります。

{
  "error": {
    "root_cause": [
      {
        "type": "snapshot_restore_exception",
        "reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
      }
    ],
    "type": "snapshot_restore_exception",
    "reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
  },
  "status": 500
}

このエラーメッセージは、既存のクラスター上で作成されたスナップショットが OpenSearch Service とは異なるバージョンの Elasticsearch で実行する場合に発生します。OpenSearch Service が実行されている Elasticsearch のバージョンよりも古いバージョンの Elasticsearch でクラスターが実行している場合は、Elasticsearch のバージョンをアップグレードすることを検討してください。または、remote reindex API を使用してインデックスを移行することもできます。

a_w_s_security_token_service_exception

手動スナップショットに関連付けられた IAM ロールに「es.amazonaws.com」の信頼関係が確立されていない場合、次の例外が発生します。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "repository_exception",
        "reason" : "[es_01082021_repo] Could not determine repository generation from root blobs"
      }
    ],
    "type" : "repository_exception",
    "reason" : "[es_01082021_repo] Could not determine repository generation from root blobs",
    "caused_by" : {
      "type" : "i_o_exception",
      "reason" : "Exception when listing blobs by prefix [index-]",
      "caused_by" : {
        "type" : "a_w_s_security_token_service_exception",
        "reason" : "a_w_s_security_token_service_exception: User: arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::679203657591:role/ES_Backup_Role (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 36d09b93-d94f-457e-8fa5-b0a50ba436c3)"
      }
    }
  },
  "status" : 500
}

OpenSearch Service スナップショットでは、内部ロールが作成されます (arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591 など)。この内部ロールは、手動スナップショットに関連付けられた IAM ロールを引き受け、必要なオペレーションをすべて実行します。

セキュリティトークンの例外を解決するには、手動スナップショットに関連付けられた IAM ロールを必ず指定してください。手動スナップショットに関連付けられた IAM ロールがない場合は、作成する必要があります。詳細については、「手動スナップショット前提条件」を参照してください。

また、手動スナップショットに関連付けられた IAM ロールの信頼関係も確認します。ロールの信頼関係では、Principal ステートメントで OpenSearch Service を次のように指定する必要があります。

{
   "Version": "2012-10-17",
   "Statement": [{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
          "Service": "es.amazonaws.com"
          },
      "Action": "sts:AssumeRole"
  }]
}

PARTIAL スナップショットステータス

スナップショットは、次の理由により「PARTIAL」状態になります。

部分的なスナップショットは、シャードからのデータを保存できなかったことを示します。部分的なスナップショットからデータを復元することはできますが、欠落しているインデックスを復元するには、以前のスナップショットを使用する必要があります。クラスターが「PARTIAL」状態になったかどうかを確認するには、スナップショット履歴を確認します。詳細については、「スナップショットの復元」をご参照ください。

Amazon S3 Glacier のストレージクラスの問題

復元したスナップショットを Amazon Simple Storage Service Glacier Storage クラスに保存する場合は、Amazon S3 Glacier Lifecycle ルールをバケットに適用しないでください。手動スナップショットは、Amazon S3 Glacier のストレージクラスをサポートしていません。したがって、Amazon S3 Glacier Lifecycle ポリシーを S3 バケットに適用する場合は、移行するオブジェクトをすべて元に戻す必要があります。

オブジェクトを標準の Amazon S3 のストレージクラスに戻したら、それらのスナップショットからオブジェクトを復元できます。詳細については、「手動スナップショット前提条件」を参照してください。

Amazon OpenSearch Service は、Amazon Elasticsearch Service の後継サービスです。