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

4 minuto de leitura
0

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:

  1. 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
  2. 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
  3. 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.
  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 Receber e excluir uma mensagem no Amazon SQS.
  7. Verifique se você pode ver as mensagens enviadas da Conta A na fila.

Informações relacionadas

Gerenciar uma fila do Amazon SQS

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses