Come posso risolvere l'errore "La coda specificata non esiste o non è possibile accedervi." quando eseguo il mio job AWS Glue per inviare messaggi ad Amazon SQS in un'altra Regione?

4 minuti di lettura
0

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) in un account e una Regione AWS diversi. Quando eseguo il processo, viene visualizzato l'errore "La coda specificata non esiste o non è possibile accedervi."

Breve descrizione

Se la coda Amazon SQS si trova in una regione diversa dal job ETL di Glue, devi trasmettere le informazioni sulla regione quando invii messaggi alla coda Amazon SQS. Altrimenti, il tuo processo ETL fallisce con 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

Per creare un job Spark di AWS Glue per l'account A in us-west-2 per inviare messaggi ad Amazon SQS per l'account B in us-east-1, procedi come segue:

  1. 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 verrebbe associato al job Spark di AWS Glue nell'account A. Puoi anche concedere queste autorizzazioni richieste a uno specifico utente IAM (ad esempio testuser) nell'account A. Per ulteriori informazioni, consulta Esempi di base di policy Amazon SQS.
{
    "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"
        }
    ]
}

Sostituisci quanto segue nella policy di cui sopra:

  • 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 creata nell'account B.
  1. Crea un job ETL di AWS Glue nell'account A. Per ulteriori informazioni, consulta Aggiungere job in AWS Glue. Nella pagina Configura le proprietà del job, seleziona Un nuovo script creato da te. Includi lo script Python nel job per inviare un messaggio alla coda Amazon SQS nell'account B:
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'])

Sostituisci quanto segue nello script precedente:

  • us-east-1 con la Regione in cui è presente la coda Amazon SQS
  • 5555666677778888 con l'ID account AWS dell'account B
  • glue-queue con il nome della coda Amazon SQS
  • Messaggio di esempio con il messaggio da inviare alla coda SQS

Sostituisci gli attributi del messaggio e i valori corrispondenti nello script con gli attributi e i valori del messaggio desiderati.

  1. Identifica il ruolo di AWS Identify Access Management (AWS IAM) associato al job Spark di AWS Glue nell'account A. Quindi concedi ad Amazon SQS le autorizzazioni necessarie per quel ruolo. Per semplicità, puoi allegare la policy gestita da AWS AmazonSQSFullAccess a questo ruolo IAM di AWS. Per ulteriori informazioni, consulta Configurazione delle autorizzazioni IAM per AWS Glue.

  2. Esegui il job ETL di AWS Glue creato nell'account A.

  3. Verifica che il job sia stato completato correttamente controllando che abbia inviato il messaggio alla coda di Amazon SQS nell'account B.

  4. Per ricevere il messaggio nella coda Amazon SQS nell'account B, effettua un sondaggio per il messaggio in coda. Per ulteriori informazioni, consulta Ricezione ed eliminazione di messaggi (console).

  5. Verifica di poter visualizzare i messaggi inviati dall'account A in coda.


Informazioni correlate

Gestione delle code Amazon SQS (console)

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa