¿Cómo se pueden solucionar los errores QueueDoesNotExist al realizar llamadas de la API a la cola de Amazon SQS?

Última actualización: 23-03-2022

Al realizar llamadas de la API a la cola de Amazon Simple Queue Service (Amazon SQS), recibo un error QueueDoesNotExist similar al siguiente: “La cola especificada no existe para esta versión wsdl”. ¿Por qué aparece este error y cómo se puede solucionar?

Resolución

Los errores QueueDoesNotExist pueden ser el resultado de varias llamadas a la API de Amazon SQS, incluidas GetQueueAttributes, SendMessage y DeleteMessage. Para solucionar este error, consulte las siguientes causas posibles y los pasos de resolución:

URL de cola incorrecta

Compruebe que la URL de cola proporcionada en la solicitud sea correcta y no contenga errores tipográficos.

Importante: Si el tipo de cola de destino es FIFO, debe agregar el sufijo .fifo a la URL de cola.

Región incorrecta

Se devuelve una excepción QueueDoesNotExist cuando la solicitud se realiza en la región de AWS incorrecta. El kit de desarrollo de software (SDK) y la AWS Command Line Interface (AWS CLI) no detectan la región de destino de la URL de cola. En cambio, la configuración del cliente establece la región.

Debe configurar la región correctamente en el cliente de Amazon SQS antes de realizar una llamada a la API. Revise la configuración del cliente de Amazon SQS para confirmar que la región correcta está configurada en el cliente. Si una región no está configurada en el cliente, el SDK o la AWS CLI eligen la región del archivo de configuración o de la variable del entorno. Si no se encuentra una región en el archivo de configuración, el SDK establece la región en us-east-1 de forma predeterminada.

Si AWS CloudTrail admite la llamada a la API fallida, compruebe todas las regiones de la cuenta del cliente para ver si la operación de Amazon SQS ha fallado. La verificación de todas las regiones puede ayudar a determinar si la región es la causa del problema.

También puede verificar la región de la solicitud al activar el registro de depuración en el SDK o la AWS CLI. Los registros de depuración muestran el host de destino de la solicitud.

Ejemplo: Host: sqs.us-east-1.amazonaws.com.

La cola se ha purgado o eliminado recientemente

Es posible que reciba temporalmente un error QueueDoesNotExist si la cola se ha purgado recientemente. Identifique la marca temporal de la llamada a la API fallida y, a continuación, revise CloudTrail para detectar cualquier operación PurgeQueue que se haya realizado cerca del momento del error.

El error también puede producirse cuando se elimina la cola si la cola forma parte de una pila de implementación de AWS CloudFormation o similar. Las actualizaciones o la eliminación de una pila pueden hacer que la cola se borre y se vuelva a crear. Si la llamada a la API se realiza a la cola durante la eliminación, la solicitud puede fallar con un error QueueDoesNotExist. Revise CloudTrail para detectar cualquier operación DeleteQueue que se haya realizado durante el momento del error.

GetQueueUrl entre cuentas

En el caso de las llamadas a la API, el SDK o la AWS CLI suelen tomar el número de cuenta de la cola de destino de la URL de cola. Sin embargo, la llamada a la API GetQueueUrl no proporciona la cuenta de AWS de una cola en la solicitud. Esto significa que, de forma predeterminada, la solicitud se realiza a la cuenta de la persona que llama. Si la solicitud está destinada a una cola entre cuentas, debe especificar el número de cuenta de la cola de destino como parámetro QueueOwnerAWSAccountId de llamada a la API.

El mensaje se movió a una cola de mensajes fallidos

Para las colas estándar de SQS, cuando se configura una cola de mensajes fallidos (DLQ), los mensajes se mueven a la DLQ después de los reintentos. Pueden producirse errores de QueueDoesNotExist si realiza una operación DeleteMessage con un ReceiptHandle antiguo de la cola principal después de mover el mensaje a la DLQ. Debe eliminar los mensajes en la ventana VisibilityTimeout configurada.

Permisos insuficientes

Puede recibir el mensaje QueueDoesNotExist al enviar la API GetQueueUrl si el usuario o rol de IAM no tiene suficientes permisos. Para ejecutar la consulta, el usuario o rol de IAM debe tener permisos de GetQueueUrl para la cola de SQS con respecto a la cual se ejecuta la consulta.

Para obtener más información, consulte GetQueueURL.

Soluciones de problemas adicionales

Si contacta con AWS Support para obtener soluciones de problemas adicionales, asegúrese de identificar el RequestId y la marca temporal de las llamadas a la API fallidas.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?