Comment résoudre l'erreur « Prior snapshot operation has not yet completed » (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 ?

Date de la dernière mise à jour : 10/09/2020

Je souhaite mettre à niveau mon cluster Amazon Elasticsearch Service (Amazon ES), mais cette opération échoue et je reçois le message d'erreur « Prior snapshot operation has not yet completed » (L'opération précédente de création d'instantané n'est pas terminée). Comment résoudre ce problème ?

Brève description

Lors de la mise à niveau d'un cluster Amazon ES le cluster peut générer une erreur pour les raisons suivantes :

  • La création d'instantané est déjà en cours.
  • La création d'instantané est bloquée.
  • L'instantané en cours de création est associé à un cluster dont l'état est rouge.
  • Le délai d'expiration a été atteint, ou la création d'instantané a échoué.

Pour plus d'informations sur l'échec de mise à niveau de clusters Amazon ES, consultez la section Dépannage de la mise à niveau.

Résolution

La création d'instantané est déjà en cours

Remarque : si vous recevez le message d'erreur « Prior snapshot operation has not yet completed » (L'opération précédente de création d'instantané n'est pas terminée), cela signifie qu'une création d'instantané est déjà en cours.

Pour les domaines chiffrés, utilisez la syntaxe suivante pour vérifier si un instantané automatique est déjà en cours de création :

curl -X GET  'https://es_endpoint/_snapshot/cs-automated-enc/_status'

Pour les domaines non chiffrés, utilisez la syntaxe suivante pour vérifier si un instantané automatique est déjà en cours de création :

curl -X GET 'https://es_endpoint/_snapshot/cs-automated/_status'

Si aucune création d'instantané n'est en cours d'exécution, le résultat suivant est renvoyé :

{  "snapshots" : [ ]}

Les crochets vides indiquent que vous pouvez effectuer une mise à niveau en toute sécurité. Si Amazon ES ne parvient pas à vérifier si un instantané est en cours de création, la mise à niveau échoue.

La création d'instantané est bloquée

Utilisez la commande suivante pour vérifier les heures de début et de fin de vos instantanés horaires :

curl -X GET  'https://es_endpoint/_cat/snapshots/cs-automated?v&s=id'

Imprimez ensuite les heures de début à l'aide d'une sortie cURL redirigée vers la commande awk :

curl -X GET  'https://es_endpoint/_cat/snapshots/cs-automated?v&s=id' |awk -F" " ' { print $4  } '

La sortie indique l'heure à laquelle les instantanés horaires ont été créés. Par exemple, la sortie suivante indique que la sortie s'exécute vers la 52e minute de chaque heure :

22:51:11
23:51:18
00:51:19
01:51:14
02:51:16
03:51:18
04:51:16
05:51:11

Vérifiez ensuite l'éligibilité du cluster Amazon ES à la mise à niveau. Utilisez l'API permettant de consulter l'état d'un instantané pour vérifier si l'instantané est terminé. L'API renvoie un ensemble vide lorsque l'instantané a été créé. Ces données peuvent changer une fois que des modifications sont apportées à la configuration. L'instantané ne peut donc pas être utilisé pour planifier les tâches prévues.

Si le statut est en cours et que cet état ne change pas pendant un certain temps, la création d'instantané est probablement bloquée. Il en va de même avec les instantanés ayant été interrompus, dans la mesure où ceci peut empêcher la création d'autres instantanés. Si l'état du cluster est rouge ou qu’il existe un bloc d'écriture, éliminez l’état ou le bloc pour résoudre le problème.

Important : ne vérifiez pas l'éligibilité du cluster à la mise à niveau tant que la création de l'instantané n'est pas terminée.

L'instantané en cours de création est associé à un cluster dont l'état est rouge.

Pour lister uniquement les noms de référentiel enregistrés dans votre domaine, utilisez la commande suivante :

curl -XGET "http://es_endpoint/_cat/repositories?v&h=id"

Pour répertorier les noms et types de référentiel, ainsi que les autres paramètres enregistrés sur votre domaine, utilisez la syntaxe suivante :

curl -XGET "http://es_endpoint/_snapshot?pretty"
curl -XGET "https://es_endpoint/_cluster/state/metadata"

Vérifiez si vous pouvez lister les instantanés dans chacun des référentiels, à l'exception des référentiels cs-automated et cs-automatic-enc. Si vous disposez de plusieurs référentiels, utilisez un script bash similaire à celui-ci :

#!/bin/bash
repos=$(curl -s https://es_endpoint/_cat/repositories 2>&1 |grep  -v "cs-automated" | awk '{print $1}')

for i in $repos; do
echo "Snapshots in ... :" $i >>/tmp/snapshot
`curl -s -XGET https://es_endpoint/_cat/snapshots/$i >> /tmp/snapshot`
\echo "done..."
done

Important : vous ne pouvez pas supprimer manuellement les instantanés bloqués dans les référentiels cs-automated et cs-automatic-enc.

Pour afficher la sortie dans le dossier /tmp/snapshot, utilisez la syntaxe suivante :

cat /tmp/snapshot

La commande renvoie une réponse de ce type :

Snapshots in ... : snapshot-manual-repo
axa_snapshot-1557497454881 SUCCESS 1557639400 05:36:40 1557639405 05:36:45  4.6s  7 31 0 31
2019-05-15                 SUCCESS 1560503610 09:13:30 1560503622 09:13:42 11.8s  4 16 0 16
epoch_test                 SUCCESS 1569151317 11:21:57 1569151335 11:22:15 18.1s 15 56 0 56

Le message d'erreur renvoyé indique que le compartiment Amazon Simple Storage (Amazon S3) a déjà été supprimé et enregistré en tant que référentiel d'instantanés :

Snapshots in ... : snapshot-manual-repo
{"error":{"root_cause":[{"type":n","reason":"[snapshot-manual-repo] could not read repository data from index blob"}],"type":"repository_exception","reason":"[snapshot-manual-repo] could not read repository data from index blob","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::999999999999:assumed-role/cp-sts-grant-role/swift-us-east-1-prod-666666666666 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::666666666666:policy/my-manual-es-snapshot-creator-policy (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 6b9374fx-11xy-11yz-ff66-918z9bb08193)"}}},"status":500}

Vérifiez que le référentiel d'instantanés manuels a été supprimé du compartiment Amazon S3 :

aws s3 ls | grep -i "snapshot-manual-repo"

Remarque : remplacez snapshot-manual-repo par le nom de votre compartiment.

Supprimez ensuite le référentiel d'Amazon ES :

curl -XDELETE "https://es_endpoint/_snapshot/snapshot-example-manual-repo"

Le délai d'expiration a été atteint, ou la création d'instantané a échoué

Vérifiez que vous pouvez créer manuellement un instantané. Si vous obtenez le message d'erreur Impossible de prendre un instantané manuel, appelez l'API _cat/snapshots :

curl -XGET/_cat/snapshots/s3_repository

Remarque : remplacez s3_repository par le nom de votre compartiment S3.

La syntaxe ci-dessus permet de vérifier la durée d'exécution de l'instantané actuel. Si cette durée semble normale, patientez jusqu'à ce qu'elle se soit écoulée, puis réessayez.

Ensuite, vérifiez l'état de votre cluster :

curl -XGET "https://es_endpoint/_cluster/health?pretty"

Si l’état du cluster est rouge, éliminez préalablement cet état. Si le cluster réalloue ou initialise des partitions, attendez la fin de l’opération avant de configurer des stratégies d’accès. Notez Sachez que la réallocation de partitions peut avoir une incidence signifie sur les performances de calcul de votre cluster. Pour plus d'informations sur la résolution des problèmes lié à un cluster ayant l'état rouge, consultez la section État de cluster rouge.