Instalando o Airflow em um ambiente virtual do python
Tags: airflow, python, pipenv
Published: 2021-03-23 17:02:58

## Tl;Dr

Explicarei como utilizar o pipenv para rodar localmente o airflow sem a necessidade de instalá-lo globalmente.

## Introdução

Em algumas situações precisamos desenvolver ou testar aplicativos em ambientes separados de nossas máquinas, para que não sejamos pego falando "na minha máquina funciona". 

Neste artigo pretendo explicar como configurar o airflow localmente para que possamos rodá-lo em nossa máquina em um ambiente virtual.

Este artigo não tem a pretensão de explicar o que é o Airflow e nem como utilizá-lo.

## Pipenv

O pipenv é um excelente administrador de pacotes no melhor estilo composer (php) ou npm/yarn (javascript) para o Python.

Segundo o seu próprio site oficial "ele automáticamente cria e administra ambientes virtuais para o seu projeto, bem como adiciona/remove pacotes no seu  [Pipefile](https://github.com/pypa/pipfile) quando você instala/desinstala pacotes. Ele também cria o tão importante Pipfile.lock, que é utilizado para produzir construções deterministicas." ([https://docs.pipenv.org/](https://docs.pipenv.org/))

Neste artigo eu utilizarei o pipenv pois além de ser um excelente administrador de pacotes, como dito acima, ele ainda permite a criação de variáveis de ambiente, o que para o airflow faz-se necessário.

### Instalando o Pipenv

Para instalar o pipenv é muito simples e a sua própria  [documentação](https://docs.pipenv.org/) já existe uma explicação muito boa, mas... se você quiser saber como instalá-lo continue lendo este tópico.

Se você está utilizando o MacOS, você pode instalar o Pipenv utilizando o Homebrew:
```bash
$ brew install pipenv
```
Ou, se você está utilizando Fedora 28:
```bash
$ sudo dnf install pipenv
```

Você também pode instalar utilizando o pip, neste caso digite:
```bash
$ pip install --user pipenv
```

Para mais referência sobre a instalação leia a documentação oficial.

## Airflow

### Preparando o Ambiente

Neste artigo estarei utilizando o MacOS e o Python 3.8.3 para fazer as instalações, mas a lógica da utilização do Airflow e do Pipenv não irá diferir muito, a não ser que você esteja utilizando o Windows com Python 2.alguma coisa(sinto muito por isso).

Inicialmente vamos criar uma pasta nova:
```bash
 $ mkdir airflow-example
```

O Pipenv pode criar para você um ambiente virtual automagicamente, contudo, eu prefiro criar uma pasta de ambiente virtual dentro da pasta onde eu estou trabalhando. O Pipenv irá identificar esta pasta e irá salvar todas as dependências nela.

Eis o comando para a criação de uma pasta de ambiente virtual no Python ˆ3
```bash
$ python -m venv .venv
```
Para iniciar o ambiente virtual no terminal nós precisamos digitar o comando:
```bash
$ pipenv shell
```

Agora todos os comando que você digitar no ambiente virtual serão referentes à este, se você quiser confirmar se está dentro do ambiente virtual digite o comando
```bash
$ which python
```

Ele deverá retornar o local do interpretador do seu python que deverá ser o sua pasta .venv que acabamos de criar. Algo como

`/Users/Myuser/Desktop/airflow-example/.venv/bin/python`

## Instalando o Airflow

Com o ambiente virtual devidamente setado, vamos dar inicio à instalação do Airflow.

Caso você não tenha ainda carregado o ambiente virtual este é um excelente momento para fazê-lo:
```bash
$ pipenv shell
```

Inicialmente precisamos adicionar uma variável de ambiente no pipenv, para que possamos instalar o airflow em nosso ambiente virtual. Dessa forma, digite o comando abaixo:
```bash
$ echo "AIRFLOW_HOME=${PWD}/airflow" >> .env
```

Para instalá-lo sem quaisque dependências adicionais basta digitar o comando abaixo:
```bash
$ pipenv install apache-airflow
```

## Rodando o Airflow

Agora vamos testar para ver se o Airflow foi devidamente instalado.

Certifique-se de que você está no ambiente virtual:
```bash
$ which python
```

Para rodar o airflow vamos seguir a própria [documentação do Airflow](https://airflow.apache.org/docs/apache-airflow/stable/start.html)

Inicialize o banco de dados:
```bash
$ airflow db init
```

Crie um usuário

```bash
airflow users create \
    --username admin \
    --firstname Peter \
    --lastname Parker \
    --role Admin \
    --email spiderman@superhero.org
```

Inicialize o webserver com a porta default 8080
```bash
$ airflow webserver --port 8080
```

Abra um novo terminal ou rode o webserver acima com a flag `-D`  para seu terminal rodar a execução do webserver sem bloquear o cache do seu terminal.

Em seguida inicialize o scheduler:
```bash
$ airflow scheduler
```

Com os passos acima você já conseguirá visualizar a UI do Airflow no link http://localhost:8080

![Imagem da UI do Airflow](https://dev-to-uploads.s3.amazonaws.com/i/ydbaj4e3w0sgy1kxov88.png)