Wie kann ich manuelle Snapshot-Fehler in meinem Amazon OpenSearch Service-Cluster beheben?

Lesedauer: 7 Minute
0

Ich möchte einen manuellen Snapshot meines Amazon-OpenSearch Service-Clusters wiederherstellen. Ich erhalte jedoch eine Fehlermeldung, wenn ich versuche, ein Repository zu registrieren oder auf ein registriertes Repository zuzugreifen. Was ist der Grund dafür und wie löse ich das Problem?

Kurzbeschreibung

Führen Sie die folgenden Schritte aus, um Daten aus einem manuellen Snapshot in OpenSearch Service erfolgreich zu migrieren:

1.    Wählen Sie einen Amazon Simple Storage Service (Amazon S3)-Bucket, in dem Sie Ihren Snapshot speichern möchten.

2.    Registrieren Sie den Amazon S3 Bucket bei Ihrem OpenSearch Service-Quellcluster.

3.    Machen Sie einen Snapshot des OpenSearch Service-Quellclusters und speichern Sie ihn dann in Ihrem Amazon S3 Bucket.

4.    Registrieren Sie Ihren Zielcluster bei demselben Amazon S3 Bucket, um sicherzustellen, dass Sie den manuellen Snapshot anzeigen können.

5.    Stellen Sie den manuellen Snapshot auf dem Zielcluster in OpenSearch Service wieder her.

Andernfalls könnte eines der folgenden Probleme auftreten:

  • 403 Unauthorized-Fehler
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • Snapshot-Status „PARTIAL“
  • Problem mit Amazon S3 Glacier-Speicherklasse

Lösung

403 Unauthorized-Fehler

Wenn Sie die differenzierte Zugriffskontrolle (FGAC) auf Ihrer OpenSearch-Service-Domain aktiviert haben, erhalten Sie möglicherweise die folgende Fehlermeldung, wenn Sie einen Snapshot erstellen:

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

Um den 403 Unauthorized-Fehler zu beheben, geben Sie bei jedem manuellen Snapshot einen Benutzername:Passwort-Parameter an:

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

Hinweis: Sie müssen ein Superuser sein, um eine detaillierte Zugriffskontrolle für Ihre OpenSearch Service-Domain zu aktivieren. Sie können entweder Ihren Superuser-Namen und Ihr Passwort verwenden oder eine AWS Identity-Access-Management-Rolle (IAM) als Superuser festlegen. Wenn Sie auf Ihren Cluster-Snapshot zugreifen, geben Sie Ihre Superuser-Anmeldeinformationen oder IAM-Rolle an. Wenn Sie eine IAM-Rolle angeben, muss die IAM-Rolle die HTTP-Anforderungen mit sigv4 signieren. Weitere Informationen zur Verwendung der differenzierten Zugriffskontrolle und von IAM-Rollen finden Sie unter Erstellen und Verwalten von OpenSearch-Service-Domains.

Außerdem müssen Sie ein Snapshot-Repository mit Ihrem Snapshot registrieren und die Rolle manage_snapshots einer IAM-Rolle zuordnen. Die Rolle manage_snapshots muss über die entsprechenden Berechtigungen verfügen (IAM:PassRole), um die IAM-Rolle (DieSnapshotRolle) zu übernehmen. Weitere Informationen finden Sie unter Voraussetzungen für manuelle Snapshots.

Führen Sie die folgenden Schritte aus, um die Rolle manage_snapshots einer IAM-Rolle zuzuordnen:

1.    Öffnen Sie die OpenSearch-Dashboard-Konsole.

2.    Loggen Sie sich als Hauptbenutzer ein.

3.    Wählen Sie Sicherheit.

4.    Wählen Sie Rollen.

5.    Wählen Sie manage_snapshots als Ihre Rolle.

6.    Wählen Sie Zugeordnete Benutzer.

7.    Wählen Sie Mapping verwalten.

8.    Fügen Sie unter Benutzer den ARN Ihres Benutzers hinzu (zum Beispiel: „arn:aws:iam::012345678912:Benutzer/Benutzername“).

9.    Registrieren Sie Ihr manuelles Snapshot-Repository.

Repository_missing_exception

Bevor Sie einen manuellen Index-Snapshot erstellen, müssen Sie ein manuelles Snapshot-Repository bei OpenSearch Service registrieren. Ihre IAM-Rolle (DieSnapshotRolle) muss auch für die Arbeit mit Amazon S3 eingerichtet sein.

Wenn Sie Ihr Snapshot-Repository vor dem Erstellen eines manuellen Snapshots nicht registriert haben oder einen falschen Repository-Namen verwenden, wird die folgende Fehlermeldung angezeigt:

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

