Neste repositório estão os códigos e instruções da instalação e configuração do ambiente Airflow utilizado pelos desenvolvedores da SEGES.
Este ambiente é similar ao de produção: utiliza a mesma versão do Airflow, instala os mesmo módulos extras do Airflow e as mesmas dependências python. Isso possibilita que o desenvolvimento seja realizado totalmente em ambiente local de forma compatível com o ambiente produção.
Este repositório foi adaptado a partir da solução do Puckel disponível em https://github.com/puckel/docker-airflow.
- Instalar Docker CE aqui!
- Clonar o repositório airflow-docker-local na máquina
$ git clone [email protected]:economiagovbr/airflow-docker-local.git
$ cd airflow-docker-local
- Dentro da pasta clonada (na raiz do arquivo Dockerfile), executar o comando para gerar a imagem docker
$ docker build --rm -t airflow-local .
Se o docker build retornar a mensagem
error checking context: 'can't stat '/home/<user-linux>/.../airflow-docker-local/mnt/pgdata''.
, então executar:
sudo chown -R <user-linux> mnt/pgdata
Para conferir se o build concluiu com sucesso:
docker images
E verificar se a imagem 'airflow-local' latest foi gerada recentemente (CREATED).
Neste momento já é possível executar o Airflow. Porém ainda é necessário clonar mais outros repositórios, tanto os que contém plugins do Airflow assim como o repositório contendo as DAGs de fato.
As DAGs desenvolvidas na Seges utilizam 2 frameworks (plugins). O FastETL, que está aberto no github, e o airflow_commons.
Este plugin é a parte mais organizada dos algoritmos e extensões do Airflow inventados pela equipe para realizar tarefas repetitivas dentro das DAGs, como a carga incremental de uma tabela entre BDs ou a carga de uma planilha do google em uma tabela no datalake.
A partir do diretório corrente, execute:
$ cd ..
$ git clone https://github.com/economiagovbr/FastETL.git
Já este é o que podemos chamar de "versão alpha do FastETL" ou o "celeiro de novos plugins". Eventualmente você pode identificar um código repetido em várias DAGs. Caso aconteça, você deveria refatorar e criar um script no airflow_commons, e importá-lo nos diversos projetos. A evolução seria esta função ser levada oficialmente ao FastETL, para assim ser utilizada mais amplamente e melhor evoluída.
A partir do diretório corrente, execute:
$ git clone http://git.economia.gov.br/seges-cginf/airflow_commons.git
Atualmente a SEGES possui 3 repositórios onde estão organizadas as DAGs do DETRU, do DELOG e da CGINF e demais unidades:
- CGINF - https://git.economia.gov.br/seges-cginf/airflow-dags/
- DELOG - https://git.economia.gov.br/seges/airflow-dags-delog/
- DETRU - https://git.economia.gov.br/seges/airflow-dags-detru/
Para clonar o repositório da CGINF, execute:
$ git clone http://git.economia.gov.br/seges-cginf/airflow-dags.git
Para clonar o repositório do DELOG, execute:
$ git clone http://git.economia.gov.br/seges/airflow-dags-delog.git
Para clonar o repositório do DETRU, execute:
$ git clone http://git.economia.gov.br/seges/airflow-dags-detru.git
A execução é feita de forma isolada por repositório de DAGs. Acesse o repositório do ambiente local:
$ cd airflow-docker-local
Para subir o Airflow com as dags da CGINF, execute:
$ docker-compose -f docker-compose-cginf.yml up -d
Para subir o Airflow com as dags do DELOG, execute:
$ docker-compose -f docker-compose-delog.yml up -d
Para subir o Airflow com as dags do DETRU, execute:
$ docker-compose -f docker-compose-detru.yml up -d
Acesse o Airflow em http://localhost:8080/ o/
Neste momento a interface web do Airlfow provavelmente apresentará uma lista enorme de erros. São erros indicando que o Airflow não consegue encontrar as variáveis e conexões utilizadas na compilação das DAGs. Para resolver prossiga com os passos seguintes.
O Airflow possui módulos que possibilitam o isolamento de variáveis e conexões, permitindo maior flexibilidade na configuração das DAGs e a guarda segura (encriptada) das senhas utilizadas pelas DAGs para se conectarem com os inúmeros serviços. As variáveis podem ser copiadas facilmente do ambiente de produção, o que não é permitido com as conexões, por motivos óbvios.
No Airflow produção acesse a tela de cadastro de variáveis (Admin >> Variables), selecione todas as variáveis, e utilize a opção Export do menu Actions e faça download do arquivo:
Em seguida acesse a mesma tela no Airflow instalado localmente (Admin >> Variables) e utilize a opção Import Variables.
Esta etapa é similar à anterior, porém, por motivos de segurança, não é possível realizar a exportação e importação das conexões. Dessa forma é necessário criar cada conexão na sua instalação do Airflow local. Todavia é possível listar e copiar todos os parâmetros de cada conexão com exceção do password. Para isso acesse no Airflow produção a tela de cadastro de conexões (Admin >> Connectios). Selecione e copie os parâmetros visíveis das conexões que você precisa utilizar, e solicite as devidas senhas aos colegas da equipe.
Se você seguiu todas as etapas até aqui, o Airflow ainda deve estar
apresentando uma lista enorme de erros. Como explicado no parágrafo
acima, daqui pra frente será necessário cadastrar as conexões no Airflow
uma a uma, o que levará muito tempo, além de ser desnecessário para o
desenvolvimento de uma nova DAG ou para dar manutenção em apenas uma DAG
existente. Para reduzir drasticamente a lista de erros basta criar uma
conexão do tipo HTTP com nome slack
. Isso silenciará praticamente
todos os erros.
Uma rápida explicação é de que esta conexão chamada slack
é utilizada
por praticamente todas as nossas DAGs para envio de notificação em caso
de falhas. Caso você execute localmente alguma DAG que implementa esta
configuração, o seu Airflow não enviará notificações de fato já que a
conexão criada não possui nenhuma propriedade preenchida, com exceção do
nome.
Para visualizar os parâmetros de uma conexão registrada no Airflow produção, clique no botão Edit record:
- Os arquivos de banco ficam persistidos em
./mnt/pgdata
- As dags devem estar em um diretório paralelo a este chamado
airflow-dag. Ou seja o Airflow está preparado para carregar as
dags no diretório
../airflow-dags
. Se você executou corretamente o passo anterior (Clonando o repositório de dags), este diretório já está devidamente criado.
Novas bibliotecas python podem ser instaladas adicionando o nome e
versão (opcional) no arquivo ./requirements.txt
$ docker-compose -f docker-compose-cginf.yml down
ou
$ docker-compose -f docker-compose-delog.yml down
ou
$ docker-compose -f docker-compose-detru.yml down
$ docker build --rm -t airflow-local .
Após isso você já pode subir novamente os containers!
Have fun!