Accéder à l'interface utilisateur Web Apache Airflow

Cloud Composer 1 | Cloud Composer 2

Apache Airflow comprend une interface utilisateur Web (UI) qui vous permet de gérer les workflows (DAG), de gérer l'environnement Airflow et d'effectuer des tâches d'administration. Par exemple, vous pouvez utiliser l'interface Web pour examiner la progression d'un DAG, configurer une nouvelle connexion de données ou consulter les journaux issus des exécutions précédentes du DAG.

Serveur Web Airflow

Chaque environnement Cloud Composer dispose d'un serveur Web qui exécute l'interface Web Airflow. Le serveur Web fait partie de l'architecture de l'environnement Cloud Composer.

Le serveur Web analyse les fichiers de définition du DAG dans le dossier dags/, et doit pouvoir accéder aux données et aux ressources du DAG pour le charger et diffuser des requêtes HTTP.

Le serveur Web actualise les DAG toutes les 60 secondes, ce qui correspond à la valeur worker_refresh_interval par défaut dans Cloud Composer. Une erreur de serveur Web peut survenir si le serveur Web ne peut pas analyser tous les DAG pendant l'intervalle d'actualisation.

Le chargement des DAG peut prendre plus de 60 secondes s'il y a un grand nombre de fichiers DAG ou si une charge de travail non négligeable est nécessaire pour charger les fichiers DAG. Pour vous assurer que le serveur Web reste accessible quel que soit temps de chargement des DAG, vous pouvez configurer le chargement asynchrone des DAG pour analyser et charger des DAG en arrière-plan selon un intervalle préconfiguré (disponible dans composer-1.7.1-airflow-1.10.2 et versions ultérieures). Cette configuration peut également réduire le temps d'actualisation des DAG.

Outre le dépassement de l'intervalle d'actualisation des nœuds de calcul, le serveur Web peut dans la plupart des cas gérer de manière optimale les échecs de chargement des DAG. Les DAG qui provoquent le plantage ou la fermeture du serveur Web peuvent entraîner l'affichage d'erreurs dans le navigateur. Pour en savoir plus, reportez-vous à la section Dépanner les DAG.

Si vous continuez à rencontrer des problèmes de serveur Web en raison de l'analyse des DAG, nous vous recommandons d'utiliser le chargement asynchrone des DAG.

Avant de commencer

  • Vous devez disposer d'un rôle permettant d'afficher les environnements Cloud Composer. Pour plus d'informations, consultez la section Contrôle des accès.

  • Lors de la création d'un environnement, Cloud Composer configure l'URL du serveur Web qui exécute l'interface Web Airflow. L'URL n'est pas personnalisable.

  • La fonctionnalité de contrôle des accès à l'interface utilisateur Airflow (contrôle des accès basé sur les rôles Airflow) pour l'interface Web Airflow est compatible avec les environnements Cloud Composer exécutant Composer version 1.13.4 ou ultérieure, Airflow version 1.10.10 ou ultérieure et Python 3.

Accéder à l'interface Web Airflow

Le service du serveur Web Airflow est déployé sur le domaine appspot.com et permet d'accéder à l'interface Web Airflow. Cloud Composer 1 fournit un accès à l'interface en fonction des identités des utilisateurs et des liaisons de stratégie IAM définies pour les utilisateurs. Cloud Composer 1 utilise Identity-Aware Proxy à cette fin.

Il peut s'écouler 25 minutes après la création d'un environnement Cloud Composer avant que l'interface Web termine l'hébergement et devienne accessible.

Accéder à l'interface Web à partir de la console Google Cloud

Pour accéder à l'interface Web Airflow depuis la console Google Cloud:

  1. Dans la console Google Cloud, accédez à la page Environnements.

    Accéder à la page Environnements

  2. Dans la colonne Serveur Web Airflow, cliquez sur le lien Airflow correspondant à votre environnement.

  3. Connectez-vous avec le compte Google disposant des autorisations appropriées.

Limiter l'accès au serveur Web Airflow

Les environnements Composer vous permettent de limiter l'accès au serveur Web Airflow:

  • Vous pouvez bloquer tout accès ou autoriser l'accès à partir de plages d'adresses IP externes IPv4 ou IPv6 spécifiques.
  • Il n'est pas possible de configurer les plages d'adresses IP autorisées à l'aide d'adresses IP privées.

Récupérer l'URL de l'interface Web via l'outil de ligne de commande gcloud

Vous pouvez accéder à l'interface Web Airflow depuis n'importe quel navigateur Web. Pour obtenir l'URL de l'interface Web, saisissez la commande gcloud suivante :

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

Remplacez les éléments suivants :

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

La commande gcloud affiche les propriétés d'un environnement Cloud Composer, y compris l'URL de l'interface Web. L'URL est répertoriée en tant que airflowUri.

config:
  airflowUri: https://example-tp.appspot.com

Configurer le chargement asynchrone des DAG

Lorsque le chargement asynchrone des DAG est activé, le serveur Web Airflow crée un processus. Ce processus charge les DAG en arrière-plan, envoie les DAG nouvellement chargés à des intervalles définis par l'option dagbag_sync_interval, puis se met en veille.

Le processus s'active régulièrement pour recharger les DAG, l'intervalle étant défini par l'option collect_dags_interval.

