Comment puis-je résoudre les erreurs QueueDoesNotExist lorsque j'effectue des appels d'API vers ma file d'attente Amazon SQS ?

Date de la dernière mise à jour : 23/03/2022

Lorsque j'effectue des appels d'API vers ma file d'attente Amazon Simple Queue Service (Amazon SQS), je reçois une erreur QueueDoesNotExist similaire à la suivante : « The specified queue does not exist for this wsdl version » (La file d'attente spécifiée n'existe pas pour cette version de wsdl). Pourquoi est-ce que je reçois cette erreur et comment résoudre le problème ?

Résolution

Les erreurs QueueDoesNotExist peuvent résulter de divers appels d'API Amazon SQS, notamment GetQueueAttributes, SendMessage et DeleteMessage. Pour résoudre cette erreur, examinez les causes possibles et les étapes de résolution suivantes :

URL de file d'attente incorrecte

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

Important : si le type de file d'attente de destination est FIFO, alors vous devez ajouter le suffixe .fifo à l'URL de file d'attente.

Région incorrecte

Une exception QueueDoesNotExist est renvoyée lorsque la demande est adressée à la région AWS incorrecte. Le kit SDK et AWS Command Line Interface (AWS CLI) ne récupèrent pas la région de destination dans l'URL de file d'attente. Au lieu de cela, la région est définie par la configuration du client.

Vous devez correctement configurer la région sur le client Amazon SQS avant d'effectuer un appel d'API. Vérifiez la configuration du client Amazon SQS pour confirmer que la région correcte est configurée sur le client. Si une région n'est pas configurée sur le client, le kit SDK ou l'AWS CLI choisit la région dans le fichier de configuration ou la variable d'environnement. Si aucune région n'est trouvée dans le fichier de configuration, le kit SDK définit la région sur us-east-1 par défaut.

Si l'appel d'API qui a échoué est pris en charge par AWS CloudTrail, vérifiez toutes les régions du compte client pour trouver l'opération Amazon SQS qui a échoué. Vérifier toutes les régions peut aider à déterminer si la région est à l'origine du problème.

Vous pouvez également vérifier la région de la demande en activant le journal de débogage sur le kit SDK ou l'AWS CLI. Les journaux de débogage indiquent l'hôte de destination de la demande.

Exemple : hôte : sqs.us-east-1.amazonaws.com

File d'attente récemment purgée ou supprimée

Vous pouvez recevoir une erreur QueueDoesNotExist temporaire si la file d'attente a récemment été purgée. Identifiez l'horodatage de l'appel d'API qui a échoué, puis vérifiez CloudTrail pour toute opération PurgeQueue au moment de l'erreur.

L'erreur peut également se produire lorsque la file d'attente est supprimée si celle-ci fait partie d'une pile de déploiement AWS CloudFormation ou équivalente. Les mises à jour ou la suppression d'une pile peuvent entraîner la suppression et la recréation de la file d'attente. Si l'appel d'API est effectué dans la file d'attente pendant la suppression, la demande peut échouer avec une erreur QueueDoesNotExist. Vérifiez CloudTrail pour trouver toute opération DeleteQueue au moment de l'erreur.

GetQueueUrl inter-comptes

Pour les appels d'API, le kit SDK ou l'AWS CLI obtient généralement le numéro de compte de la file d'attente de destination à partir de l'URL de file d'attente. Toutefois, l'appel d'API GetQueueUrl ne fournit pas le compte AWS de la file d'attente dans la demande. Cela signifie que, par défaut, la demande est effectuée sur le compte de l'appelant. Si la demande est destinée à une file d'attente inter-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.

Message déplacé vers une file d'attente de lettres mortes

Pour les files d'attente SQS standard, lorsqu'une file d'attente de lettres mortes (DLQ) est configurée, les messages sont déplacés vers la DLQ après de nouvelles tentatives. Des erreurs QueueDoesNotExist peuvent se produire si vous effectuez une opération DeleteMessage à l'aide d'un ancien ReceiptHandle de la file d'attente principale après le déplacement du message vers la DLQ. Vous devez supprimer des messages dans la fenêtre VisibilityTimeout configurée.

Autorisations insuffisantes

Vous pouvez recevoir l'erreur QueueDoesNotExist lors de l'envoi de l'API GetQueueUrl si votre utilisateur ou votre rôle IAM ne dispose pas d'autorisations suffisantes. Pour exécuter la demande, l'utilisateur ou le rôle IAM doit disposer des autorisations GetQueueUrl pour la file d'attente SQS sur laquelle vous exécutez la demande.

Pour plus d'informations, consultez GetQueueUrl.

Dépannage supplémentaire

Si vous contactez AWS Support pour une résolution de problèmes supplémentaires, veillez à identifier le RequestId et l'horodatage des appels d'API qui ont échoué.


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


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