Como resolvo o erro “A fila especificada não existe ou você não tem acesso a ela” ao executar meu trabalho do AWS Glue para enviar mensagens para o Amazon SQS em uma região diferente?

4 minuto de leitura
0

Criei um trabalho de extração, transformação e carregamento (ETL) do AWS Glue para enviar mensagens para uma fila do Amazon Simple Queue Service (Amazon SQS) em uma conta e região diferentes da AWS. Quando executo o trabalho, 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 diferente da tarefa Glue ETL, você deverá passar as informações da região ao enviar mensagens para a fila do Amazon SQS. Caso contrário, 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

Para criar uma tarefa do AWS Glue Spark para a Conta A em us-west-2 e enviar mensagens para o Amazon SQS para a Conta B em us-east-1, faça o seguinte:

1.    Crie uma fila do Amazon SQS na Conta B com a seguinte política de acesso. Essa política de acesso fornece acesso ao perfil do AWS Identity and Access Management (IAM) que seria anexado à tarefa do AWS Glue Spark na Conta A. 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 das 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"
        }
    ]
}

Substitua o seguinte na política acima:

  • 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 na Conta B.

2.    Crie uma tarefa ETL do AWS Glue na conta A. Para obter mais informações, consulte Adicionar tarefa no AWS Glue. Na página Configurar as propriedades da tarefa, selecione Um novo script a ser criado por você. 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'])

Substitua o seguinte no script acima:

  • us-east-1 com a região em que a fila do Amazon SQS está presente
  • 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 a ser enviada para a fila do SQS

Substitua os atributos da mensagem e os valores correspondentes no script pelos atributos e valores de mensagem desejados.

3.    Identifique o perfil do AWS Identify Access Management (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.

4.    Execute a tarefa ETL do AWS Glue criada na Conta A.

5.    Veja se a tarefa foi concluída com êxito verificando se foi enviada a mensagem para a fila do Amazon SQS na Conta B.

6.    Para receber a mensagem na fila do Amazon SQS na Conta B, solicite a mensagem na fila. Para obter mais informações, consulte Recebendo e excluindo mensagens (console).

7.    Verifique se você pode ver as mensagens enviadas da Conta A na fila.


Informações relacionadas

Gerenciar filas do Amazon SQS (console)

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos