Come posso risolvere gli errori dello snapshot manuale nel mio cluster Amazon OpenSearch Service?

Ultimo aggiornamento: 01/09/2021

Voglio ripristinare uno snapshot manuale del mio cluster Amazon OpenSearch Service (successore di Amazon Elasticsearch Service). Tuttavia, ricevo un errore quando tento di registrare un repository o di accedere a un repository registrato. Perché succede e come posso risolvere questo problema?

Breve descrizione

Per eseguire correttamente la migrazione dei dati da uno snapshot manuale in OpenSearch Service, procedi come segue:

1.    Scegli un bucket Amazon Simple Storage Service (Amazon S3) in cui desideri archiviare il tuo snapshot.

2.    Registra il bucket Amazon S3 con il tuo cluster OpenSearch Service di origine.

3.    Acquisisci uno snapshot del cluster OpenSearch Service della fonte, quindi archivialo nel tuo bucket Amazon S3.

4.    Registra il cluster di destinazione con lo stesso bucket Amazon S3 per assicurarti di poter visualizzare lo snapshot manuale.

5.    Ripristina lo snapshot manuale sul cluster di destinazione in OpenSearch Service.

In caso contrario, è possibile che si verifichi uno dei seguenti problemi:

  • Errore 403 Unauthorized
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • Stato dello snapshot "PARTIAL"
  • Problema della classe di storage di Amazon S3 Glacier

Risoluzione

Errore "403 Unauthorized"

Se hai abilitato il controllo granulare degli accessi (FGAC) sul tuo dominio OpenSearch Service, potresti ricevere il seguente errore quando acquisisci uno snapshot:

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

Per risolvere l'errore 403 Unauthorized, assicurati di specificare un parametro username:password ogni volta che acquisisci uno snapshot manuale:

curl -XPUT -u username:password123$ 'opensearch-domain-endpoint/_snapshot/snapshot-repository-name/snapshot-name'

Nota: devi essere un utente con privilegi avanzati per abilitare il controllo granulare degli accessi per il tuo dominio OpenSearch Service. Puoi utilizzare il nome e la password dell'utente con privilegi avanzati o impostare un ruolo AWS Identity Access Management (IAM) come utente avanzato. Quando accedi allo snapshot del cluster, specifica le credenziali di utente con privilegi avanzati o il ruolo IAM. Se specifichi un ruolo IAM, questo deve firmare le richieste HTTP utilizzando sigv4. Per ulteriori informazioni sull'utilizzo del controllo granulare degli accessi e dei ruoli IAM, consulta Creazione e gestione dei domini Amazon OpenSearch Service.

Dovrai anche registrare un repository di snapshot con lo snapshot e mappare il ruolo manage_snapshots a un ruolo IAM. Il ruolo manage_snapshots deve disporre delle autorizzazioni appropriate (IAM:PassRole) per assumere il ruolo IAM (TheSnapshotRole). Per ulteriori informazioni, consulta la sezione Prerequisiti per gli snapshot manuali.

Per mappare il ruolo manage_snapshots a un ruolo IAM, procedi come segue:

1.    Apri la console di OpenSearch Dashboards.

2.    Effettua il login come utente principale.

3.    Scegli Security (Sicurezza).

4.    Scegli Roles (Ruoli).

5.    Scegli manage_snapshots come ruolo.

6.    Scegli Mapped users (Utenti mappati).

7.    Scegli Manage mapping (Gestisci mappatura).

8.    In Users (Utenti), aggiungi il tuo ARN utente (ad esempio: "arn:aws:iam::012345678912:user/username").

9.    Registra il tuo repository di snapshot manuali.

Repository_missing_exception

Prima di acquisire uno snapshot manuale dell'indice, devi registrare un repository di snapshot manuali con OpenSearch Service. Anche il tuo ruolo IAM (TheSnapshotRole) deve essere configurato per funzionare con Amazon S3.

Se non hai registrato il repository di snapshot prima di acquisire uno snapshot manuale o se utilizzi un nome di repository errato, viene visualizzato il seguente errore:

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

Per risolvere questo errore, accertati di soddisfare i prerequisiti degli snapshot manuali. Inoltre, assicurati di verificare la presenza di errori di battitura nel nome del repository.

Concurrent_snapshot_execution_exception

Se è in corso uno snapshot, viene visualizzato il seguente errore quando tenti di acquisire un altro snapshot:

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

Per verificare se è in corso un altro snapshot, esegui il comando seguente:

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

Se è già in corso uno snapshot, attendi il completamento dello snapshot corrente. Oppure, se sospetti che lo snapshot sia bloccato, controlla la cronologia degli snapshot orari. Per ulteriori informazioni, consulta Perché non riesco a eliminare un indice o aggiornare il mio cluster Amazon OpenSearch Service?

Snapshot_restore_exception

Se tenti di migrare i dati da un cluster on-premise a un dominio OpenSearch Service, potresti riscontrare la seguente eccezione:

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

Questo messaggio di errore si verifica quando uno snapshot acquisito su un cluster esistente viene eseguito su una versione di Elasticsearch diversa da quella di OpenSearch Service. Se il tuo cluster è in esecuzione su una versione precedente di Elasticsearch rispetto a OpenSearch Service, considera l'ipotesi di aggiornare la tua versione di Elasticsearch. In alternativa, puoi utilizzare l'API di reindicizzazione remota per migrare i tuoi indici.

a_w_s_security_token_service_exception

Se il ruolo IAM associato al tuo snapshot manuale non ha stabilito una relazione di fiducia per "es.amazonaws.com", riceverai la seguente eccezione:

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

Con gli snapshot di OpenSearch Service, viene creato un ruolo interno (ad esempio arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Questo ruolo interno assume il ruolo IAM associato allo snapshot manuale e quindi esegue tutte le operazioni necessarie.

Per risolvere l'eccezione del token di sicurezza, assicurati di specificare il ruolo IAM associato allo snapshot manuale. Se non disponi di un ruolo IAM associato allo snapshot manuale, dovrai crearne uno. Per ulteriori informazioni, consulta la sezione Prerequisiti per gli snapshot manuali.

Inoltre, verifica la relazione di fiducia per il ruolo IAM associato allo snapshot manuale. La relazione di fiducia per il ruolo deve specificare OpenSearch Service nell'istruzione Principal, in questo modo:

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

Stato dello snapshot PARTIAL

Uno snapshot entra in uno stato "PARTIAL" (PARZIALE) per i seguenti motivi:

Uno snapshot parziale indica che i dati di uno shard non possono essere archiviati. Puoi comunque ripristinare i dati da uno snapshot parziale, ma dovrai utilizzare snapshot precedenti per ripristinare eventuali indici mancanti. Per verificare se il cluster è entrato in uno stato "PARTIAL" (PARZIALE), controlla la cronologia degli snapshot. Per ulteriori informazioni, consulta Ripristino degli snapshot.

Problema della classe di storage di Amazon S3 Glacier

Se stai archiviando uno snapshot ripristinato nella classe Amazon Simple Storage Service Glacier Storage, evita di applicare una regola del ciclo di vita di Amazon S3 Glacier al bucket. Gli snapshot manuali non supportano la classe di storage Amazon S3 Glacier. Pertanto, se applichi una policy del ciclo di vita di Amazon S3 Glacier al bucket S3, devi spostare indietro tutti gli oggetti che transitano.

Dopo aver spostato gli oggetti nella classe di storage Amazon S3 standard, puoi ripristinare gli oggetti da tali snapshot. Per ulteriori informazioni, consulta la sezione Prerequisiti per gli snapshot manuali.