ETL com o AWS Glue

Paulo Henrique de Siqueira
Tech Intelipost
Published in
6 min readOct 1, 2019

ETL, sigla em inglês para Extract, Transform and Load, é a operação de mover dados entre diversas fontes de dados.

O processo consiste em extrair os dados da fonte original, podendo essa ser o banco de dados de sua aplicação, planilhas de relatórios, etc; realizar possíveis transformações, como filtros, operações matemáticas, junção com outras fontes de dados; e por fim carregar esses dados tratados no destino desejado.

Há diversas ferramentas de mercado que oferecem soluções para auxiliar nesse processo, algumas mais focadas na facilidade e experiência do usuário, outras na flexibilidade e customização dos passos. Hoje vamos explorar um pouco das funcionalidades oferecidas pelo AWS Glue, um dos serviços da Amazon que é voltado para realizar tarefas de ETL.

A Intelipost trabalhaz com várias fontes de dados: PostgreSQL no Amazon RDS, arquivos no S3, dados no Elasticsearch. Para centralizar esses dados e realizar análises de forma eficiente utilizamos o Redshift, um banco de dados colunar, projetado para armazenar grandes quantidades de dados e realizar consultas complexas de forma otimizada.

Neste artigo vamos mostrar passo a passo como mover dados do S3 para o Redshift utilizando as ferramentas do AWS Glue.

Criando um IAM Role

O primeiro passo para criar um job no Glue é criar um IAM Role para controlar o acesso do AWS Glue e S3:

  • Abra o painel do IAM no console da AWS;
  • Clique em Roles (Funções) no painel da esquerda e clique em Create role (Criar função);
  • Em Select type of trusted entity (Selecionar tipo de entidade confiável) escolha AWS Service (Serviço da Aws);
  • Na seção “Escolha o serviço que usará essa função” escolha Glue;
  • Na seção “Selecione seu caso de uso” escolha Glue novamente e clique no botão “Próximo: Permissões”;
  • Na seção “Attach políticas de permissões” selecione AWSGlueServiceRole. Esta política contém permissões de acesso para o Glue, CloudWatch, EC2, S3 e IAM. Clique no botão “Próximo: tags”;
  • As tags são informações que podem ser utilizadas para organizar, rastrear ou controlar acesso a essa função, e são opcionais, após finalizar clique em “Próximo: review”;
  • Digite um nome para a sua função e clique em “Criar função”.

Criando a conexão com o Redshift

Antes de criar a conexão no Glue é muito importante configurar o acesso ao Redshift nas propriedades do cluster. Para que o Glue consiga acessar o Redshift é necessário que no grupo de segurança utilizado pelo Redshift exista um regra de Inbound e outra de Outbound que libere o acesso de todas as portas TCP para o próprio grupo (autorreferência).

  • No console da AWS escolha o serviço Redshift;
  • Na painel da esquerda clique em Clusters, clique no cluster desejado para ver mais informações;
  • Anote o security group do cluster (algo como sg-11122233);
  • Clique no nome do grupo de segurança para ser redirecionado para o painel de grupos de segurança da EC2;
  • Escolha o grupo desejado e na parte de baixo na seção Inbound clique em “Edit”. Na modal que será aberta clique em “Add rule”, em type escolha “All TCP”, e em Source digite o nome da própria regra (mesmo nome anotado nos passos anteriores);
  • Realize o mesmo processo na seção Outbound;

Agora já é possível criar a conexão:

  • No console do Aws Glue clique em “Conexões” no painel da esquerda e “Adicionar conexão”;
  • Na próxima tela digite um nome para sua conexão e em “Tipo de conexão” escolha Amazon Redshift;
  • Na próxima tela selecione o cluster do Redshift e preencha usuário e senha (é importante que este usuário tenha as permissões de escrita e leitura necessárias para a base de dados que você planeja popular) ;
  • Na pŕoxima tela revise as informações e clique em “Concluir”.

Adicionando Crawlers

O Aws Glue utiliza um Catálogo de Dados que armazena referências a dados que são usados como fontes e destinos de trabalhos de ETL. O catálogo de dados pode ser preenchido com Crawlers.

