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

所要時間4分
0

Amazon OpenSearch Service クラスターで手動スナップショットを復元しようとしましたが、リポジトリの登録やアクセス時にエラーが発生しました。

簡単な説明

OpenSearch Service において手動スナップショットからデータを移行するために、以下の手順を実行します。

1.    スナップショットを保存するためのAmazon Simple Storage Service (Amazon S3) バケットを選択します。

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

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

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

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

それ以外の場合、以下のエラーが発生する可能性があります。

  • 403 Unauthorized error
  • illegal_state_exception
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • 「PARTIAL」スナップショットのステータス
  • Amazon Simple Storage Service Glacier (Amazon S3 Glacier) ストレージクラスの問題

解決方法

403 Unauthorized エラー

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 エラーを解決するには、手動スナップショットを取得する際にusername:passwordパラメーターを指定するようにしてください。

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

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

また、スナップショットに対してスナップショットリポジトリを登録し、manage_snapshots ロールを IAM ロールにマップする必要もあります。manage_snapshots ロールには、IAM ロール (TheSnapshotRole) を引き受けるための有効な権限 (IAM:PassRole) が必要です。詳細については、「前提条件」を参照してください。

manage_snapshots ロールを IAM ロールにマップする手順は次のとおりです。

1.    プライマリユーザーとしてOpenSearch Service コンソールを開きます。

2.    [セキュリティ] を選択します。

3.    [ロール] を選択します。

4.    ロールとして [manage_snapshots] を選択します。

5.    [マップされたユーザー] を選択します。

6.    [マッピングを管理] を選択します。

7.    [ユーザー] の下に、ユーザーの ARN を追加します (例:「arn:aws:iam::012345678912:user/username」)。

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

illegal_state_exception

Amazon S3 バケットを複数のドメインで使用して手動スナップショットを取ると、以下のエラーが発生します。

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_state_exception",
        "reason": "Can't get text on a FIELD_NAME at 1:1838"
      }
    ],
    "type": "illegal_state_exception",
    "reason": "Can't get text on a FIELD_NAME at 1:1838"
  },
  "status": 500
}

この問題を解決するには、新しい Amazon S3 バケットを作成して手動スナップショットを取るか、既存のバケットからすべてのデータをクリアしてください。

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

スナップショットが進行中の場合、別のスナップショットを取ろうとすると以下のエラーが表示されます。

{
    "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'

スナップショットが既に進行中の場合は、現在のスナップショットが完了するまで待機してください。または、スナップショットがスタックしたと思われる場合は、毎時スナップショットの履歴を確認してください。詳細については、「インデックスを削除できない、または 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 のバージョンをアップグレードしてください。または、リモートリインデックスAPIを使用してインデックスを移行することもできます。

ドメインの FGAC が有効になっており、スナップショットからすべてのインデックスを復元しようとすると、次のような 403 エラーが発生する場合があります。

{
  "error" : {
    "root_cause" : [
      {
        "type" : "security_exception",
        "reason" : "no permissions for [] and User [name=RahulSarkar, backend_roles=[], requestedTenant=]"
      }
    ],
    "type" : "security_exception",
    "reason" : "no permissions for [] and User [name=RahulSarkar, backend_roles=[], requestedTenant=]"
  },
  "status" : 403
}

このエラーを解決するには、次のようなセキュリティインデックスを除外してください。

curl -XPOST 'username:password' "https://opensearch-domain-endpoint/_snapshot/snapshot-repository/snapshot-id/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "-.opensearch*,-.opendistro*,-.kibana*"
}'

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 ロールの信頼関係を確認してください。ロールの信頼関係には、次のように OpenSearch Service が Principal ステートメントに指定されている必要があります。

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

PARTIAL スナップショットの状態

スナップショットが「PARTIAL」状態になる理由は次の通りです。

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

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

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

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

関連情報

Amazon OpenSearch Service で「cannot restore index [.kibana]」エラーを解決するにはどうすればよいですか?

手動スナップショットの取得

AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