In che modo posso risolvere l'errore QueueDoesNotExist quando effettuo chiamate API alla mia coda Amazon SQS?

4 minuti di lettura
0

Ho effettuato chiamate API alla mia coda Amazon Simple Queue Service (Amazon SQS) e ho ricevuto un errore "QueueDoesNotExist".

Risoluzione

Alcune chiamate API di Amazon SQS, come GetQueueAttributes, SendMessage e DeleteMessage, possono causare l'errore QueueDoesNotExist. Per risolvere questo errore, segui questi passaggi.

Verifica che l'URL della coda sia corretto

Verifica che l'URL della coda fornito nella richiesta sia corretto e non contenga errori di battitura.

Importante: se il tipo di coda di destinazione è First-In First-Out (FIFO), è necessario aggiungere il suffisso .fifo all'URL della coda.

Imposta la regione corretta

Si ottiene l'errore QueueDoesNotExist quando viene effettuata una richiesta alla Regione AWS errata. L'SDK e l'interfaccia a riga di comando di AWS (AWS CLI) non ottengono la regione di destinazione dall'URL della coda. Invece, è la configurazione del client a impostare la regione.

Prima di effettuare una chiamata API, imposta la regione corretta sul client Amazon SQS. Esamina la configurazione del client Amazon SQS per confermare di aver configurato la regione corretta sul client. Se non configuri una regione sul client, l'SDK o AWS CLI sceglieranno la regione dal file di configurazione o dalla variabile di ambiente. Quando l'SDK non trova una regione nel file di configurazione, la imposta su us-east-1 di default.

Per ulteriori informazioni, consulta la sezione Regione AWS e Impostazioni del file di configurazione e delle credenziali.

Se AWS CloudTrail supporta la chiamata API non riuscita, controlla tutte le regioni dell'account AWS per l'operazione Amazon SQS fallita. Questo aiuterà a determinare se la regione è la causa del problema.

Puoi anche attivare il log di debug sull'SDK o su AWS CLI per verificare la regione della richiesta. I log di debug mostrano l'host di destinazione per la richiesta, come ad esempio: Host: sqs.us-east-1.amazonaws.com.

Queste sono risorse aggiuntive per il log di debug:

Nota: per convalidare la regione, l'account o il nome della coda, assicurati di registrarne tutti i dettagli.

Verifica la presenza di una coda eliminata di recente

Potresti ricevere un errore QueueDoesNotExist quando una coda è stata eliminata di recente. Identifica il timestamp della chiamata API fallita, quindi controlla CloudTrail per eventuali operazioni PurgeQueue al momento dell'errore. Il processo di eliminazione dei messaggi richiede fino a 60 secondi.

L'errore può verificarsi anche quando la coda fa parte di uno stack AWS CloudFormation o di un altro stack di implementazione e la coda viene eliminata. Gli aggiornamenti o le eliminazioni degli stack possono causare l'eliminazione e la ricreazione della coda. Se effettui la chiamata API alla coda al momento dell'eliminazione, la richiesta può avere esito negativo. Controlla CloudTrail per eventuali operazioni DeleteQueue al momento dell'errore.

Specifica il numero dell'account della coda di destinazione quando utilizzi GetQueueUrl

Per le chiamate API, l'SDK o AWS CLI di solito prendono il numero dell'account della coda di destinazione dall'URL della coda. Tuttavia, la chiamata API GetQueueUrl non fornisce un account della coda nella richiesta, quindi per impostazione predefinita la richiesta viene effettuata sull'account del chiamante.

Se la richiesta è destinata a una coda multi-account, è necessario specificare il numero dell'account della coda di destinazione come parametro QueueOwnerAWSAccountId della chiamata API.

Elimina i messaggi che vengono spostati in una coda DLQ entro la finestra di timeout

Per le code SQS standard configurate con una coda DLQ, i messaggi vengono spostati nella coda DLQ dopo i tentativi. Dopo lo spostamento del messaggio nella coda DLQ, può verificarsi l'errore QueueDoesNotExist quando si esegue un'operazione DeleteMessage con un vecchio valore ReceiptHandle dalla coda principale. È necessario eliminare i messaggi all'interno della finestra configurata VisibilityTimeout.

Assicurati che il richiedente disponga delle autorizzazioni IAM richieste

Se l'utente o il ruolo AWS Identity and Access Management (IAM) richiedente non dispone delle autorizzazioni richieste, potresti ricevere il seguente errore: "La coda specificata non esiste o non è possibile accedervi".

Utilizza la chiamata API GetCallerIdentity per confermare che l'entità IAM dispone delle autorizzazioni richieste.

Esempio di chiamata API GetCallerIdentity in Boto3 Python:

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

Per gli esempi di policy di Amazon SQS, consulta la sezione Esempi basilari di policy di Amazon SQS.

Per ulteriori informazioni sulle autorizzazioni di Amazon SQS, consulta la sezione Quali autorizzazioni occorrono per accedere alla coda Amazon SQS?

Risolvi i problemi con il Supporto AWS

Se i passaggi precedenti non risolvono il problema, contatta il Supporto AWS. Includi RequestId e timestamp indicando il timezone delle chiamate API fallite.

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa