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 détails, tels que 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 détails prédéfinis. Nous vous recommandons d'utiliser les connexions Airflow pour stocker les secrets et les identifiants pour les 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 à partir de vos DAG en utilisant l'ID de connexion par défaut. L'exemple suivant utilise BigQueryOperator avec la connexion par défaut.

Airflow 2

task_default = bigquery.BigQueryInsertJobOperator(
    task_id='task_default_connection',
    configuration={
        "query": {
            "query": 'SELECT 1',
            "useLegacySql": False
        }
    }
)

Airflow 1

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

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

Airflow 2

# Composer creates a 'google_cloud_default' connection by default.
task_explicit = bigquery.BigQueryInsertJobOperator(
    task_id='task_explicit_connection',
    gcp_conn_id='google_cloud_default',
    configuration={
        "query": {
            "query": 'SELECT 1',
            "useLegacySql": False
        }
    }
)

Airflow 1

task_explicit = bigquery_operator.BigQueryOperator(
    task_id='task_explicit_connection',
    sql='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 é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.

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 le menu déroulant 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 utilisées 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 cette étape n'est pas disponible, 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:

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

      Accéder à la page "Comptes de service"

    2. Sélectionnez votre projet.

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

    4. Dans le champ Nom du compte de service, saisissez un nom. Cloud Console renseigne le champ ID du compte de service en fonction de ce nom.

    5. Facultatif : dans le champ Description du compte de service, saisissez une description du compte de service.

    6. Cliquez sur Créer et continuer.

    7. Cliquez sur le champ Select a role (Sélectionner un rôle), puis choisissez un rôle que vous souhaitez attribuer au compte de service, par exemple Storage > Object Admin (Administrateur d'objets Storage).

    8. Cliquez sur OK pour terminer la création du compte de service.

      Ne fermez pas la fenêtre de votre navigateur. Vous en aurez besoin lors de la tâche suivante.

  2. Téléchargez une clé JSON pour le compte de service que vous venez de créer :

    1. Dans Cloud Console, cliquez sur l'adresse e-mail du compte de service que vous avez créé.
    2. Cliquez sur Keys (Clés).
    3. Cliquez sur Add key (Ajouter une clé), puis sur Create new key (Créer une clé).
    4. Cliquez sur Create (Créer). Un fichier de clé JSON est téléchargé sur votre ordinateur.

      Veillez à stocker le fichier de clé en toute sécurité, car il peut être utilisé pour s'authentifier en tant que compte de service. Vous pouvez déplacer et renommer ce fichier comme vous le souhaitez.

    5. Cliquez sur Fermer.

  3. Créer une connexion :

    UI d'Airflow

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

    2. Dans l'interface Web Airflow, ouvrez la page Admin > Connections (Administration et connexions).

      Capture d'écran Airflow Ouvrez le menu des connexions administrateur

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

      Capture d'écran Airflow Cliquez sur l'onglet "Create" (Créer)

    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 du projet qui correspond au projet auquel appartient votre compte de service.
      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 du fichier de clé), saisissez le chemin d'accès du fichier local sur le nœud de calcul Airflow à l'emplacement du fichier de clé JSON, 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 la CLI ou l'UI 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 (Keyfile Path) et une LCA Cloud Storage afin de limiter 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 Airflow Cliquez sur l'onglet "Create" (Créer)

    gcloud

    Saisissez la commande suivante :

    Airflow 1

    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": "...", ...}'
    

    Airflow 2

    gcloud composer environments run \
    ENVIRONMENT_NAME \
      --location LOCATION \
      connections add -- \
      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 où se trouve l'environnement.
    • CONNECTION_ID est l'identifiant de la connexion. Utilisez des caractères minuscules et des mots séparés par des traits de soulignement.
    • CMD_ARGS sont les suivantes :
      • project est un ID de projet. Seul extra__google_cloud_platform__project est requis.
      • key_path est un chemin d'accès local au fichier Airflow sur un nœud de calcul JSON, tel que /home/airflow/gcs/data/keyfile.json. Si spécifié, nécessite également scope. Utilisez key_path ou keyfile_dict, mais pas les deux.
      • keyfile_dict est un objet JSON qui spécifie le contenu du fichier de clé JSON que vous avez téléchargé. Si spécifié, nécessite également scope. Utilisez keyfile_dict ou key_path, mais pas les deux. Les utilisateurs ayant accès aux connexions Airflow via la CLI ou l'UI 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 afin de limiter l'accès au fichier de clé.
      • scope est une liste de champs d'application OAuth séparés par une virgule.

    Exemple :

    Airflow 1

    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"}'
    

    Airflow 2

    gcloud composer environments run test-environment \
       --location us-central1 connections add -- \
       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.

Airflow 2

# Set a gcp_conn_id to use a connection that you have created.
task_custom = bigquery.BigQueryInsertJobOperator(
    task_id='task_custom_connection',
    gcp_conn_id='my_gcp_connection',
    configuration={
        "query": {
            "query": 'SELECT 1',
            "useLegacySql": False
        }
    }
)

Airflow 1

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