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

Date de la dernière mise à jour : 20/05/2021

Je souhaite restaurer un instantané manuel de mon cluster Amazon Elasticsearch Service (Amazon ES). Cependant, je reçois une erreur lorsque j'essaie d'enregistrer un référentiel ou d'accéder à un référentiel enregistré. D'où vient le problème et comment le résoudre ?

Brève description

Pour migrer les données à partir d'un instantané manuel vers Amazon ES, procédez comme suit :

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

2.    Enregistrez le compartiment Amazon S3 avec votre cluster source Amazon ES.

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

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

5.    Restaurez l'instantané manuel sur le cluster de destination dans Amazon ES.

À défaut, vous risquez de rencontrer l'un des problèmes suivants :

  • Erreur 403 Unauthorized
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • État de l'instantané « PARTIEL »
  • Problème de classe de stockage Amazon S3 Glacier

Résolution

Erreur 403 Unauthorized

Si vous avez activé le contrôle précis des accès (FGAC) sur votre domaine Amazon ES, 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, assurez-vous de spécifier un paramètre username:password chaque fois que vous prenez un instantané manuel :

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

Remarque : vous devez être un super-utilisateur pour activer un contrôle précis des accès pour votre domaine Amazon ES. Vous pouvez utiliser votre nom de super-utilisateur et votre mot de passe ou 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 signer les requêtes HTTP à l'aide de sigv4. Pour plus d'informations sur l'utilisation de rôles IAM et du contrôle précis des accès, voir Création et gestion des domaines Amazon Elasticsearch 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 des autorisations appropriées (IAM:PassRole) pour assumer le rôle IAM (TheSnapshotRole). Pour plus d'informations, consultez Conditions préalables aux instantanés manuels.

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

1.    Ouvrez la console Kibana.

2.    Connectez-vous en tant qu'utilisateur principal.

3.    Choisissez Security (Sécurité).

4.    Choisissez Roles (Rôles).

5.    Choisissez manage_snapshots comme rôle.

6.    Choisissez Mapped users (Utilisateurs mappés).

7.    Choisissez Gérer le mappage.

8.    Sous Utilisateurs, ajoutez l'ARN de votre utilisateur (par exemple : « arn:aws:iam።012345678912:user/username »).

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

Repository_missing_exception

Avant de prendre un instantané d'index manuel, vous devez enregistrer un référentiel d'instantanés manuels auprès d'Amazon ES. Votre rôle IAM (TheSnapshotRole) doit également être configuré pour fonctionner avec Amazon S3.

Si vous n'avez pas enregistré votre référentiel d'instantané avant de prendre un instantané manuel ou si vous utilisez un nom de référentiel incorrect, l'erreur suivante s'affiche :

{"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 répondez aux conditions préalables des instantanés manuels. Vérifiez aussi les éventuelles 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é :

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

Pour vérifier s'il existe un autre instantané en cours, exécutez la commande suivante :

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

Si un instantané est déjà en cours, attendez qu'il se termine. Ou, si vous pensez que votre instantané est bloqué, vérifiez votre historique d'instantanés horaires. Pour plus d'informations, consultez Comment résoudre l'erreur « L'opération précédente de création d'instantané n'est pas terminée » lors de la mise à niveau de mon cluster Amazon Elasticsearch Service ?

Snapshot_restore_exception

Si vous essayez de transférer des données d'un cluster Elasticsearch sur site vers un domaine Amazon ES, vous pouvez rencontrer l'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é pris sur un cluster existant s'exécute sur une version d'Elasticsearch différente de celle d'Amazon ES. Si votre cluster fonctionne sur une version d'Elasticsearch antérieure à celle d'Amazon ES, envisagez de mettre à niveau votre version d'Elasticsearch. Vous pouvez également utiliser l'API de réindexation distante pour migrer vos index.

a_w_s_security_token_service_exception

Si le rôle IAM associé à votre instantané manuel n'a pas de relation d'approbation établie pour « es.amazonaws.com », vous recevez l'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 Amazon ES, 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 joue le rôle IAM associé à l'instantané manuel, puis effectue toutes les opérations requises.

Pour résoudre l'exception de jeton de sécurité, assurez-vous de spécifier le rôle IAM associé à l'instantané manuel. Si vous n'avez pas de rôle IAM associé à l'instantané manuel, vous devez alors en créer un. Pour plus d'informations, consultez Conditions préalables aux instantanés manuels.

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 Amazon ES dans l'instruction principale, comme ceci :

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

État d'instantané PARTIEL

Un instantané entre dans un état « PARTIEL » pour les raisons suivantes :

Un instantané partiel indique que les données provenant d'une partition n'ont pas pu ê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 index manquants. Pour vérifier si votre cluster est entré dans un état « PARTIEL », vérifiez votre historique d'instantanés. Pour plus d'informations, voir Restauration des instantanés.

Problème de classe de stockage Amazon S3 Glacier

Si vous stockez un instantané restauré dans la classe de stockage Amazon Simple Storage Service Glacier, évitez d'appliquer une règle de cycle de vie Amazon S3 Glacier au compartiment. Les instantanés manuels ne prennent pas en charge la classe de stockage Amazon S3 Glacier. Par conséquent, si vous appliquez une stratégie de cycle de vie Amazon S3 Glacier au compartiment S3, vous devez retourner tous les objets en transition à leur emplacement initial.

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


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?