Tester les DAG Airflow

Cloud Composer 1 | Cloud Composer 2

Avant de déployer des DAG en production, vous pouvez exécuter des sous-commandes de la CLI Airflow pour analyser le code du DAG dans le contexte où le DAG est exécuté.

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.

gsutil cp -r BUCKET_NAME/dags \
  BUCKET_NAME/data/test

Remplacez les éléments suivants :

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

Exemple :

gsutil cp -r gs://us-central1-example-environment-a12bc345-bucket/dags \
  gs://us-central1-example-environment-a12bc345-bucket/data/test

Pour en savoir plus sur l'importation des DAG, consultez la section 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:

Airflow 2

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

Airflow 1

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  list_dags -- -sd /home/airflow/gcs/data/test

Remplacez les éléments suivants :

  • ENVIRONMENT_NAME: nom de l'environnement.
  • ENVIRONMENT_LOCATION: région dans laquelle se trouve l'environnement.

Rechercher les erreurs de tâche

Pour rechercher les erreurs spécifiques aux tâches dans les DAG que vous avez importés dans le dossier /data/test, exécutez la commande gcloud suivante:

Airflow 2

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

Airflow 1

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  test -- -sd /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 :

Airflow 2

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

Airflow 1

gcloud composer environments run example-environment \
  --location us-central1 \
  test -- -sd /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. Tester 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 :

Airflow 2

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

Airflow 1

gcloud composer environments run test-environment-name \
  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 :

    Airflow 2

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

    Airflow 1

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

Étapes suivantes