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 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 à partir de 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.

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 lors de la création de 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 sections suivantes fournissent des exemples sur la manière d'autoriser les opérations de lecture et d'écriture dans les buckets Cloud Storage de 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 d'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. Suivez les étapes décrites dans cette section si vous n'êtes pas en mesure de le faire.

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 doit se présenter comme suit:

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

  2. Créer une connexion :

    UI d'Airflow

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

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

      Capture d'écran Airflow. Ouvrez le menu "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 "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 dans le champ ID du 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 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'interface utilisateur Web peuvent lire les identifiants stockés dans keyfile_dict. Pour sécuriser ces identifiants, nous vous recommandons d'utiliser Chemin d'accès au fichier de clé et d'utiliser une LCA de Cloud Storage pour 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 Airflow. Cliquez sur l'onglet "Créer".

    gcloud

    Saisissez la commande suivante :

    CLI Airflow 1.10

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

    CLI Airflow 2.0

    gcloud beta 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 Compute Engine dans laquelle se trouve l'environnement.
    • CONNECTION_ID est l'identifiant de la connexion. Utilisez des caractères 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 extra__google_cloud_platform__project est obligatoire.
      • key_path est un chemin d'accès local sur le nœud de calcul Airflow vers un fichier de clé JSON, tel que /home/airflow/gcs/data/keyfile.json. Le cas échéant, requiert é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é. Le cas échéant, requiert é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'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 limiter l'accès au fichier de clé.
      • scope est une liste de champs d'application OAuth séparés par une virgule.

    Exemple :

    CLI Airflow 1.10

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

    CLI Airflow 2.0

    gcloud beta 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.

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')