Fermer

mai 15, 2024

Comment déployer Apache Airflow sur Vultr à l’aide d’Anaconda —

Comment déployer Apache Airflow sur Vultr à l’aide d’Anaconda —


Dans cet article, nous allons déployer une application Airflow dans un environnement Conda, sécuriser l’application à l’aide de Nginx et demander un certificat SSL à Let’s Encrypt.

Flux d’air est un outil populaire que nous pouvons utiliser pour définir, planifier et surveiller nos flux de travail complexes. Nous pouvons créer des graphiques acycliques dirigés (DAG) pour automatiser les tâches sur nos plates-formes de travail, et étant open source, Airflow dispose d’une communauté pour fournir une assistance et s’améliorer continuellement.

Il s’agit d’un article sponsorisé par Vultr. Vultr est la plus grande plateforme de cloud computing privée au monde. Un favori des développeurs, Vultr a servi plus de 1,5 million de clients dans 185 pays avec des solutions mondiales flexibles et évolutives de Cloud Compute, Cloud GPU, Bare Metal et Cloud Storage. En savoir plus sur Vultr.

Déployer un serveur sur Vultr

Commençons par déployer un serveur Vultr avec l’application Marketplace Anaconda.

  1. Inscrivez-vous et connectez-vous au Portail client Vultr.

  2. Accédez à la page Produits.

  3. Sélectionner Calculer dans le menu latéral.

  4. Cliquez sur Déployer le serveur.

  5. Sélectionner Calcul en nuage comme type de serveur.

  6. Choisis un Emplacement.

  7. Sélectionner Anaconda parmi les applications du marché.

    Sélection d'applications du marché Vultr Anaconda

  8. Choisis un Plan.

  9. Sélectionnez les fonctionnalités supplémentaires nécessaires dans la section « Fonctionnalités supplémentaires ».

  10. Clique le Déployer maintenant bouton.

    Bouton de déploiement du serveur Vultr

Création d’une base de données gérée Vultr

Après avoir déployé un serveur Vultr, nous allons ensuite déployer une base de données PostgreSQL gérée par Vultr. Nous créerons également deux nouvelles bases de données dans notre instance de base de données qui seront utilisées pour se connecter à notre application Airflow plus tard dans le blog.

  1. Ouvrez le Portail client Vultr.

  2. Clique le Des produits groupe de menus et accédez à Bases de données pour créer une base de données gérée PostgreSQL.

    Bouton de menu des produits de la base de données Vultr

  3. Cliquez sur Ajouter des bases de données gérées.

  4. Sélectionner PostgreSQL avec la dernière version comme moteur de base de données.

    Sélection PostgreSQL gérée par Vultr

  5. Sélectionner Configuration du serveur et Emplacement du serveur.

  6. Écrire un Étiquette pour le service.

    Base de données gérée par le bouton d'étiquette

  7. Cliquez sur Déployer maintenant.

    Bouton de déploiement de la base de données gérée Vultr

  8. Une fois la base de données déployée, sélectionnez Utilisateurs et bases de données.

    Utilisateurs de la base de données gérée par Vultr et section de base de données

  9. Cliquez sur Ajouter une nouvelle base de données.

  10. Tapez un nom, cliquez sur Ajouter une base de données et nomme-le airflow-pgsql.

  11. Répétez les étapes 9 et 10 pour ajouter une autre base de données dans la même base de données gérée et nommez-la airflow-celery.

Premiers pas avec Conda et Airflow

Maintenant que nous avons créé une instance PostgreSQL gérée par Vultr, nous allons utiliser le serveur Vultr pour créer un environnement Conda et installer les dépendances requises.

  1. Vérifiez la version de Conda :

  2. Créez un environnement Conda :

    $ conda create -n airflow python=3.8
  3. Activez l’environnement :

  4. Installez le serveur Redis :

    (airflow) $ apt install -y redis-server
  5. Activez le serveur Redis :

    (airflow) $ sudo systemctl enable redis-server
  6. Vérifiez l’état :

    (airflow) $ sudo systemctl status redis-server

    Vérification de l'état du serveur Redis

  7. Installez le gestionnaire de packages Python :

    (airflow) $ conda install pip
  8. Installez les dépendances requises :

    (airflow) $ pip install psycopg2-binary virtualenv redis
  9. Installez Airflow dans l’environnement Conda :

    (airflow) $ pip install "apache-airflow[celery]==2.8.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.8.txt"

Connexion d’Airflow à la base de données gérée Vultr

Après avoir préparé l’environnement, connectons maintenant notre application Airflow aux deux bases de données que nous avons créées précédemment dans notre instance de base de données et apportons les modifications nécessaires à la configuration Airflow pour rendre notre application prête pour la production.

  1. Définir la variable d’environnement pour la connexion à la base de données :

    (airflow) $ export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN="postgresql://user:password@hostname:port/db_name"

    Assurez-vous de remplacer le user, password, hostnameet port avec les valeurs réelles dans la section des détails de connexion en sélectionnant le airflow-pgsql base de données. Remplace le db_name avec airflow-pgsql.

    sélection des informations d'identification de la base de données airflow-pgsql

  2. Initialisez la base de données de métadonnées.

    Nous devons initialiser une base de données de métadonnées pour Airflow afin de créer les tables et le schéma nécessaires qui stockent les informations telles que les DAG et les informations liées à nos flux de travail :

    (airflow) $ airflow db init
  3. Ouvrez le fichier de configuration Airflow :

    (airflow) $ sudo nano ~/airflow/airflow.cfg
  4. Faites défiler vers le bas et modifiez le executor:

    executor = CeleryExecutor
  5. Liez la base de données PostgreSQL gérée par Vultr et modifiez la valeur de sql_alchemy_conn:

    sql_alchemy_conn = "postgresql://user:password@hostname:port/db_name"

    Assurez-vous de remplacer le user, password, hostnameet le port avec les valeurs réelles dans la section des détails de connexion en sélectionnant le airflow-pgsql base de données. Remplace le db_name avec airflow-pgsql.

  6. Faites défiler vers le bas et modifiez les ports du journal de travail et de déclenchement :

    worker_log_server_port = 8794
    trigger_log_server_port = 8795
  7. Changer la broker_url:

    broker_url = redis://localhost:6379/0
  8. Retirer le # et changer le result_backend:

    result_backend = db+postgresql://user:password@hostname:port/db_name

    Assurez-vous de remplacer le user, password, hostnameet port avec les valeurs réelles dans la section des détails de connexion en sélectionnant le airflow-celery base de données. Remplace le db_name avec airflow-celery.

    sélection des informations d'identification de la base de données airflow-céleri

  9. Enregistrez et quittez le fichier.

  10. Créez un utilisateur Airflow :

    (airflow) $ airflow users create \n    --username admin \n    --firstname Peter \n    --lastname Parker \n    --role Admin \n    --email spiderman@superhero.org

    Assurez-vous de remplacer toutes les valeurs des variables par les valeurs réelles.

    Entrez un mot de passe lorsque vous êtes invité à le définir pour l’utilisateur lors de l’accès au tableau de bord.

Démoniser l’application Airflow

Démonisons maintenant notre application Airflow afin qu’elle s’exécute en arrière-plan et continue de s’exécuter indépendamment même lorsque nous fermons le terminal et nous déconnectons.

Ces étapes nous aideront également à créer un service persistant pour le serveur Web Airflow, le planificateur et les travailleurs de céleri.

  1. Voir la airflow chemin:

    (airflow) $ which airflow

    Copiez et collez le chemin dans le presse-papiers.

  2. Créez un fichier de service de serveur Web Airflow :

    (airflow) $ sudo nano /etc/systemd/system/airflow-webserver.service
  3. Collez les configurations de service dans le fichier.

    airflow webserver est chargé de fournir une interface utilisateur Web qui nous permettra d’interagir et de gérer nos flux de travail. Ces configurations créeront un service exécuté en arrière-plan pour notre serveur Web Airflow :

    [Unit]
    Description="Airflow Webserver"
    After=network.target
    
    [Service]
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow webserver
    
    [Install]
    WantedBy=multi-user.target

    Assurez-vous de remplacer User et Group avec les détails réels de votre compte utilisateur sudo non root, et remplacez le ExecStart path avec le chemin Airflow réel, y compris le binaire exécutable que nous avons copié plus tôt dans le presse-papiers.

  4. Enregistrez et fermez le fichier.

  5. Activer le airflow-webserver service, afin que le serveur Web démarre automatiquement pendant le processus de démarrage du système :

    (airflow) $ systemctl enable airflow-webserver
  6. Démarrez le service :

    (airflow) $ sudo systemctl start airflow-webserver
  7. Assurez-vous que le service est opérationnel :

    (airflow) $ sudo systemctl status airflow-webserver

    Notre sortie devrait ressembler à celle illustrée ci-dessous.

    vérification de l'état du service airflow-webserver

  8. Créez un fichier de service Airflow Celery :

    (airflow) $ sudo nano /etc/systemd/system/airflow-celery.service
  9. Collez les configurations de service dans le fichier.

    airflow celery worker démarre un ouvrier du céleri. Celery est une file d’attente de tâches distribuée qui nous permettra de distribuer et d’exécuter des tâches sur plusieurs travailleurs. Les travailleurs se connectent à notre serveur Redis pour recevoir et exécuter des tâches :

    [Unit]
    Description="Airflow Celery"
    After=network.target
    
    [Service]
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow celery worker
    
    [Install]
    WantedBy=multi-user.target

    Assurez-vous de remplacer User et Group avec les détails réels de votre compte utilisateur sudo non root, et remplacez le ExecStart path avec le chemin Airflow réel, y compris le binaire exécutable que nous avons copié plus tôt dans le presse-papiers.

  10. Enregistrez et fermez le fichier.

  11. Activer le airflow-celery service:

    (airflow) $ sudo systemctl enable airflow-celery
  12. Démarrez le service :

    (airflow) $ sudo systemctl start airflow-celery
  13. Assurez-vous que le service est opérationnel :

    (airflow) $ sudo systemctl status airflow-celery
  14. Créez un fichier de service du planificateur Airflow :

    (airflow) $ sudo nano /etc/systemd/system/airflow-scheduler.service
  15. Collez les configurations de service dans le fichier.

    airflow scheduler est responsable de la planification et du déclenchement des DAG et des tâches qui y sont définies. Il vérifie également périodiquement l’état des DAG et des tâches :

    [Unit]
    Description="Airflow Scheduler"
    After=network.target
    
    [Service]
    User=example_user
    Group=example_user
    ExecStart=/home/example_user/.local/bin/airflow scheduler
    
    [Install]
    WantedBy=multi-user.target

    Assurez-vous de remplacer User et Group avec les détails réels de votre compte utilisateur sudo non root, et remplacez le ExecStart path avec le chemin Airflow réel, y compris le binaire exécutable que nous avons copié plus tôt dans le presse-papiers.

  16. Enregistrez et fermez le fichier.

  17. Activer le airflow-scheduler service:

    (airflow) $ sudo systemctl enable airflow-scheduler
  18. Démarrez le service :

    (airflow) $ sudo systemctl start airflow-scheduler
  19. Assurez-vous que le service est opérationnel :

    (airflow) $ sudo systemctl status airflow-scheduler

    Notre sortie devrait ressembler à celle illustrée ci-dessous.

    vérification de l'état du service du planificateur de flux d'air

Configuration de Nginx en tant que proxy inverse

Nous avons créé des services persistants pour l’application Airflow, nous allons donc maintenant configurer Nginx en tant que proxy inverse pour améliorer la sécurité et l’évolutivité de notre application en suivant les étapes décrites ci-dessous.

  1. Connectez-vous au Portail client Vultr.

  2. Accédez au Des produits page.

  3. Dans le menu latéral, développez le Réseau faites défiler vers le bas et sélectionnez DNS.

  4. Clique le Ajouter un domaine bouton au centre.

  5. Suivez la procédure de configuration pour ajouter votre nom de domaine en sélectionnant l’adresse IP de votre serveur.

  6. Définissez les noms d’hôte suivants comme serveurs de noms principal et secondaire de votre domaine auprès de votre registraire de domaine :

    • ns1.vultr.com
    • ns2.vultr.com
  7. Installez Nginx :

    (airflow) $ apt install nginx
  8. Assurez-vous de vérifier si le serveur Nginx est opérationnel :

    (airflow) $ sudo systemctl status nginx
  9. Créez un nouveau fichier de configuration d’hôte virtuel Nginx dans le sites-available annuaire:

    (airflow) $ sudo nano /etc/nginx/sites-available/airflow.conf
  10. Ajoutez les configurations au fichier.

    Ces configurations dirigeront le trafic sur notre application du domaine réel vers le serveur backend à l’adresse http://127.0.0.1:8080 en utilisant un passe proxy :

    server {
    
        listen 80;
        listen [::]:80;
        server_name airflow.example.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;  
        }
    
    }

    Assurez-vous de remplacer airflow.example.com avec le domaine réel que nous avons ajouté dans le tableau de bord Vultr.

  11. Enregistrez et fermez le fichier.

  12. Liez le fichier de configuration au sites-enabled répertoire pour activer le fichier de configuration :

    (airflow) $ sudo ln -s /etc/nginx/sites-available/airflow.conf /etc/nginx/sites-enabled/
  13. Assurez-vous de vérifier la configuration pour les erreurs :

    (airflow) $ sudo nginx -t

    Notre sortie devrait ressembler à celle illustrée ci-dessous.

    vérification de la configuration nginx

  14. Redémarrez Nginx pour appliquer les modifications :

    (airflow) $ sudo systemctl reload nginx
  15. Autoriser le port HTTP 80 via le pare-feu pour toutes les connexions entrantes :

    (airflow) $ sudo ufw allow 80/tcp
  16. Autoriser le port HTTPS 443 via le pare-feu pour toutes les connexions entrantes :

    (airflow) $ sudo ufw allow 443/tcp
  17. Rechargez les règles de pare-feu pour enregistrer les modifications :

    (airflow) $ sudo ufw reload

Application des certificats SSL Let’s Encrypt à l’application Airflow

La dernière étape consiste à appliquer un Chiffrons Certificat SSL à notre application Airflow afin qu’elle devienne beaucoup plus sécurisée et sauve notre application des attaques indésirables.

  1. À l’aide de Snap, installez le client Certbot Let’s Encrypt :

    (airflow) $ snap install --classic certbot
  2. Obtenez un nouveau certificat SSL pour notre domaine :

    (airflow) $ certbot --nginx -d airflow.example.com

    Assurez-vous de remplacer airflow.example.com avec notre nom de domaine actuel.
    Et lorsque vous y êtes invité, entrez une adresse e-mail et appuyez sur Oui d’accepter les conditions de Let’s Encrypt.

  3. Testez que le certificat SSL se renouvelle automatiquement à l’expiration.

    Le renouvellement automatique garantit que nos certificats SSL sont à jour, réduisant ainsi le risque d’expiration des certificats et préservant la sécurité de notre application :

    (airflow) $ certbot renew --dry-run
  4. Utilisez un navigateur Web pour ouvrir notre application Airflow : https://airflow.example.com.

    Lorsque vous y êtes invité, entrez le nom d’utilisateur et le mot de passe que nous avons créés précédemment.

    connexion au tableau de bord du flux d'air

    En accédant au tableau de bord, tous les DAG fournis par défaut seront visibles.

    tableau de bord du flux d'air

Conclusion

Dans cet article, nous avons montré comment créer des environnements Conda, déployer une application Airflow prête pour la production et améliorer les performances et la sécurité d’une application.




Source link