Comment puis-je résoudre l'erreur d’instantané manuel dans mon cluster OpenSearch Service ?

Lecture de 8 minute(s)
0

J'ai essayé de restaurer un instantané manuel pour mon cluster Amazon OpenSearch Service, mais j'ai reçu un message d'erreur lorsque j'ai essayé d'enregistrer ou d'accéder à un référentiel.

Brève description

Pour migrer des données à partir d'un instantané manuel dans OpenSearch Service, procédez comme suit :

1.    Choisissez un compartiment Amazon Simple Storage Service (Amazon S3) dans lequel vous souhaitez stocker votre instantané.

2.    Enregistrez le compartiment Amazon S3 auprès de votre cluster source OpenSearch Service.

3.    Prenez un instantané du cluster source OpenSearch Service, puis stockez-le dans votre compartiment Amazon S3.

4.    Enregistrez votre cluster de destination avec le même compartiment Amazon S3 pour vous assurer que vous pouvez consulter l'instantané manuel.

5.    Restaurez l'instantané manuel sur le cluster de destination dans OpenSearch Service.

Dans le cas contraire, vous risquez de rencontrer l'une des erreurs suivantes :

  • 403 Unauthorized error
  • illegal_state_exception
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • État de l'instantané « PARTIEL »
  • Problème lié à la classe de stockage Amazon Simple Storage Service Glacier (Amazon S3 Glacier)

Résolution

403 Unauthorized error

Si vous avez activé le contrôle d'accès précis (FGAC) sur votre domaine OpenSearch Service, l'erreur suivante peut s'afficher lorsque vous prenez un instantané :

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

Pour résoudre l'erreur 403 Unauthorized, veillez à spécifier un paramètre username:password lorsque vous prenez un instantané manuel :

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

Remarque : Vous devez être super-utilisateur pour activer un contrôle d'accès précis pour votre domaine OpenSearch Service. Vous pouvez soit utiliser votre nom et votre mot de passe de super-utilisateur, soit définir un rôle AWS Identity Access Management (IAM) en tant que super-utilisateur. Lorsque vous accédez à votre instantané de cluster, spécifiez vos informations d'identification de super-utilisateur ou votre rôle IAM. Si vous spécifiez un rôle IAM, le rôle IAM doit utiliser sigv4 pour signer les requêtes HTTP. Pour plus d'informations sur l'utilisation d'un contrôle d'accès précis et de rôles IAM, voir Création et gestion de domaines OpenSearch Service.

Vous devez également enregistrer un référentiel d'instantanés avec votre instantané et mapper le rôle manage_snapshots à un rôle IAM. Le rôle manage_snapshots doit disposer d'autorisations valides (IAM:PassRole) pour assumer le rôle IAM (TheSnapshotRole). Pour plus d'informations, consultez les Conditions préalables.

Pour mapper le rôle manage_snapshots à un rôle IAM, procédez comme suit :

1.    Ouvrez la console OpenSearch Service en tant qu'utilisateur principal.

2.    Choisissez Sécurité.

3.    Choisissez Rôles.

4.    Choisissez manage_snapshots comme rôle.

5.    ChoisissezUtilisateurs mappés.

6.    Choisissez Gérer le mappage.

7.    Sous Utilisateurs, ajoutez votre ARN d’utilisateur (par exemple : « arn:aws:iam::012345678912:user/username »).

8.    Enregistrez votre référentiel d'instantanés manuels.

illegal_state_exception

L'erreur suivante se produit lorsque vous utilisez le compartiment Amazon S3 pour plusieurs domaines afin de prendre des instantanés manuels :

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

Pour résoudre ce problème, créez un nouveau compartiment Amazon S3 et prenez un instantané manuel, ou effacez toutes les données du compartiment existant.

Repository_missing_exception

Avant de créer un instantané d'index manuel, vous devez enregistrer un référentiel d'instantanés manuels auprès d'OpenSearch Service. Vous devez également configurer votre rôle IAM (TheSnapshotRole) pour qu'il fonctionne avec Amazon S3.

Si vous n'avez pas enregistré votre référentiel d'instantanés avant de créer un instantané manuel, ou si vous utilisez un nom de référentiel incorrect, vous recevez le message d'erreur suivant :

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

Pour résoudre cette erreur, assurez-vous que vous respectez les conditions préalables pour les instantanés manuels. Assurez-vous également qu'il n'y a pas de fautes de frappe dans le nom du référentiel.

Concurrent_snapshot_execution_exception

Si un instantané est en cours, le message d'erreur suivant s'affiche lorsque vous essayez de prendre un autre instantané :

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

Pour vérifier si un autre instantané est en cours, exécutez la commande suivante :

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

Si un instantané est déjà en cours, attendez que l'instantané actuel soit terminé. Ou, si vous pensez que votre instantané est bloqué, consultez votre historique d’instantanés horaires. Pour plus d'informations, consultez Pourquoi m’est-il impossible de supprimer un index ou de mettre à niveau mon cluster OpenSearch Service ?

Snapshot_restore_exception

Si vous essayez de migrer des données d'un cluster sur site vers un domaine OpenSearch Service, vous risquez de rencontrer l'erreur d'exception suivante :

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

Ce message d'erreur apparaît lorsqu'un instantané que vous prenez sur un cluster existant s'exécute sur une version d'Elasticsearch différente de celle d'OpenSearch Service. Si votre cluster s'exécute sur une version d'Elasticsearch antérieure à OpenSearch Service, mettez à niveau votre version d'Elasticsearch. Vous pouvez également utiliser l'API de réindexation à distance pour migrer vos index.

Si le FGAC du domaine est activé et que vous essayez de restaurer tous les index à partir de l'instantané, vous pouvez recevoir une erreur 403 similaire à la suivante :

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

Pour résoudre cette erreur, excluez les indices de sécurité similaires aux suivants :

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

Si aucune relation d’approbation n'a été établie pour le rôle IAM associé à votre instantané manuel pour « es.amazonaws.com », vous recevez l'erreur d'exception suivante :

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

Avec les instantanés OpenSearch Service, un rôle interne est créé (tel que arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Ce rôle interne assume le rôle IAM associé à l'instantané manuel, puis exécute toutes les opérations requises.

Pour résoudre l'erreur d'exception liée au jeton de sécurité, veillez à spécifier le rôle IAM associé à l'instantané manuel. Si aucun rôle IAM n'est associé à l'instantané manuel, créez-en un. Pour plus d'informations, consultez les Conditions préalables.

Vérifiez également la relation d’approbation pour le rôle IAM associé à l'instantané manuel. La relation d’approbation pour le rôle doit spécifier OpenSearch Service dans l'instruction principale, comme celle-ci :

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

État de l'instantané PARTIEL

Un instantané passe à l'état « PARTIEL » pour les raisons suivantes :

Un instantané partiel indique que les données d'une partition ne peuvent pas être stockées. Vous pouvez toujours restaurer des données à partir d'un instantané partiel, mais vous devez utiliser des instantanés antérieurs pour restaurer les indices manquants. Pour vérifier si votre cluster est entré dans un état « PARTIEL », consultez votre historique d’instantanés. Pour plus d'informations, consultez la section Restauration des instantanés.

Problème lié aux classes de stockage Amazon S3 Glacier

Si vous stockez un instantané restauré dans l'une des classes de stockage S3 Glacier, n'appliquez pas de règle Amazon S3 Glacier Lifecycle au compartiment. Les instantanés manuels ne prennent pas en charge les classes de stockage S3 Glacier. Par conséquent, si vous appliquez une politique Amazon S3 Glacier Lifecycle au compartiment S3, vous devez replacer tous les objets faisant l'objet d'une transition.

Après avoir replacé les objets dans une classe de stockage Amazon S3 standard, vous pouvez les restaurer à partir de ces instantanés. Pour plus d'informations, consultez les Conditions préalables.

Informations connexes

Comment puis-je résoudre l'erreur « cannot restore index [.kibana] » (Impossible de restaurer l'index [.kibana]) dans Amazon OpenSearch Service ?

Prendre des instantanés manuels

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an