Gérer les connexions Airflow

Cette page explique comment utiliser les connexions Airflow.

Les connexions Airflow vous permettent d'accéder aux ressources des projets Google Cloud à partir d'un environnement Cloud Composer. Vous créez des ID de connexion Airflow pour stocker des informations, telles que des identifiants et des noms d'hôte, et vos workflows font référence aux ID de connexion. Les connexions Airflow sont la méthode recommandée pour stocker les secrets et les identifiants utilisés dans les workflows.

Les connexions Airflow vous permettent de stocker les informations de connexion requises par un environnement Cloud Composer pour communiquer avec d'autres API, telles que des projets Google Cloud, d'autres fournisseurs cloud ou des services tiers.

Une connexion Airflow peut stocker des informations, par exemple des identifiants, des noms d'hôte ou des paramètres d'API supplémentaires. Chaque connexion est associée à un ID que vous pouvez utiliser dans les tâches de workflow pour référencer les informations prédéfinies. Nous vous recommandons d'utiliser les connexions Airflow pour stocker les secrets et les identifiants des tâches de workflow.

Le type de connexion Google Cloud active les intégrations Google Cloud.

Clé fernet et connexions sécurisées

Lorsque vous créez un environnement, Cloud Composer génère une clé fernet unique et permanente pour l'environnement et sécurise par défaut les options de connexion supplémentaires. Vous pouvez afficher la clé fernet_key dans la configuration Airflow. Pour en savoir plus sur la sécurisation des connexions, consultez la section Sécuriser les connexions.

Utiliser les connexions par défaut

Par défaut, Cloud Composer configure les connexions Airflow suivantes pour Google Cloud Platform :

  • bigquery_default
  • google_cloud_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Vous pouvez utiliser ces connexions depuis vos DAG à l'aide de l'ID de connexion par défaut. L'exemple suivant utilise l'opérateur BigQueryOperator avec la connexion par défaut.

task_default = bigquery_operator.BigQueryOperator(
    task_id='task_default_connection',
    bql='SELECT 1', use_legacy_sql=False)

Vous pouvez également spécifier explicitement l'ID de connexion lorsque vous créez l'opérateur.

task_explicit = bigquery_operator.BigQueryOperator(
    task_id='task_explicit_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Composer creates a 'google_cloud_default' connection by default.
    bigquery_conn_id='google_cloud_default')

Accéder aux ressources d'un autre projet

La méthode recommandée pour permettre à votre environnement Cloud Composer d'accéder aux ressources des projets Google Cloud consiste à utiliser les connexions par défaut et à attribuer les autorisations appropriées de gestion de l'authentification et des accès au compte de service associé à votre environnement.

Les sections suivantes fournissent des exemples expliquant comment autoriser des lectures et des écritures sur des buckets Cloud Storage dans your-storage-project pour un environnement Cloud Composer déployé dans l'ID de projet your-composer-project.

Déterminer le compte de service associé à votre environnement

Console

  1. Dans Cloud Console, ouvrez la page Environnements.

    Ouvrir la page Environnements

  2. Dans la colonne Nom, cliquez sur le nom de l'environnement pour ouvrir la page Détails de l'environnement.
  3. Notez le Compte de service. Cette valeur est une adresse e-mail, par exemple service-account-name@your-composer-project.iam.gserviceaccount.com.

gcloud

Saisissez la commande suivante et remplacez VARIABLES par les valeurs appropriées :

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION \
    --format="get(config.nodeConfig.serviceAccount)" 

Le résultat affiche une adresse, telle que service-account-name@your-composer-project.iam.gserviceaccount.com.

Accorder les autorisations IAM appropriées au compte de service

Pour autoriser les lectures et les écritures dans des buckets Cloud Storage dans your-storage-project, accordez le rôle roles/storage.objectAdmin au compte de service associé à votre environnement Cloud Composer.

Console

  1. Sur la page IAM et administration de votre projet de stockage

    Ouvrir la page IAM et administration

  2. Cliquez sur Ajouter des membres.

  3. Dans la boîte de dialogue Ajouter des membres, indiquez l'adresse e-mail complète du compte de service associé à votre environnement Cloud Composer.

  4. Dans la liste déroulante Sélectionner un rôle, sélectionnez les autorisations appropriées. Pour cet exemple, sélectionnez le rôle Stockage > Administrateur des objets.

  5. Cliquez sur Ajouter.

