Como soluciono o erro QueueDoesNotExist ao fazer chamadas de API para minha fila do Amazon SQS?

5 minuto de leitura
0

Fiz chamadas de API para minha fila do Amazon Simple Queue Service (Amazon SQS) e recebi o erro “QueueDoesNotExist”.

Resolução

Algumas chamadas de API do Amazon SQS, como GetQueueAttributes, SendMessage e DeleteMessage podem causar o erro QueueDoesNotExist. Para solucionar esse erro, siga estas etapas.

Verifique se o URL da fila está correto.

Verifique se o URL da fila fornecido na solicitação está correto e não contém erros de digitação.

Importante: se o tipo de fila de destino for First-In-First-Out (FIFO), você deverá acrescentar o sufixo .fifo ao URL da fila.

Definir a região correta

Você recebe o erro QueueDoesNotExist quando uma solicitação é feita para a região da AWS incorreta. O SDK e a AWS Command Line Interface (AWS CLI) não obtêm a região de destino do URL da fila. Em vez disso, a configuração do cliente define a Região.

Antes de fazer uma chamada de API, defina a região correta no cliente Amazon SQS. Revise a configuração do cliente Amazon SQS para confirmar se configurou a região correta no cliente. Quando você não configura uma região no cliente, o SDK ou a AWS CLI escolhe a região no arquivo de configuração ou na variável de ambiente. Ao não encontrar uma região no arquivo de configuração, o SDK define a região como us-east-1 por padrão.

Para obter mais informações, consulte Região da AWS e Configuração e definições do arquivo de credenciais.

Se o AWS CloudTrail suporta a falha na chamada de API, verifique todas as regiões na conta da AWS em busca da falha na operação do Amazon SQS. Isso ajuda a determinar se a região é a causa do problema.

Você também pode ativar o log de depuração no SDK ou na AWS CLI para verificar a região da solicitação. Os logs de depuração mostram o host de destino da solicitação, por exemplo: Host: sqs.us-east-1.amazonaws.com.

Estes são recursos adicionais de log de depuração:

Observação: para validar a região, a conta ou o nome da fila, certifique-se de registrar todos os detalhes da fila.

Verifique se há uma fila excluída recentemente

Se uma fila tiver sido excluída recentemente, você poderá receber um erro QueueDoesNotExist. Identifique a data e a hora da falha na chamada da API e depois verifique se há alguma operação de PurgeQueue no CloudTrail no momento do erro. O processo de exclusão da mensagem leva até 60 segundos.

O erro também pode ocorrer quando a fila faz parte de um AWS CloudFormation ou de outra pilha de implantação e a fila for excluída. As atualizações ou exclusões da pilha podem fazer com que a fila seja excluída e recriada. Se você fizer a chamada de API para a fila no momento da exclusão, a solicitação poderá falhar. Verifique se há alguma operação DeleteQueue no CloudTrail no momento do erro.

Especifique o número da conta da fila de destino ao usar GetQueueUrl

Para chamadas de API, o SDK ou a AWS CLI geralmente obtém o número da conta da fila de destino do URL da fila. No entanto, a chamada da API GetQueueUrl não fornece uma conta de fila na solicitação, então a solicitação é feita na conta do chamador por padrão.

Se a solicitação for destinada a uma fila entre contas, você deverá especificar o número da conta da fila de destino como o parâmetro QueueOwnerAWSAccountId da chamada de API.

Exclua mensagens que são movidas para uma DLQ dentro da janela de tempo limite

Para filas SQS padrão configuradas com uma fila de mensagens não entregues (DLQ), as mensagens são movidas para a DLQ após novas tentativas. Depois que a mensagem é movida para a DLQ, o erro QueueDoesNotExist pode ocorrer quando você executa uma operação DeleteMessage com um ReceiptHandle antigo da fila principal. Você deve excluir mensagens na janela VisibilityTimeout configurada.

Certifique-se de que o solicitante tenha as permissões necessárias do IAM

Se o usuário ou o perfil solicitante do AWS Identity and Access Management (IAM) não tiver as permissões necessárias, você poderá receber o seguinte erro: “The specified queue does not exist or you do not have access to it.”

Use a chamada da API GetCallerIdentity para confirmar se a entidade do IAM tem as permissões necessárias.

Exemplo de chamada da API GetCallerIdentity em Boto3 Python:

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

Para obter exemplos de políticas do Amazon SQS, consulte Exemplos básicos de políticas do Amazon SQS.

Para obter mais informações sobre as permissões do Amazon SQS, consulte Quais permissões preciso ter para acessar uma fila do Amazon SQS?

Solucione problemas com o AWS Support

Se as etapas de solução de problemas anteriores não resolverem seu problema, entre em contato com o AWS Support. Inclua o RequestId e a data e hora com o fuso horário das chamadas de API que falharam.

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses