Tester les DAG Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Avant de déployer des DAG en production, vous pouvez exécuter des sous-commandes de CLI Airflow pour analyser le code DAG dans le même contexte que celui dans lequel il est exécuté.

Tester les DAG localement avec l'outil de ligne de commande de développement local Composer

L'outil de CLI de développement local Composer simplifie le développement de DAG Apache Airflow pour Cloud Composer 2 en exécutant un environnement Airflow localement. Cet environnement Airflow local utilise une image d'une version Cloud Composer 2 spécifique.

Vous pouvez développer et tester vos DAG à l'aide de cet environnement Airflow local, puis les transférer vers votre environnement Cloud Composer de test. Le reste de ce guide décrit les tests des DAG dans un environnement Cloud Composer de test.

Réaliser des tests pendant la création d'un DAG

Vous pouvez exécuter une instance de tâche en local et afficher le résultat du journal. L'affichage du résultat vous permet de vérifier la syntaxe et les erreurs de tâche. Le test en local ne vérifie pas les dépendances et ne communique pas non plus l'état à la base de données.

Nous vous recommandons de placer les DAG dans un dossier data/test dans votre environnement de test.

Créer un répertoire de test

Dans le bucket de votre environnement, créez un répertoire de test et copiez-y vos DAG.

gcloud storage cp BUCKET_NAME/dags \
  BUCKET_NAME/data/test --recursive

Remplacez les éléments suivants :

  • BUCKET_NAME: nom du bucket associé à votre Cloud Composer.

Exemple :

gcloud storage cp gs://us-central1-example-environment-a12bc345-bucket/dags \
  gs://us-central1-example-environment-a12bc345-bucket/data/test --recursive

Pour en savoir plus sur l'importation des DAG, consultez Ajouter et mettre à jour des DAG

Rechercher les erreurs de syntaxe

Pour rechercher les erreurs de syntaxe dans les DAG que vous avez importés dans le dossier /data/test, saisissez la commande gcloud suivante :

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  dags list -- --subdir /home/airflow/gcs/data/test

Remplacez les éléments suivants :

  • ENVIRONMENT_NAME : nom de l'environnement.
  • ENVIRONMENT_LOCATION : région où se trouve l'environnement.

Rechercher les erreurs de tâche

Pour rechercher les erreurs spécifiques à une tâche dans les DAG que vous avez importés dans /data/test exécutez la commande gcloud suivante:

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  tasks test -- --subdir /home/airflow/gcs/data/test \
  DAG_ID TASK_ID \
  DAG_EXECUTION_DATE

Remplacez les éléments suivants :

  • ENVIRONMENT_NAME : nom de l'environnement.
  • ENVIRONMENT_LOCATION: région dans laquelle se trouve l'environnement.
  • DAG_ID: ID du DAG.
  • TASK_ID: ID de la tâche.
  • DAG_EXECUTION_DATE: date d'exécution du DAG. Cette date est utilisée pour les modèles. Quelle que soit la date spécifiée ici, le DAG s'exécute immédiatement.

Exemple :

gcloud composer environments run \
  example-environment \
  --location us-central1 \
  tasks test -- --subdir /home/airflow/gcs/data/test \
  hello_world print_date 2021-04-22

Mettre à jour et tester un DAG déployé

Pour tester les mises à jour de vos DAG dans votre environnement de test, procédez comme suit :

  1. Copiez le DAG déployé que vous souhaitez mettre à jour vers data/test.
  2. Mettez à jour le DAG.
  3. Testez le DAG.
    1. Recherchez les erreurs de syntaxe.
    2. Recherchez les erreurs spécifiques à la tâche.
  4. Assurez-vous que le DAG s'exécute correctement.
  5. Désactivez le DAG dans votre environnement de test.
    1. Accédez à la page DAG de l'interface utilisateur d'Airflow.
    2. Si le DAG que vous modifiez s'exécute en permanence, désactivez-le.
    3. Pour accélérer les tâches en attente, cliquez sur les tâches et marquez-les comme réussies.
  6. Déployez le DAG dans votre environnement de production.
    1. Désactivez le DAG dans votre environnement de production.
    2. Importez le DAG mis à jour dans le dossier dags/ de votre environnement de production.

Questions fréquentes sur les tests des DAG

Comment isoler les exécutions de DAG dans les environnements de production et de test ?

Par exemple, Airflow dispose d'un dépôt global de code source dans le dossier dags/, partagé par toutes les exécutions de DAG. Vous souhaitez mettre à jour le code source en production ou en test sans interférer avec l'exécution des DAG.

Airflow ne fournit pas de forte isolation DAG. Nous vous recommandons de maintenir des environnements de production et de test Cloud Composer distincts pour éviter que vos DAG de test n'interfèrent avec vos DAG de production.

Comment éviter les interférences de DAG lorsque j'effectue des tests d'intégration à partir de différentes branches GitHub ?

Utilisez des noms de tâches uniques pour éviter les interférences. Par exemple, vous pouvez ajouter le nom de la branche en tant que préfixe à vos ID de tâche.

Quelle est la méthode recommandée pour les tests d'intégration avec Airflow ?

Nous vous recommandons d'utiliser un environnement dédié pour les tests d'intégration avec Airflow. Une méthode pour signaler le succès de l'exécution du DAG consiste à écrire dans un fichier d'un dossier Cloud Storage et à en vérifier le contenu dans vos propres cas de test d'intégration.

Comment collaborer efficacement avec d'autres contributeurs DAG ?

Chaque contributeur peut disposer d'un sous-répertoire dans le dossier data/ pour le développement.

Les DAG ajoutés au dossier data/ ne sont pas automatiquement sélectionnés par le serveur Web ou le programmeur Airflow.

Les contributeurs DAG peuvent créer des exécutions de DAG manuelles à l'aide de la commande gcloud composer environments run et de la sous-commande test avec l'option --subdir, afin de spécifier le répertoire de développement du contributeur.

Exemple :

gcloud composer environments run test-environment-name \
  tasks test -- dag-id task-id execution-date \
  --subdir /home/airflow/gcs/data/alice_dev

Comment maintenir la synchronisation des environnements de déploiement et de production ?

Pour gérer les accès, procédez comme suit :

Pour déployer du développement jusqu'à la production, procédez comme suit :

  • Assurez une configuration cohérente, telle que les variables d'environnement et les packages PyPI.

  • Assurez la cohérence des arguments du DAG. Pour éviter le codage en dur, nous vous recommandons d'utiliser des macros et des variables Airflow.

    Exemple :

    gcloud composer environments run test-environment-name \
      variables set -- DATA_ENDPOINT_KEY DATA_ENDPOINT_VALUE
    

Étape suivante