gcloud

Utilisez la commande gcloud projects add-iam-policy-binding pour ajouter des autorisations IAM au niveau du projet. Remplacez les VARIABLES par les valeurs appropriées :

gcloud projects add-iam-policy-binding YOUR_STORAGE_PROJECT \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/storage.objectAdmin 

Une fois les autorisations appropriées accordées, vous pouvez accéder aux ressources du projet your-storage-project avec les mêmes connexions Airflow par défaut que celles que vous utilisez pour accéder aux ressources du projet your-composer-project.

Créer des connexions Airflow

Avant de commencer

Accordez les autorisations IAM appropriées au compte de service associé à votre environnement Cloud Composer et utilisez les connexions par défaut dans vos définitions de DAG. Si vous ne pouvez pas le faire, suivez les étapes décrites dans cette section.

Créer une connexion à un autre projet

Les étapes suivantes fournissent des exemples permettant d'autoriser des lectures et des écritures sur des buckets Cloud Storage dans your-storage-project pour un environnement Cloud Composer déployé dans l'ID de projet your-composer-project.

  1. Créez un compte de service dans your-storage-project et téléchargez une clé au format JSON :

    1. Dans Cloud Console, accédez à la page Comptes de service.

      Ouvrir la page "Comptes de service"

    2. Cliquez sur Sélectionner un projet.

    3. Sélectionnez votre projet et cliquez sur Ouvrir.

    4. Cliquez sur Créer un compte de service.

    5. Saisissez un nom de compte de service, puis sélectionnez le rôle que vous souhaitez attribuer à ce compte de service, tel que Stockage > Administrateur des objets.

    6. Cochez la case Indiquer une nouvelle clé privée, puis cliquez sur Enregistrer.

    7. Ouvrez le fichier JSON dans un éditeur de texte brut. Le contenu devrait ressembler à ceci :

      { "type": "service_account", "project_id": "your-storage-project", ... }

  2. Créer une connexion :

    UI d'Airflow

    1. Accédez à l'interface Web Airflow de votre environnement Cloud Composer.

    2. Dans l'interface Web Airflow, ouvrez la page Administrateur > Connexions.

      Capture d'écran d'Airflow. Ouvrez le menu Administrateur > Connexions.

    3. Pour ouvrir le formulaire de création de connexion, cliquez sur l'onglet Create (Créer).

      Capture d'écran d'Airflow. Cliquez sur l'onglet

    4. Créer une connexion :

      1. Pour choisir un ID de connexion, remplissez le champ Conn Id (ID de connexion), avec my_gcp_connection par exemple. Utilisez cet ID dans vos fichiers de définition DAG.
      2. Dans le champ Type de connexion, sélectionnez l'option Google Cloud Platform.
      3. Saisissez une valeur pour l'ID de projet correspondant au projet auquel votre compte de service appartient.
      4. Effectuez l'une des opérations suivantes :

        1. Copiez le fichier de clé JSON du compte de service que vous avez téléchargé dans le répertoire data/ du bucket Cloud Storage de votre environnement. Ensuite, dans Keyfile Path (Chemin d'accès au fichier de clé), saisissez le chemin d'accès au fichier de clé JSON local sur le nœud de calcul Airflow, tel que /home/airflow/gcs/data/keyfile.json.
        2. Dans Fichier de clé JSON, copiez le contenu du fichier de clé JSON du compte de service que vous avez téléchargé.

        Les utilisateurs ayant accès aux connexions Airflow via l'interface de ligne de commande ou l'interface utilisateur Web peuvent lire les identifiants stockés dans keyfile_dict. Pour sécuriser ces identifiants, nous vous recommandons d'utiliser le chemin d'accès au fichier de clés et une LCA Cloud Storage afin de restreindre l'accès au fichier de clé.

      5. Saisissez une valeur dans le champ Scopes (Champs d'application). Il est recommandé d'utiliser https://www.googleapis.com/auth/cloud-platform comme champ d'application, et d'utiliser des autorisations IAM sur le compte de service afin de limiter l'accès aux ressources Google Cloud.

      6. Pour créer la connexion, cliquez sur Save (Enregistrer).

        Capture d'écran d'Airflow. Cliquez sur l'onglet

    gcloud

    Saisissez la commande suivante :

    gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION connections -- --add \
    --conn_id=CONNECTION_ID --conn_type=google_cloud_platform \
    --conn_extra '{"extra\__google\_cloud\_platform\__CMD_ARGS": "...",
    "extra\__google\_cloud\_platform\__CMD_ARGS": "...", ...}'
    

    Où :

    • ENVIRONMENT_NAME est le nom de l'environnement.
    • LOCATION est la région Compute Engine dans laquelle se trouve l'environnement.
    • CONNECTION_ID est l'identifiant de la connexion. Utilisez des minuscules et séparez les mots par des traits de soulignement.
    • CMD_ARGS représentent ce qui suit :
      • project est un ID de projet. Seul le paramètre extra__google_cloud_platform__project est obligatoire.
      • key_path est un chemin d'accès à un fichier de clé JSON local sur le nœud de calcul Airflow, tel que /home/airflow/gcs/data/keyfile.json. Si ce champ est fourni, le paramètre scope est requis. Utilisez key_path ou keyfile_dict, mais pas les deux à la fois.
      • keyfile_dict est un objet JSON qui spécifie le contenu du fichier de clé JSON que vous avez téléchargé. Si ce champ est fourni, le paramètre scope est requis. Utilisez keyfile_dict ou key_path, mais pas les deux à la fois. Les utilisateurs ayant accès aux connexions Airflow via la CLI ou l'interface utilisateur Web peuvent lire les identifiants stockés dans keyfile_dict. Pour sécuriser ces identifiants, nous vous recommandons d'utiliser key_path et d'appliquer une LCA Cloud Storage pour restreindre l'accès au fichier de clé.
      • scope est une liste de champs d'application OAuth séparés par une virgule.

    Exemple :

    gcloud composer environments run test-environment \
     --location us-central1 connections -- --add \
     --conn_id=my_gcp_connection --conn_type=google_cloud_platform \
     --conn_extra '{"extra\__google\_cloud\_platform\__project": "your-storage-project",
     "extra\__google\_cloud\_platform\__key_path": "/home/airflow/gcs/data/keyfile.json",
     "extra\__google\_cloud\_platform\__scope": "https://www.googleapis.com/auth/cloud-platform"}'