Pour activer le chargement asynchrone des DAG, procédez comme suit :

  1. Désactivez la sérialisation des DAG. Le chargement asynchrone des DAG ne peut pas être utilisé avec la sérialisation des DAG. L'utilisation des options de configuration Airflow async_dagbag_loader et store_serialized_dags génère des erreurs HTTP 503 et entraîne un panne de votre environnement.

  2. Ignorez les options de configuration Airflow suivantes :

    Section Clé Valeur Remarques
    webserver async_dagbag_loader True La valeur par défaut est False.
    webserver collect_dags_interval 30 La valeur par défaut est 30. Utilisez une valeur plus faible pour obtenir des actualisations plus rapides.
    webserver dagbag_sync_interval 10 La valeur par défaut est 10.
    webserver worker_refresh_interval 3600 La valeur par défaut est 60. Avec le chargement asynchrone des DAG, vous pouvez utiliser un intervalle d'actualisation plus long.

Redémarrer le serveur Web

Lors du débogage ou du dépannage des environnements Cloud Composer, certains problèmes peuvent être résolus en redémarrant le serveur Web Airflow. Vous pouvez redémarrer le serveur Web à l'aide de l'API restartWebServer ou de la commande gcloud restart-web-server :

gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

Configurer l'accès réseau du serveur Web

Les paramètres d'accès au serveur Web Airflow ne dépendent pas du type de votre environnement. À la place, vous configurez l'accès au serveur Web séparément. Par exemple, un environnement d'adresse IP privée peut toujours laisser l'interface utilisateur d'Airflow accessible depuis Internet.

Il n'est pas possible de configurer les plages d'adresses IP autorisées à l'aide d'adresses IP privées.

Console

  1. Dans la console Google Cloud, accédez à la page Environnements.

    Accéder à la page Environnements

  2. Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.

  3. Accédez à l'onglet Configuration de l'environnement.

  4. Dans la section Configuration du réseau, recherchez l'élément Contrôle d'accès du serveur Web et cliquez sur Modifier.

  5. Dans la boîte de dialogue Contrôle de l'accès au réseau du serveur Web:

    • Pour fournir l'accès au serveur Web Airflow à partir de toutes les adresses IP, sélectionnez Autoriser l'accès à partir de toutes les adresses IP.

    • Pour limiter l'accès à des plages d'adresses IP spécifiques, sélectionnez Autoriser l'accès uniquement depuis des adresses IP spécifiques. Dans le champ Plage d'adresses IP, spécifiez une plage d'adresses IP au format CIDR. Dans le champ Description, spécifiez une description facultative pour cette plage. Si vous souhaitez spécifier plusieurs plages, cliquez sur Ajouter une plage d'adresses IP.

    • Pour refuser l'accès pour toutes les adresses IP, sélectionnez Autoriser l'accès uniquement depuis des adresses IP spécifiques, puis cliquez sur Supprimer l'élément à côté de l'entrée de plage vide.

gcloud

Lorsque vous mettez à jour un environnement, les arguments suivants contrôlent les paramètres d'accès du serveur Web:

  • --web-server-allow-all permet d'accéder à Airflow à partir de toutes les adresses IP. Il s'agit de l'option par défaut.

  • --web-server-allow-ip limite l'accès à des plages d'adresses IP sources spécifiques. Pour spécifier plusieurs plages d'adresses IP, utilisez cet argument plusieurs fois.

  • --web-server-deny-all interdit l'accès pour toutes les adresses IP.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

Remplacez les éléments suivants :

  • ENVIRONMENT_NAME : nom de votre environnement
  • LOCATION: région dans laquelle se trouve l'environnement.
  • WS_IP_RANGE: plage d'adresses IP, au format CIDR, pouvant accéder à l'interface utilisateur d'Airflow.
  • WS_RANGE_DESCRIPTION: description de la plage d'adresses IP.

Exemple :

gcloud composer environments update example-environment \
    --location us-central1 \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

  1. Créez une requête API [environments.patch][api-patch].

  2. Dans cette requête :

    1. Dans le paramètre updateMask, spécifiez le masque config.webServerNetworkAccessControl.

    2. Dans le corps de la requête, spécifiez la manière dont les journaux des tâches Airflow doivent être enregistrés:

      • Pour permettre l'accès à Airflow à partir de toutes les adresses IP, spécifiez un élément config vide (l'élément webServerNetworkAccessControl ne doit pas être présent).

      • Pour limiter l'accès à des plages d'adresses IP spécifiques, spécifiez une ou plusieurs plages dans allowedIpRanges.

      • Pour interdire l'accès à toutes les adresses IP, spécifiez un élément webServerNetworkAccessControl vide. L'élément webServerNetworkAccessControl doit être présent, mais ne doit pas contenir d'élément allowedIpRanges.

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

Remplacez les éléments suivants :

  • WS_IP_RANGE: plage d'adresses IP, au format CIDR, pouvant accéder à l'interface utilisateur d'Airflow.
  • WS_RANGE_DESCRIPTION: description de la plage d'adresses IP.

Exemple :

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    }
  }
}

Terraform

Dans le bloc allowed_ip_range, spécifiez dans web_server_network_access_control les plages d'adresses IP autorisées à accéder au serveur Web.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

Remplacez :

  • WS_IP_RANGE par la plage d'adresses IP, au format CIDR, pouvant accéder à l'interface utilisateur d'Airflow.
  • WS_RANGE_DESCRIPTION par la description de la plage d'adresses IP.

Exemple :

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }

    }
}

Étapes suivantes