If I try, I fail. If I don’t try, I’m never going to get it.
Aang, The Last Air Bender
Gostaríamos de disponibilizar para imagem que simplifica o teste local do Airflow utilizando CeleryExecutor através de RabbitMQ.
Estamos iniciando o desenvolvimento de Dags para automatizar alguns processos de ELT/ML em um de nosso parceiros e nos deparamos com a documentação do Airflow e com as imagens disponibilizadas pela Apache.
Apensar de super completa, a criação de uma versão local de testes foi relativamente complexa, tivemos que olhar diversas vezes na documentação e fazer alguns testes para a definição de uma séries de variáveis de ambiente como conexão com o banco de dados e RabbitMQ, diretórios, etc… Fora isso a própria imagem disponibilizada pela Apache tem alguns bugsno momento de fazer a migração inicial do banco de dados (não sei se não soubemos configura-la adequadamente!).
A imagem disponibilizada pela Murabei já determina algumas variáveis de ambiente padrão e limita um pouco o que pode ser modificado facilitando a entrada de novos usuários no mundo do Airflow. De qualquer forma, as imagens podem ser herdadas introduzindo novas configurações mais avançadas caso seja necessário ou mesmo outras variáveis de ambiente.
Ela também deixa de tornar necessário a criação de um container de iniciação da base de dados, visto que aplica a migração antes do inicio do webserver. Isso facilita o deploy, mas temos que ver se não vamos ter problemas em produção (próximos capítulos!).
Junto com a imagem simple-airflow, foi disponibilizada uma imagem com um banco de dados de teste já com um usuário inicializado o que torna “hello-world” do Airflow muito mais simples! O banco de teste é baseado na imagem de Postgres que auto-regenera os dados disponibilizada anteriormente.
Ainda vamos melhorar a imagem para que apresente boas práticas de segurança e criptografia dos connections para possa ser utilizada em produção. De qualquer forma, para quem quer ver a “cara” do Airflow e entender do que se trata achamos um ótimo começo.
Para saber mais em detalhe, segue os links para as imagens e para o repositório no GitHub:
- https://github.com/andrebaceti/simple-airflow
- https://hub.docker.com/repository/docker/andrebaceti/simple-airflow
- https://hub.docker.com/repository/docker/andrebaceti/test-db-simple-airflow
Docker compose para rodar a imagem usando o banco de testes. Para login usuário “admin”, senha “admin”, url “localhost:8080″… acho que eu não preciso falar que não é para usar a base de testes em ambiente de produção neh? As versões atuais são TEST_DB_AIRFLOW=”0.1″, AIRFLOW=”0.0”.
version: '3' services: test-db-airflow: image: andrebaceti/test-db-simple-airflow:$TEST_DB_AIRFLOW restart: always ports: - 5432:5432 ############ # RabbitMQ # rabbitmq-main: image: rabbitmq:3-management ports: - 5672:5672 - 15672:15672 environment: - RABBITMQ_DEFAULT_USER=pumpwood - RABBITMQ_DEFAULT_PASS=pumpwood airflow-webserver: image: andrebaceti/simple-airflow:$AIRFLOW ports: - 8080:8080 airflow-scheduler: image: andrebaceti/simple-airflow:$AIRFLOW command: ["bash", "/airflow/start_airflow__scheduler.sh"] airflow-worker: image: andrebaceti/simple-airflow:$AIRFLOW command: ["bash", "/airflow/start_airflow__worker.sh"]