Aller au contenu

Installer Apache Airflow avec Docker#

Docker est le meilleur moyen de déployer Apache Airflow. Dans ce tutoriel je vous montre comment procéder.

Télécharger le fichier docker-compose.yaml#

Veuillez créer un dossier dédié à Apache Airflow

mkdir apache-airflow
cd apache-airflow

Télechargez le fichier docker-compose.yaml indiqué dans la documentation officielle.

wgets https://airflow.apache.org/docs/apache-airflow/2.6.1/docker-compose.yaml
Le fichier docker-compose.yaml est téléchargé sur votre machine dossier courant.

Créez les répertoires suivants

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

Définir AIRFLOW_HOME#

La variable AIRFLOW_HOME indique le chemin vers le dossier d'Apache Airflow

export AIRFLOW_HOME=$(pwd)
echo 'export AIRFLOW_HOME=$(pwd)' >> ~/.bashrc

Initialiser la base de données#

Dans un premier, il faut initialiser la base de données qui va stocker les données des utilisateurs et des flux qui seront créés.

docker compose up airflow-init -d
Un utilisateur airflow est également créé avec le mot de passe airflow et le rôle Admin.

Démarrer les services de Airflow#

Maintenant, il faut lancer les différents services d'Apache Airflow à savoir airflow-scheduler, airflow-webserver, airflow-worker et airflow-triggerer.

docker compose up -d

Une fois la commande exécutée, vous pouvez vérifier l'état des conteneurs déployés avec la commande suivante

docker ps
Output
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                 PORTS                    NAMES
87cdbab20845   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-triggerer-1
b9413c6fbeee   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-scheduler-1
61f7bd92877b   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   0.0.0.0:8080->8080/tcp   apache-airflow-airflow-webserver-1
aee2d3cea33b   apache/airflow:2.6.1   "/usr/bin/dumb-init …"   3 hours ago    Up 3 hours (healthy)   8080/tcp                 apache-airflow-airflow-worker-1
69979805360b   redis:latest           "docker-entrypoint.s…"   3 hours ago    Up 3 hours (healthy)   6379/tcp                 apache-airflow-redis-1
dfb0b452a8f0   postgres:13            "docker-entrypoint.s…"   3 hours ago    Up 3 hours (healthy)   5432/tcp                 apache-airflow-postgres-1

Docs Apache Airflow : Running Airflow in Docker

Connexion#

Rendez-vous à l'adresse http://localhost:8080/. Vous serez redirigé vers la page de connexion

Connectez-vous avec l'utilisateur airflow avec le mot de passe airflow

Arrêter Apache Airflow#

Pour arrêter Apache Airflow, depuis le dossier d'Apache Airflow, lancez la commande suivante

docker compose down
Output
PS C:\Users\Administrateur\Documents\dev\apache-airflow> docker compose down
time="2023-06-17T23:25:55Z" level=warning msg="The \"AIRFLOW_UID\" variable is not set. Defaulting to a blank string."
time="2023-06-17T23:25:55Z" level=warning msg="The \"AIRFLOW_UID\" variable is not set. Defaulting to a blank string."
[+] Running 8/8
 - Container apache-airflow-airflow-worker-1     Removed                                                          11.3s
 - Container apache-airflow-airflow-webserver-1  Removed                                                          12.0s
 - Container apache-airflow-airflow-triggerer-1  Removed                                                           5.5s
 - Container apache-airflow-airflow-scheduler-1  Removed                                                           9.1s
 - Container apache-airflow-airflow-init-1       Removed                                                           0.7s
 - Container apache-airflow-postgres-1           Removed                                                           0.8s
 - Container apache-airflow-redis-1              Removed                                                           0.6s
 - Network apache-airflow_default                Removed                                                           0.7s
NB : Docker arrête simplement les contenuers, vos données ne seront pas perdues. Vous pourrez redémarrer à tout moment.

Il est souvent nécessaire d'installer des packages additionnels, on peut se connecter au conteneur et

docker exec -it  apache-airflow-airflow-scheduler-1 /bin/bash
Une fois à 'linstérieur du conteneur, vous pouvez installer les packages avec pip
pip install pandas db-analytics-tools
Cela marche bien mais ce n'est pas la bonne manière de faire. L'idéal c'est reconstruire l'image Airflow. Pour cela, créez un fichier Dockerfile dans le dossier que docker-compose.yml avec le contenu suivant
Dockerfile
FROM apache/airflow:2.6.1

USER airflow

COPY requirements.txt /requirements.txt

RUN pip install --no-cache-dir -r /requirements.txt

deploy.sh
#!usr/bin/bash

docker compose down

docker compose build

docker compose up airflow-init -d

docker compose up -d
bash deploy
Airflow Component Container
Web Server apache-airflow-airflow-webserver
Scheduler apache-airflow-airflow-scheduler
Executor apache-airflow-airflow-worker, apache-airflow-airflow-triggerer
Queue apache-airflow-redis
Workers apache-airflow-airflow-worker
Metadatabase apache-airflow-postgres

Configurer Airflow#

Airflow peut être personnalisé via des variables d’environnement. Voici les paramètres essentiels à configurer dans un contexte de production ou de développement contrôlé.

Déscativer les exemples Airflow#

AIRFLOW__CORE__LOAD_EXAMPLES = 'false'

Déscativer les exemples Airflow#

Par défaut Airflow charge des jobs d'exemple ainsi que des datasets, vous pouvez activer ou désactiver via le paramètre suivant :

AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION = 'true'

Activer le test des connexions 🧪#

Permet de tester la validité des connexions dans l'interface utilisateur :

AIRFLOW__CORE__TEST_CONNECTION = 'Enabled'

Configurer l’envoi d’emails (SMTP) ✉️#

Utilisé pour les notifications (échecs, alertes, etc.). Exemple avec un compte Gmail :

AIRFLOW__SMTP__SMTP_HOST=smtp.gmail.com
AIRFLOW__SMTP__SMTP_PORT=587
AIRFLOW__SMTP__SMTP_STARTTLS=True
AIRFLOW__SMTP__SMTP_SSL=False
AIRFLOW__SMTP__SMTP_USER=konka.dataanalytics@gmail.com
AIRFLOW__SMTP__SMTP_PASSWORD=xxx  # Utiliser un mot de passe d'application
AIRFLOW__SMTP__SMTP_MAIL_FROM=Konka Analytics <konka.dataanalytics@gmail.com>

⚠️ Attention : Pour utiliser Gmail, il faut activer l’accès SMTP ou générer un mot de passe d’application si la double authentification est activée.


Bravo, tout est prêt maintenant. Dans la prochaine section, vous découvrirez les composants d'Apache Airflow.