Stellen Sie sicher, dass Sie die Voraussetzungen für den manuellen Snapshot erfüllen, um diesen Fehler zu beheben. Sie sollten den Repository-Namen außerdem auf Tippfehler überprüfen.

Concurrent_snapshot_execution_exception

Wenn gerade ein Snapshot ausgeführt wird, wird beim Versuch, einen weiteren Snapshot zu erstellen, die folgende Fehlermeldung angezeigt:

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

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob ein weiterer Snapshot läuft:

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

Wenn ein Snapshot bereits läuft, warten Sie, bis der aktuelle Snapshot abgeschlossen ist. Wenn Sie dagegen den Verdacht haben, dass Ihr Snapshot keine Fortschritte macht, überprüfen Sie Ihren Verlauf der stündlichen Snapshots. Weitere Informationen finden Sie unter Warum kann ich einen Index nicht löschen oder ein Upgrade für meinen OpenSearch Service-Cluster durchführen?

Snapshot_restore_exception

Wenn Sie versuchen, Daten von einem On-Premises-Cluster zu einer OpenSearch Service-Domäne zu migrieren, kann die folgende Ausnahme auftreten:

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

Diese Fehlermeldung tritt auf, wenn ein Snapshot, der auf einem vorhandenen Cluster aufgenommen wurde, auf einer anderen Version von Elasticsearch als OpenSearch Service ausgeführt wird. Wenn Ihr Cluster auf einer früheren Version von Elasticsearch als OpenSearch Service ausgeführt wird, sollten Sie ein Upgrade Ihrer Elasticsearch-Version in Betracht ziehen. Sie können außerdem die Remote-Reindex-API verwenden, um Ihre Indizes zu migrieren.

a_w_s_security_token_service_exception

Wenn für die IAM-Rolle, die mit Ihrem manuellen Snapshot verknüpft ist, keine Vertrauensstellung für „es.amazonaws.com“ hergestellt wurde, erhalten Sie die folgende Ausnahme:

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

Mit Snapshots des OpenSearch Service wird eine interne Rolle erstellt (z. B. arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Diese interne Rolle übernimmt die IAM-Rolle, die mit dem manuellen Snapshot verknüpft ist, und führt dann alle erforderlichen Operationen aus.

Um die Ausnahme für das Sicherheitstoken zu beheben, geben Sie unbedingt die IAM-Rolle an, die mit dem manuellen Snapshot verknüpft ist. Wenn dem manuellen Snapshot keine IAM-Rolle zugeordnet ist, müssen Sie eine Rolle erstellen. Weitere Informationen finden Sie unter Voraussetzungen für manuelle Snapshots.

Überprüfen Sie außerdem die Vertrauensbeziehung für die IAM-Rolle, die mit dem manuellen Snapshot verknüpft ist. Die Vertrauensstellung für die Rolle muss OpenSearch Service in der Haupt-Anweisung wie folgt angeben:

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

Snapshot-Status „PARTIAL“

Ein Snapshot wechselt aus folgenden Gründen in den Status „PARTIAL“:

Ein partieller Snapshot zeigt an, dass Daten von einem Shard nicht gespeichert werden konnten. Sie können weiterhin Daten aus einem partiellen Snapshot wiederherstellen, müssen jedoch frühere Snapshots verwenden, um fehlende Indizes wiederherzustellen. Um zu überprüfen, ob Ihr Cluster in den Status „PARTIAL“ eingetreten ist, überprüfen Sie Ihren Snapshot-Verlauf. Weitere Informationen finden Sie unter Wiederherstellen von Snapshots.

Probleme mit Amazon-S3-Glacier-Speicherklassen

Wenn Sie einen wiederhergestellten Snapshot in einer der Amazon S3 Glacier-Speicherklassen speichern, vermeiden Sie es, eine Amazon S3 Glacier-Lebenszyklusregel auf den Bucket anzuwenden. Manuelle Snapshots unterstützen die Speicherklassen von Amazon S3 Glacier nicht. Wenn Sie daher eine Amazon S3 Glacier-Lebenszyklus-Richtlinie auf den S3-Bucket anwenden, müssen Sie alle Objekte, die übergehen, zurückverschieben.

Nachdem Sie die Objekte wieder in eine Standardspeicherklasse von Amazon S3 verschoben haben, können Sie die Objekte aus diesen Snapshots wiederherstellen. Weitere Informationen finden Sie unter Voraussetzungen für manuelle Snapshots.


Relevante Informationen

Wie behebe ich den Fehler „cannot restore index [.kibana] because it's open“ (Index [.kibana] ist bereits geöffnet und kann deshalb nicht wiederhergestellt werden) in Amazon OpenSearch Service?

Erstellen manueller Snapshots

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren