web-dev-qa-db-fra.com

Moyen efficace de déployer des fichiers DAG sur un flux d'air

Existe-t-il des meilleures pratiques suivies pour déployer de nouvelles dags sur le flux d'air?

J'ai vu quelques commentaires sur le forum Google indiquant que les dags sont enregistrés dans un référentiel GIT et que ceux-ci sont synchronisés périodiquement vers l'emplacement local dans le cluster de flux d'air.
En ce qui concerne cette approche, j’avais quelques questions

  • Est-ce que nous maintenons des fichiers dag séparés pour des environnements séparés? (test. production)
    • Comment gérer la restauration d'un ETL vers une version plus ancienne au cas où la nouvelle version aurait un bogue?

      Toute aide ici est hautement appréciée. Faites-moi savoir au cas où vous auriez besoin de plus de détails?

  • 31
    Sreenath Kamath

    Voici comment nous gérons cela pour notre équipe.

    Tout d’abord en termes de convention de nommage, chacun de nos nom du fichier DAG correspond à DAG Id du contenu du DAG lui-même (y compris la version du DAG). Ceci est utile car, en fin de compte, c'est l'ID de DAG que vous voyez dans l'interface utilisateur d'Airflow, ce qui vous permet de savoir exactement quel fichier a été utilisé derrière chaque DAG.

    Exemple pour un DAG comme celui-ci:

    from airflow import DAG
    from datetime import datetime, timedelta
    
    default_args = {
      'owner': 'airflow',
      'depends_on_past': False,
      'start_date': datetime(2017,12,05,23,59),
      'email': ['[email protected]'],
      'email_on_failure': True
    }
    
    dag = DAG(
      'my_Nice_dag-v1.0.9', #update version whenever you change something
      default_args=default_args,
      schedule_interval="0,15,30,45 * * * *",
      dagrun_timeout=timedelta(hours=24),
      max_active_runs=1)
      [...]
    

    Le nom du fichier DAG serait: my_Nice_dag-v1.0.9.py

    • Tous nos fichiers DAG sont stockés dans un dépôt Git (entre autres)
    • Chaque fois qu'une demande de fusion est effectuée dans notre branche principale, notre pipeline d'intégration continue commence une nouvelle construction et empaquette nos fichiers DAG dans un fichier Zip (nous utilisons Atlassian Bamboo, mais il existe d'autres solutions telles que Jenkins, Circle CI, Travis ...).
    • En Bamboo, nous avons configuré un script de déploiement (Shell) qui décompresse le package et place les fichiers DAG sur le serveur Airflow dans le dossier / dags.
    • Nous déployons généralement les DAG dans DEV pour les tests, puis vers UAT et enfin PROD. Le déploiement se fait en un clic dans l’interface utilisateur de Bamboo, grâce au script Shell mentionné ci-dessus.

    Avantages

    1. Comme vous avez inclus la version du DAG dans votre nom de fichier, la version précédente de votre fichier DAG n'est pas écrasée dans le dossier DAG, vous pouvez donc y revenir facilement.
    2. Lorsque votre nouveau fichier DAG est chargé dans Airflow, vous pouvez le reconnaître dans l'interface utilisateur grâce au numéro de version.
    3. Parce que votre nom de fichier DAG = ID de DAG, vous pouvez même améliorer le script de déploiement en ajoutant une ligne de commande Airflow pour activer automatiquement vos nouveaux DAG une fois qu'ils sont déployés.
    4. Chaque version des DAG étant historisée dans Git, nous pouvons toujours revenir aux versions précédentes si nécessaire.
    39
    Alexis.Rolland