¿Cómo puedo solucionar el error «QueueDoesNotExist» cuando realizo llamadas a la API en relación con mi cola de Amazon SQS?

5 minutos de lectura
0

He realizado llamadas a la API en relación con mi cola de Amazon Simple Queue Service (Amazon SQS), pero se muestra el error «QueueDoesNotExist».

Solución

En Amazon SQS, algunas llamadas a la API, como GetQueueAttributes, SendMessage y DeleteMessage pueden provocar el error QueueDoesNotExist. Para solucionar este error, siga los pasos que se describen a continuación.

Comprobación de si la URL de la cola es correcta

Compruebe si la URL de la cola que se proporciona en la solicitud es correcta y no contiene errores tipográficos.

Importante: Si la cola de destino es del tipo FIFO (el primer elemento que entra es el primero que sale), añada el sufijo .fifo a la URL de la cola.

Configuración de la región correcta

El error QueueDoesNotExist se muestra cuando se realiza una solicitud a una región de AWS incorrecta. El SDK y la Interfaz de la línea de comandos de AWS (AWS CLI) no obtienen la región de destino a partir de la URL de la cola. En su lugar, la configuración del cliente establece la región.

Antes de realizar una llamada a la API, configure la región correcta en el cliente de Amazon SQS. Revise la configuración del cliente de Amazon SQS para confirmar si ha configurado la región correcta en el cliente. Si no configura ninguna región en el cliente, el SDK o AWS CLI elegirán la región del archivo de configuración o de la variable de entorno. Si el SDK no encuentra ninguna región en el archivo de configuración, establecerá la región us-east-1 de forma predeterminada.

Para obtener más información, consulte AWS Region y Opciones de los archivos de configuración y credenciales.

Si AWS CloudTrail admite la llamada a la API fallida, busque la operación fallida de Amazon SQS en todas las regiones de la cuenta de AWS. Esto ayuda a determinar si la región es la causa del problema.

También puede activar el registro de depuración en el SDK o AWS CLI para comprobar la región de la solicitud. Los registros de depuración muestran el host de destino de la solicitud, por ejemplo: Host: sqs.us-east-1.amazonaws.com.

Recursos adicionales del registro de depuración:

Nota: Para validar la región, la cuenta o el nombre de la cola, no olvide registrar todos los detalles de la cola.

Comprobación de si se ha eliminado alguna cola recientemente

Puede que el error QueueDoesNotExist se muestre porque se ha eliminado una cola recientemente. Identifique la marca temporal de la llamada fallida a la API y, a continuación, compruebe si había alguna operación PurgeQueue en CloudTrail en el momento en que se produjo el error. El proceso de eliminación del mensaje tarda 60 segundos como máximo.

El error también puede producirse cuando la cola forma parte de una pila de despliegue de AWS CloudFormation o de otro tipo, y se elimina la cola. Las actualizaciones o eliminaciones de la pila pueden provocar que la cola se elimine y se vuelva a crear. Si realiza la llamada a la API en relación con la cola en el momento de la eliminación, puede que la solicitud dé error. Compruebe si había operaciones DeleteQueue en CloudTrail en el momento en que se produjo el error.

Especificación del número de cuenta de la cola de destino cuando se utiliza GetQueueUrl

En el caso de las llamadas a la API, el SDK o AWS CLI suelen tomar el número de cuenta de la cola de destino de la URL de la cola. Sin embargo, la llamada a la API GetQueueUrl no proporciona la cuenta de una cola en la solicitud, por lo que la solicitud se envía de forma predeterminada a la cuenta desde la que se realiza la llamada.

Si la solicitud está destinada a una cola entre cuentas, debe especificar el número de la cuenta de la cola de destino como parámetro QueueOwnerAWSAccountID de la llamada a la API.

Eliminación de los mensajes movidos a una DLQ en el intervalo de tiempo de espera

En el caso de las colas SQS estándar configuradas con una cola de mensajes fallidos (DLQ), los mensajes se mueven a la DLQ después de varios reintentos. Una vez se ha movido el mensaje a la DLQ, se puede producir el error QueueDoesNotExist cuando se realiza la operación DeleteMessage con un valor anterior de ReceiptHandle de la cola principal. Elimine los mensajes dentro del intervalo VisibilityTimeout configurado.

Comprobación de si el solicitante tiene los permisos necesarios de IAM

Si el usuario o rol solicitante de AWS Identity and Access Management (IAM) no tiene los permisos necesarios, es posible que se muestre el siguiente error: «The specified queue does not exist or you do not have access to it».

Utilice la llamada a la API GetCallerIdentity para confirmar si la entidad de IAM cuenta con los permisos necesarios.

Ejemplo de la llamada a la API GetCallerIdentity en Boto3 de Python:

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

Para ver ejemplos de políticas de Amazon SQS, consulte Basic examples of Amazon SQS policies.

Para obtener más información sobre los permisos de Amazon SQS, consulte ¿Qué permisos necesito para acceder a una cola de Amazon SQS?

Solución de problemas con AWS Support

Si los pasos anteriores no resuelven el problema, póngase en contacto con AWS Support. Incluya los valores RequestId y timestamp con timezone de las llamadas fallidas a la API.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses