Skip to content

Commit

Permalink
add airflow configs
Browse files Browse the repository at this point in the history
  • Loading branch information
vitorbellini committed Nov 10, 2023
1 parent bc14ac0 commit ee0873c
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 46 deletions.
117 changes: 76 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,53 +14,72 @@ Este repositório foi adaptado a partir da solução oficial da Apache
Airflow disponível em
https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html.

## Índice

* [1. Preparação e execução do Airflow](#1-preparação-e-execução-do-airflow)
* [2. Importando Plugins e DAGs](#2-importando-plugins-e-dags)
* [3. Executando o Airflow](#3-executando-o-airflow)
* [4. Configurações finais](#4-configurações-finais)
* [5. Acessos](#5-acessos)
* [6. Instalação de pacotes, atualizações e upgrades](#6-instalação-de-pacotes-atualizações-e-upgrades)


## 1. Preparação e execução do Airflow

### 1.1. Instalar Docker CE [aqui!](https://docs.docker.com/get-docker/)

Obs.: É necessário que o `docker-compose` tenha versão mínima 1.29.
No Ubuntu 20.04, recomenda-se instalar o docker a partir do
Obs.: É necessário que o `docker-compose` tenha versão mínima `1.29`
No Ubuntu `20.04`, recomenda-se instalar o docker a partir do
gerenciador de pacotes *snap*:

```bash
```shell
snap install docker
```

### 1.2. Clonar o repositório [airflow2-docker](https://github.com/gestaogovbr/airflow2-docker)

```bash
```shell
git clone [email protected]:gestaogovbr/airflow2-docker.git
cd airflow2-docker
```

### 1.3. Variáveis de configuração do Airflow

Atualizar, se desejar, variáveis de ambiente em [.env](.env).

### 1.4. Inicializar banco Airflow
### 1.4. Conexões e Variáveis do Airflow

Caso deseje pré-carregar as conexões e variáveis do Airflow no seu ambiente,
sobrescreva os arquivos [airflow-connections.json](/config/airflow-connections.json)
e [airflow-variables.json](/config/airflow-variables.json).

### 1.5. Inicializar banco, variáveis e conexões Airflow

Dentro da pasta clonada (na raiz do arquivo Dockerfile), executar o
comando para gerar a estrutura do banco Postgres local
comando para gerar a estrutura do banco Postgres local e carregar conexões
e variáveis do Airflow:

```bash
docker compose -f init.yml up airflow-init
```shell
# de dentro da pasta clonada `airflow2-docker`
docker compose -f init.yml up
# espera concluir o processo
docker compose down --remove-orphans
# Crtl+C
docker compose -f init.yml down
```

Se tudo funcionar, o output do comando acima deve ser algo semelhante à
tela a seguir:

![airflow-init](/doc/img/airflow-init.gif)

> Se o docker build retornar a mensagem `error checking context:
> 'can't stat '/home/<user-linux>/.../mnt/pgdata''.`, então executar:
```bash
sudo chown -R $USER mnt/pgdata
```shell
sudo chown -R $USER mnt
```

Após a conclusão da inicialização, você deverá ver uma mensagem
como a seguir:

![airflow-init](/doc/img/airflow-init.gif)

A conta criada possui o usuário `airflow` e a senha `airflow`.
A conta criada possui o usuário `airflow` e a senha `airflow` conforme
configuração em [.env](.env).

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
Expand Down Expand Up @@ -128,10 +147,12 @@ git clone https://git.economia.gov.br/seges/airflow-dags-delog.git && \
git clone https://git.economia.gov.br/seges/airflow-dags-detru.git
```

## 3. Executar o Airflow
## 3. Executando o Airflow

```bash
cd airflow2-docker && \
### 3.1. Iniciar serviço

```shell
# de dentro da pasta clonada `airflow2-docker`
docker compose up
```

Expand All @@ -150,6 +171,14 @@ 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.

### 3.2. Interromper serviço

```shell
# de dentro da pasta clonada `airflow2-docker`
# ou na tela de logs, Ctrl+C e depois
docker-compose down
```

## 4. Configurações finais

O Airflow possui módulos que possibilitam o isolamento de **variáveis**
Expand All @@ -159,7 +188,9 @@ 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.

### 4.1. Exportar variáveis do Airflow Produção e importar no Airflow Local
### 👉 Etapas 4.1. e 4.2. são opcionais caso não tenha atualizado os arquivos [airflow-connections.json](/config/airflow-connections.json) e [airflow-variables.json](/config/airflow-variables.json) na etapa [1.4. Conexões e Variáveis do Airflow](#14-conexões-e-variáveis-do-airflow)

### 4.1. (Opcional) Exportar variáveis do Airflow Produção e importar no Airflow Local

No Airflow produção acesse a tela de cadastro de variáveis
([Admin >> Variables](http://hom.airflow.seges.mp.intra//variable/list/)),
Expand All @@ -172,7 +203,7 @@ Em seguida acesse a mesma tela no Airflow instalado localmente
[(Admin >> Variables)](http://localhost:8080/variable/list/) e utilize a
opção **Import Variables**.

### 4.2. Criar as conexões no Airflow Local
### 4.2. (Opcional) Criar as conexões no Airflow Local

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 é
Expand Down Expand Up @@ -205,7 +236,14 @@ produção, clique no botão **Edit record**:

![tela-listagem-conexoes](/doc/img/tela-listagem-conexoes.png)

### 4.3. Volumes
## 5. Acessos

### 5.1. Serviços

* `Airflow UI` em [http://localhost:8080/](http://localhost:8080/)
* `Jupyter lab` em [http://localhost:8888/lab](http://localhost:8888/lab)

### 5.2. Volumes

* Os arquivos de banco ficam persistidos em `./mnt/pgdata`
* Os arquivos de log ficam persistidos em `./mnt/pgdata`
Expand All @@ -216,38 +254,35 @@ produção, clique no botão **Edit record**:
está devidamente criado.
* Para editar os volumes de `DAGs`, `plugins` e outros edite o [docker-compose.yml](docker-compose.yml#L26)

### 4.4. Instalação de bibliotecas Python e atualização da imagem Docker
## 6. Instalação de pacotes, atualizações e upgrades

Novas bibliotecas python podem ser instaladas adicionando o nome e
versão (obrigatório) no arquivo [requirements-cdata-dags.txt](requirements-cdata-dags.txt).
### 6.1. Instalação de pacotes Python

Novas bibliotecas python podem ser instaladas adicionando o nome e versão
(obrigatório) no arquivo [requirements-cdata-dags.txt](requirements-cdata-dags.txt).

Para refletir as atualizações feitas em [Dockerfile](Dockerfile) ou
[requirements-cdata-dags.txt](requirements-cdata-dags.txt) rodar o comando:

```shell
docker build -t ghcr.io/gestaogovbr/airflow2-docker:latest-dev --build-arg dev_build=true .
```

### 4.5. Para desligar o ambiente Airflow

```bash
docker-compose down
```
Para aplicar as mudanças rodar o comando de atualização da imagem em
[6.3. Atualização da imagem airflow2-docker](#63-atualização-da-imagem-airflow2-docker).

### 4.6. Para fazer upgrade de versão do Airflow
### 6.2. Upgrade da versão do Airflow

Atualização na versão do Airflow é realizada alterando a imagem de build
em [Dockerfile](Dockerfile#L3) conforme `tags` disponíveis em [https://hub.docker.com/r/apache/airflow](https://hub.docker.com/r/apache/airflow).

#### 4.6.1. Atualizar imagem
Para aplicar as mudanças rodar o comando de atualização da imagem em
[6.3. Atualização da imagem airflow2-docker](#63-atualização-da-imagem-airflow2-docker).

> A partir da pasta que contém o arquivo [Dockerfile](Dockerfile)
### 6.3. Atualização da imagem airflow2-docker

```shell
# de dentro da pasta clonada `airflow2-docker`
docker build -t ghcr.io/gestaogovbr/airflow2-docker:latest-dev --build-arg dev_build=true .
```

#### 4.6.2. Atualizar banco (quando necessário)
### 6.4. Atualizar banco (quando necessário)

Dependendo da atualização do Airflow, será necessário atualizar os esquemas
do banco. Para descobrir:
Expand All @@ -256,7 +291,7 @@ do banco. Para descobrir:
docker compose up
```

Se der mensagem de erro relacionada ao upgrade do banco, rodar:
Se der mensagem de erro relacionada a upgrade de banco, rodar:

```shell
docker compose -f init.yml up airflow-init
Expand Down
12 changes: 12 additions & 0 deletions config/airflow-connections.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"conn_demo": {
"conn_type": "http",
"description": "Demo http connection",
"login": "foo",
"password": "",
"host": "https://foo.com",
"port": null,
"schema": "",
"extra": "{}"
}
}
3 changes: 3 additions & 0 deletions config/airflow-variables.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"variable_demo": "foo"
}
Binary file modified doc/img/airflow-init.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ x-airflow-common:
AIRFLOW__EMAIL__DEFAULT_EMAIL_ON_RETRY: 'false'
AIRFLOW__SCHEDULER__ENABLE_HEALTH_CHECK: 'true'
AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE: 'America/Sao_Paulo'
AIRFLOW__WEBSERVER__NAVBAR_COLOR: '#66b2b2'
AIRFLOW__WEBSERVER__INSTANCE_NAME: "Let's Code!"
AIRFLOW__WEBSERVER__NAVBAR_COLOR: '#82f6ce'
AIRFLOW__WEBSERVER__SECRET_KEY: '42'
PYTHONPATH: '/opt/airflow/dags/airflow-dags:/opt/airflow/dags/airflow-dags-detru:/opt/airflow/dags/airflow-dags-delog'
RO_DOU__DAG_CONF_DIR: /opt/airflow/dags/airflow-dags/ro_dou/dag_confs
Expand Down
31 changes: 27 additions & 4 deletions init.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
version: '3'

x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-ghcr.io/gestaogovbr/airflow2-docker:latest-dev}
environment:
&airflow-common-env
AIRFLOW__CORE__FERNET_KEY: ${AIRFLOW__CORE__FERNET_KEY}
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${POSTGRES_USER:-airflow}:${POSTGRES_PASSWORD:-airflow}@postgres/${POSTGRES_DB:-airflow}
volumes:
- ./config:/tmp/airflow
user: "0:0"

services:
postgres:
image: ${POSTGRES_IMAGE_NAME:-postgres:15}
Expand All @@ -16,16 +27,28 @@ services:
start_period: 5s
restart: always

airflow-import-connections:
<<: *airflow-common
command: connections import /tmp/airflow/airflow-connections.json
depends_on:
airflow-init:
condition: service_completed_successfully

airflow-import-variables:
<<: *airflow-common
command: variables import /tmp/airflow/airflow-variables.json
depends_on:
airflow-init:
condition: service_completed_successfully

airflow-init:
image: ${AIRFLOW_IMAGE_NAME:-ghcr.io/gestaogovbr/airflow2-docker:latest-dev}
<<: *airflow-common
environment:
AIRFLOW__CORE__FERNET_KEY: ${AIRFLOW__CORE__FERNET_KEY}
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${POSTGRES_USER:-airflow}:${POSTGRES_PASSWORD:-airflow}@postgres/${POSTGRES_DB:-airflow}
<<: *airflow-common-env
_AIRFLOW_DB_MIGRATE: 'true'
_AIRFLOW_WWW_USER_CREATE: 'true'
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow}
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-airflow}
user: "0:0"
depends_on:
postgres:
condition: service_healthy
Expand Down

0 comments on commit ee0873c

Please sign in to comment.