Para criar os crawlers siga os seguintes passos:

  • No console do Aws Glue no painel da esquerda clique em “Crawlers” e na tela seguinte em “Adicionar crawler”;
  • Digite um nome para o crawler e clique em “Próximo”;
  • Em “Crawler source types” escolha Data Stores;
  • Na próxima tela no campo “Escolha um data store” escolha JDBC, em “Conexão” escolha a conexão criada no passo anterior para o Redshift;
  • Em “Incluir caminho” você pode especificar uma tabela específica (“MyDatabase/MySchema/MyTable”) ou crawlear o schema inteiro com a seguinte sintaxe “MyDatabase/MySchema/%”;
  • Na tela seguinte “Escolha uma função do IAM”, selecione “Escolha uma função do IAM existente” e selecione a função(role) criada nos passos anteriores;
  • Na tela “Criar uma programação para este crawler” deixe selecionado “Executar sob demanda”;
  • Na próxima tela se você ainda não tem um banco de dados clique em “Adicionar banco de dados”. Este banco se refere ao Catálogo de Dados do Glue e não às tabelas do Redshift ou outra fonte de dados; Crie também um crawler para os arquivos do S3:
  • Siga os passos anteriores e na tela “Escolha um data store” selecione S3;
  • Selecione Caminho especificado na minha conta e selecione a pasta que contém os objetos a serem crawleados;

Agora é possível executar o crawler selecionando o mesmo na lista e clicando no botão “Executar crawler”. As tabelas de metadados criadas podem ser visualizadas no menu “Tabelas” no painel da esquerda.

Criando um Job

  • No painel da esquerda clique em “Trabalhos” na seção ETL;
  • Clique no botão “Adicionar trabalho”;
  • Digite um nome para o trabalho e escolha a função IAM criada nos passos anteriores;
  • Em “Type” selecione Scala e em “Glue Version” escolha uma das versões com a linguagem desejada. As opções são Python e Scala;
  • As demais opções são facultativas, mas uma delas, muito interessante, é a “Marcador de trabalho”. Com ela habilitada é possível marcar quais arquivos ou registros já foram processados (lembrando que bancos relacionais só consideram a primary key e só tratam adições de registros, além de não considerar edições) e assim, iniciar o próximo job a partir deste registro. Para este exemplo vamos deixar essa opção habilitada;
  • As demais opções podem ser utilizadas com o valor padrão, clique em “Pŕoximo”;
  • Na tela seguinte deve ser selecionada a fonte de dados, no caso deste exemplo a tabela criada pelo crawler do S3;
  • Na tela seguinte em “Choose a transform type” deixe selecionada a opção Change Schema;
  • Na tela seguinte: “Selecionar seus destinos de dados” escolha a tabela de destino que foi crawleada no Redshift;
  • Na próxima tela: “Mapeie as colunas de origem para as colunas de destino”, você deve relacionar as colunas da sua tabela de origem com as colunas da tabela de destino na interface visual apresentada;
  • Clique em “Salvar trabalho e editar script”;
  • Um script será gerado automaticamente para realizar o processo de ETL, este script pode ser editado e customizado para inserir transformações, filtros, mais origens para realizar joins, etc.

Para executar o job sob demanda clique em “Trabalhos” no painel da esquerda, escolha o trabalho na lista, clique no botão “Ação” e “Executar trabalho”.

Para agendar a execução do job periodicamente siga os seguintes passos:

  • Clique em “Gatilhos” no painel da esquerda;
  • Clique em “Adicionar gatilho”;
  • Digite um nome para identificar o gatilho;
  • Em “Tipo do gatilho” selecione a opção “Programado” e configure a frequência;
  • Escolha o trabalho que será executado;
  • Você pode marcar a opção “Habilitar gatilho na criação” ou posteriormente escolher o gatilho criado na lista. Em seguida, clicar no botão “Ação” e “Habilitar gatilho”

Com tudo configurado, os dados do seu bucket no S3 serão inseridos em sua tabela do Redshift na periodicidade indicada.

Podemos perceber que o AWS Glue é um serviço bem flexível, que permite a edição completa dos scripts que serão executados, abrindo um leque para diversas operações. No entanto não é um serviço tão simples de se configurar, sua interface não é muito amigável. A parte de edição de scripts não tem muito auxílio visual , é basicamente um editor de código, o que torna o processo complexo.

Outro ponto negativo é que o job bookmark (marcador de trabalho) é um mecanismo interno, tornando um pouco difícil saber quais registros já foram processados ou começar a processar arquivos a partir de determinado ponto pré-definido.

É uma alternativa para quem deseja rodar trabalhos de ETL com scripts mais customizados, no entanto não é recomendado para usuários mais casuais ou que desejam uma ferramenta mais completa com funcionalidades embutidas.

--

--