¿Cómo puedo resolver el error «The specified queue does not exist or you do not have access to it» cuando ejecuto mi trabajo de AWS Glue para enviar mensajes a Amazon SQS en otra región?

4 minutos de lectura
0

He creado un trabajo de extracción, transformación y carga (ETL) de AWS Glue para enviar mensajes a una cola de Amazon Simple Queue Service (Amazon SQS) en una cuenta de AWS y una región diferentes. Cuando ejecuto el trabajo, se muestra el error: «The specified queue does not exist or you do not have access to it».

Breve descripción

Si la cola de Amazon SQS se encuentra en una región diferente a la del trabajo de ETL de Glue, debes transferir la información de la región al enviar mensajes a la cola de Amazon SQS. De lo contrario, el trabajo de ETL generará el siguiente error:

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)

Resolución

Para crear un trabajo de AWS Glue Spark en la cuenta A en la región us-west-2 para enviar mensajes a Amazon SQS en la cuenta B en la región us-east-1, haz lo siguiente:

1.    Crea una cola de Amazon SQS en la cuenta B con la siguiente política de acceso. Esta política de acceso proporciona acceso al rol de AWS Identity and Access Management (IAM) que se conectaría con el trabajo de AWS Glue Spark en la cuenta A. También puedes conceder los permisos necesarios a un usuario de IAM específico (por ejemplo, testuser) en la cuenta A. Para obtener más información, consulta Basic examples of Amazon SQS policies.

{
    "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"
        }
    ]
}

Sustituye lo siguiente en la política anterior:

  • 111122223333444 por el ID de cuenta de AWS de la cuenta A.
  • 5555666677778888 por el ID de cuenta de AWS de la cuenta B.
  • testuser por el nombre de usuario de IAM en la cuenta A.
  • GlueSparkJobIAMRole por el rol de IAM conectado al trabajo de AWS Glue Spark en la cuenta A.
  • test-queue por el nombre de la cola creada en la cuenta B.

2.    Crea un trabajo de ETL de AWS Glue en la cuenta A. Para obtener más información, consulta Adding jobs in AWS Glue. En la página Configure the job properties, seleccione A new script to be authored by you. Incluye el script de Python en el trabajo para enviar un mensaje a la cola de Amazon SQS en la cuenta 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'])

Sustituye lo siguiente en el script anterior:

  • us-east-1 por la región donde se ubica la cola de Amazon SQS
  • 5555666677778888 por el ID de cuenta de AWS de la cuenta B
  • glue-queue por el nombre de la cola de Amazon SQS
  • Example message por el mensaje que se enviará a la cola de SQS

Sustituye los atributos del mensaje y los valores correspondientes del script por los atributos y valores del mensaje que desee.

3.    Identifica el rol de AWS Identify Access Management (AWS IAM) conectado al trabajo de AWS Glue Spark en la cuenta A. A continuación, concede a Amazon SQS los permisos necesarios para ese rol. Para simplificar, puedes conectar la política administrada de AWS AmazonSQSFullAccess a este rol de AWS IAM. Para obtener más información, consulta Setting up IAM permissions for AWS Glue.

4.    Ejecuta el trabajo de ETL de AWS Glue creado en la cuenta A.

5.    Comprueba que el trabajo se ha completado correctamente verificando que el trabajo ha enviado el mensaje a la cola de Amazon SQS en la cuenta B.

6.    Para recibir el mensaje en la cola de Amazon SQS en la cuenta B, sondea el mensaje en la cola. Para obtener más información, consulta Receiving and deleting messages (console).

7.    Comprueba que puedes ver los mensajes enviados desde la cuenta A en la cola.


Información relacionada

Managing Amazon SQS queues (console)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años