Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Come posso risolvere l'errore "The specified queue does not exist or you do not have access to it." quando eseguo il mio job AWS Glue per inviare messaggi ad Amazon SQS in un'altra Regione?
Ho creato un job di estrazione, trasformazione e caricamento (ETL) di AWS Glue per inviare messaggi a una coda Amazon Simple Queue Service (Amazon SQS). Tuttavia, la coda di Amazon SQS è in un altro account AWS che si trova in una Regione AWS diversa. Quando eseguo il job, viene visualizzato l'errore "The specified queue does not exist or you do not have access to it."
Breve descrizione
Se la coda Amazon SQS si trova in una Regione AWS diversa da quella del job AWS Glue, i messaggi in coda devono contenere informazioni sulla Regione. Se non trasmetti le informazioni sulla Regione nel tuo messaggio, il job ETL non riesce e viene visualizzato il seguente errore:
ERROR [main] glue.ProcessLauncher (Logging.scala:logError(70)): Exception in User Class: com.amazonaws.services.sqs.model.QueueDoesNotExistException :The specified queue does not exist or you do not have access to it. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: 3861e4c0-9b49-5404-a4c6-bcd3ed43fe20)
Risoluzione
Supponiamo di avere un account AWS chiamato Account A nella Regione AWS us-west-2 e un altro account chiamato Account B nella Regione us-east-1. Per creare un job Spark di AWS Glue nell'Account A che invii messaggi ad Amazon SQS nell'Account B, completa i seguenti passaggi:
- Crea una coda Amazon SQS nell'Account B con la seguente policy di accesso. Questa policy di accesso fornisce l'accesso al ruolo AWS Identity and Access Management (IAM) che l'Account A attribuisce al job Spark di AWS Glue. Puoi concedere queste autorizzazioni richieste anche a un utente IAM specifico (ad esempio, testuser) nell'Account A. Per ulteriori informazioni, consulta Basic examples of Amazon SQS policies.
Nota: sostituisci quanto segue nella policy precedente:{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333444:role/GlueSparkJobIAMRole", "arn:aws:iam::111122223333444:user/testuser" ] }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-east-1:5555666677778888:test-queue" } ] }
111122223333444 con l'ID account AWS per l'Account A
5555666677778888 con l'ID account AWS per l'Account B
testuser con il nome dell'utente IAM nell'Account A
GlueSparkJobIAMRole con il ruolo IAM associato al job Spark di AWS Glue nell'Account A
test-queue con il nome della coda che Account B ha creato - Crea un job ETL di AWS Glue nell'Account A. Nella pagina Configura le proprietà del job, seleziona Un nuovo script creato da te. Per ulteriori informazioni, consulta Configuring job properties for Spark jobs in AWS Glue.
Per inviare un messaggio alla coda Amazon SQS nell'Account B, includi il seguente script Python nel job:
Nota: sostituisci quanto segue nello script precedente:import boto3 sqs = boto3.client('sqs', region_name="us-east-1") queue_url = 'https://sqs.us-east-1.amazonaws.com/5555666677778888/glue-queue' response = sqs.send_message( QueueUrl=queue_url, DelaySeconds=10, MessageAttributes={ 'Title': { 'DataType': 'String', 'StringValue': 'The Whistler' }, 'Author': { 'DataType': 'String', 'StringValue': 'John Doe' }, 'WeeksOn': { 'DataType': 'Number', 'StringValue': '6' } }, MessageBody=('Example message')) print(response['MessageId'])
5555666677778888 con l'ID account AWS dell'Account B
glue-queue con il nome della coda Amazon SQS
Messaggio di esempio con il messaggio che il job AWS Glue invierà alla coda Amazon SQS
Le chiavi e i valori MessageAttributes con chiavi e valori personalizzati - Identifica il ruolo IAM associato al job Spark di AWS Glue nell'Account A. Quindi concedi ad Amazon SQS le autorizzazioni necessarie per quel ruolo. Per esempio, puoi associare la policy gestita da AWS AmazonSQSFullAccess a questo ruolo IAM di AWS. Per ulteriori informazioni, consulta Setting up IAM permissions for AWS Glue.
- Esegui il job ETL di AWS Glue creato nell'Account A.
- Verifica che il job sia stato completato correttamente controllando che abbia inviato il messaggio alla coda di Amazon SQS nell'Account B.
- Per ricevere il messaggio nella coda Amazon SQS nell'Account B, effettua un sondaggio per il messaggio in coda. Per ulteriori informazioni, consulta Receiving and deleting a message in Amazon SQS.
- Verifica di poter visualizzare i messaggi inviati dall'Account A nella coda.
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 mesi fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 9 mesi fa