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). Sin embargo, la cola de Amazon SQS está en otra cuenta de AWS que se encuentra en otra región de AWS. 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 de AWS diferente a la del trabajo de AWS Glue, los mensajes a la cola deben contener información de la región. Si no pasa la información de la región en el mensaje, el trabajo de ETL no se realizará correctamente y aparecerá 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
Supongamos que tiene una cuenta de AWS denominada cuenta A en la región de AWS us-west-2 y otra cuenta denominada cuenta B en la región us-east-1. Para crear un trabajo de AWS Glue Spark en la cuenta A que envíe mensajes a Amazon SQS en la cuenta B, complete los pasos siguientes:
- Cree una cola de Amazon SQS en la cuenta B con la siguiente política de acceso. Esta política de acceso proporciona acceso a la función de administración de identidades y accesos (IAM) de AWS que la cuenta A asigna al trabajo de AWS Glue Spark. También puede conceder estos permisos necesarios a un usuario de IAM específico (por ejemplo, testuser) en la cuenta A. Para obtener más información, consulte Ejemplos básicos de políticas de 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"
}
]
}
**Nota:**Sustituya 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 que la cuenta B ha creado
- Cree un trabajo de AWS Glue ETL en la cuenta A. En la página Configure the job properties, seleccione A new script to be authored by you. Para obtener más información, consulte Configuring job properties for Spark jobs in AWS Glue.
Incluya 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'])
Nota: Sustituya lo siguiente en el script anterior:
5555666677778888 por el ID de cuenta de AWS de la cuenta B
glue-queue por el nombre de la cola de Amazon SQS
Mensaje de ejemplo con el mensaje que el trabajo de AWS Glue enviará a la cola de Amazon SQS
Las claves y valores de MessageAttributes con sus propias claves y valores
- Identifique el rol de 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. Por ejemplo, conecte 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.
- Ejecute el trabajo de ETL de AWS Glue creado en la cuenta A.
- Compruebe que el trabajo se ha completado verificando que el trabajo ha enviado el mensaje a la cola de Amazon SQS en la cuenta B.
- Para recibir el mensaje en la cola de Amazon SQS en la cuenta B, sondee el mensaje en la cola. Para obtener más información, consulte Receiving and deleting a message in Amazon SQS.
- Compruebe que puede ver los mensajes enviados desde la cuenta A en la cola.
Información relacionada
Managing an Amazon SQS queue