Comment résoudre l'erreur QueueDoesNotExist lorsque je passe des appels d'API à ma file d'attente Amazon SQS ?

Lecture de 5 minute(s)
0

J'ai effectué des appels d'API vers ma file d'attente Amazon Simple Queue Service (Amazon SQS) et l'erreur « QueueDoesNotExist » s’est produite.

Résolution

Certains appels d'API Amazon SQS comme GetQueueAttributes, [SendMessage, et DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html), peuvent provoquer l'erreur QueueDoesNotExist. Pour résoudre cette erreur, procédez comme suit :

Vérifiez que l'URL de la file d'attente est correcte

Vérifiez que l'URL de la file d'attente fournie dans la demande est correcte et ne contient aucune faute de frappe.

Important : si la file d'attente de destination est de type premier entré, premier sorti (FIFO), ajoutez le suffixe .fifo à l'URL de la file d'attente.

Définir la bonne région

L'erreur QueueDoesNotExist s'affiche lorsqu'une demande est envoyée à la mauvaise région AWS. Le kit SDK et l'interface de la ligne de commande AWS (AWS CLI) n'obtiennent pas la région de destination à partir de l'URL de la file d'attente. Au contraire, la configuration du client définit la région.

Avant d'effectuer un appel d'API, définissez la bonne région sur le mode client Amazon SQS. Vérifiez la configuration client Amazon SQS pour vous assurer que vous avez configuré la bonne région sur le client. Lorsque vous ne configurez pas de région sur le client, le kit SDK ou l'AWS CLI choisit la région dans le fichier de configuration ou dans la variable d'environnement. Si le kit SDK ne trouve aucune région dans le fichier de configuration, il définit la région sur us-east-1 par défaut.

Pour plus d'informations, consultez Région AWS, Configuration et paramètres du fichier d'informations d'identification.

Si AWS CloudTrail prend en charge l'échec de l'appel d'API, vérifiez toutes les régions du compte AWS pour détecter l'opération Amazon SQS défectueuse. Cela vous permet de déterminer si la région est à l'origine du problème.

Vous pouvez également activer le journal de débogage sur le kit SDK ou sur l'AWS CLI pour vérifier la région de la demande. Les journaux de débogage indiquent l'hôte de destination de la demande, par exemple : Hôte : sqs.us-east-1.amazonaws.com.

Voici des ressources supplémentaires pour le journal de débogage :

Remarque : pour valider la région, le compte ou le nom de la file d'attente, assurez-vous de journaliser tous les détails de la file d'attente.

Rechercher une file d'attente récemment supprimée

Une erreur QueueDoesNotExist peut s’afficher lorsqu'une file d'attente a récemment été supprimée. Identifiez l'horodatage de l'échec de l'appel d'API, puis vérifiez si CloudTrail n'a pas effectué d'opérations PurgeQueue au moment de l'erreur. Le processus de suppression des messages prend jusqu'à 60 secondes.

L'erreur peut également se produire lorsque la file d'attente fait partie d'une pile de déploiement AWS CloudFormation ou d'une autre pile de déploiement et qu'elle est supprimée. Les mises à jour ou les suppressions de piles peuvent provoquer la suppression et la recréation de la file d'attente. Si vous faites l'appel d'API à la file d'attente au moment de la suppression, la demande peut échouer. Vérifiez la présence d'opérations DeleteQueue dans CloudTrail au moment où l'erreur s'est produite.

Spécifiez le numéro de compte de la file d'attente de destination lorsque vous utilisez GetQueueUrl

Pour les appels d'API, le kit SDK ou l'AWS CLI prend généralement le numéro de compte de la file d'attente de destination à partir de l'URL de la file d'attente. Cependant, l'appel d'API GetQueueUrl ne fournit pas de compte de file d'attente dans la demande. Ainsi, la demande s’effectue par défaut sur le compte de l'appelant.

Si la demande est destinée à une file d'attente entre comptes, vous devez spécifier le numéro de compte de la file d'attente de destination en tant que paramètre QueueOwnerAWSAccountId de l'appel d'API.

Supprimer les messages déplacés vers une DLQ dans le délai imparti

Pour les files d'attente SQS standard configurées avec une file d'attente de lettres mortes (DLQ), les messages sont déplacés vers la DLQ après d’autres tentatives. Une fois le message déplacé vers la DLQ, l'erreur QueueDoesNotExist peut se produire lorsque vous effectuez une opération DeleteMessage avec un ancien ReceiptHandle de la file d'attente principale. Vous devez supprimer les messages dans la fenêtre VisibilityTimeout configurée.

Assurez-vous que le demandeur dispose des autorisations IAM requises

Si l'utilisateur ou le rôle AWS Identity and Access Management (IAM) demandeur ne dispose pas des autorisations requises, le message d'erreur suivant peut s'afficher : « La file d'attente spécifiée n'existe pas ou vous n'y avez pas accès. »

Utilisez l'appel d'API GetCallerIdentity pour confirmer que l'entité IAM dispose des autorisations requises.

Exemple d'appel d'API GetCallerIdentity dans Boto3 Python :

import boto3
sts = boto3.client('sts')
print(sts.get_caller_identity())

Pour les exemples de politiques Amazon SQS, consultez Exemples de base des politiques Amazon SQS.

Pour plus d'informations sur les autorisations Amazon SQS, consultez la rubrique De quelles autorisations ai-je besoin pour accéder à une file d'attente Amazon SQS ?

Résoudre les problèmes à l’aide d’AWS Support

Si les étapes précédentes de résolution des problèmes ne fonctionnent pas, contactez AWS Support. Incluez le RequestId et l'horodatage avec le fuseau horaire des appels d'API ayant échoué.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois