Criei uma tarefa de extração, transformação e carregamento (ETL) do AWS Glue para enviar mensagens para uma fila do Amazon Simple Queue Service (Amazon SQS). Mas a fila do Amazon SQS está em outra conta da AWS que está em uma região diferente da AWS. Quando executo a tarefa, recebo o erro “A fila especificada não existe ou você não tem acesso a ela”.
Breve descrição
Se a fila do Amazon SQS estiver em uma região da AWS diferente da tarefa do AWS Glue, as mensagens para a fila deverão conter informações da região. Se você não passar as informações da região em sua mensagem, sua tarefa de ETL falhará com o seguinte erro:
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)
Resolução
Suponha que você tenha uma conta da AWS chamada Conta A na região da AWS us-west-2 e outra conta chamada Conta B na região us-east-1. Para criar uma tarefa do AWS Glue Spark na Conta A que envia mensagens para o Amazon SQS na Conta B, conclua as seguintes etapas:
- Crie uma fila do Amazon SQS na Conta B com a seguinte política de acesso. Essa política de acesso fornece acesso à função do AWS Identity and Access Management (IAM) que a Conta A atribui à tarefa do AWS Glue Spark. Você também pode conceder essas permissões necessárias a um usuário específico do IAM (por exemplo, testuser) na Conta A. Para obter mais informações, consulte Exemplos básicos de políticas do 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"
}
]
}
Observação: substitua o seguinte na política anterior:
111122223333444 com o ID da conta da AWS para a Conta A
5555666677778888 com o ID da conta da AWS para a Conta B
testuser com o nome do usuário do IAM na Conta A
GlueSparkJobIAMRole com o perfil do IAM anexado à tarefa do AWS Glue Spark na Conta A
test-queue com o nome da fila criada pela Conta B
- Crie uma tarefa de ETL do AWS Glue na Conta A. Na página Configurar as propriedades da tarefa, selecione Um novo script a ser criado por você. Para obter mais informações, consulte Configurar propriedades de tarefas para tarefas do Spark no AWS Glue.
Inclua o script Python na tarefa para enviar uma mensagem para a fila do Amazon SQS na Conta 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'])
Observação: substitua o seguinte no script anterior:
5555666677778888 com o ID da conta da AWS da Conta B
glue-queue com o nome da fila do Amazon SQS
Exemplo de mensagem com a mensagem que a tarefa do AWS Glue enviará para a fila do Amazon SQS
As chaves e valores de MessageAttributes com suas próprias chaves e valores
- Identifique o perfil do AWS IAM associado à tarefa do AWS Glue Spark na Conta A. Em seguida, conceda ao Amazon SQS as permissões necessárias para essa tarefa. Para simplificar, você pode anexar a política gerenciada da AWS AmazonSQSFullAccess a esse perfil do AWS IAM. Para obter mais informações, consulte Configuração de permissões do IAM para o AWS Glue.
- Execute a tarefa ETL do AWS Glue criada na Conta A.
- Veja se a tarefa foi concluída com êxito verificando se foi enviada a mensagem para a fila do Amazon SQS na Conta B.
- Para receber a mensagem na fila do Amazon SQS na Conta B, solicite a mensagem na fila. Para obter mais informações, consulte Receber e excluir uma mensagem no Amazon SQS.
- Verifique se você pode ver as mensagens enviadas da Conta A na fila.
Informações relacionadas
Gerenciar uma fila do Amazon SQS