Utiliser une nouvelle connexion Airflow

Pour utiliser la connexion que vous avez créée, définissez-la comme argument d'ID de connexion correspondant lorsque vous créez un opérateur Google Cloud Airflow.

task_custom = bigquery_operator.BigQueryOperator(
    task_id='task_custom_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Set a connection ID to use a connection that you have created.
    bigquery_conn_id='my_gcp_connection')

Configurer une connexion à une base de données externe

Cloud Composer fournit le proxy Cloud SQL par défaut dans votre environnement pour autoriser à distance l'accès à la base de données Cloud SQL de l'environnement depuis une application, un client ou un autre service Google Cloud.

Pour connecter Cloud Composer à une base de données externe, telle qu'une base de données SQL ou une instance Cloud SQL avec adresse IP privée, vous devez déployer un nouveau pod proxy SQL (yaml) dans le cluster GKE de votre environnement.

Une fois que vous avez déployé le nouveau service de proxy SQL, la connexion à votre base de données externe provient du cluster GKE de votre environnement. Pour que le serveur Web Airflow accède à la base de données externe, par exemple sous la forme d'une connexion Airflow, le service de proxy SQL doit être accessible à partir du serveur Web. Pour ce faire, vous disposez des options suivantes :

  • Créez un service LoadBalancer pour exposer ce service de proxy SQL supplémentaire. Vous pouvez également restreindre l'accès à ce service LoadBalancer. Sinon, vous pouvez déployer un serveur Web Airflow autogéré.
  • Créez un environnement Cloud Composer d'adresse IP privée et exposez le service proxy SQL à l'aide du service ClusterIP. Lorsque le mode d'adresse IP privée est activé dans Cloud Composer, le serveur Web dispose d'un accès direct aux services Kubernetes.