Gérer les connexions Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Cette page explique comment gérer Raccordements Airflow dans votre et d'y accéder depuis vos DAG.

À propos des connexions Airflow

Les connexions AIflow stockent les identifiants et d'autres informations de connexion, telles que les noms d'utilisateur, les chaînes de connexion et les mots de passe. Vos DAG utilisent des connexions de communiquer et d'accéder aux ressources de Google Cloud de vos DAG.

Les opérateurs Airflow de vos DAG utilisent une connexion par défaut pour l'opérateur ou vous spécifiez un nom de connexion personnalisé.

À propos de la sécurité de la connexion

La plupart des opérateurs Airflow n'acceptent pas directement les identifiants. Ils utilisent plutôt des connexions Airflow.

Lorsque vous créez un environnement, Cloud Composer génère un clé fernet unique et permanente pour l’environnement et sécurise les extras de connexion par défaut. Vous pouvez afficher fernet_key sur la page Configuration dans Interface utilisateur Airflow.

Pour en savoir plus sur la sécurisation des connexions et des mots de passe dans Airflow, consultez les sections Sécuriser les connexions et Masquer des données sensibles.

À propos des types de connexions

Airflow utilise différents types de connexions pour se connecter à des services spécifiques. Par exemple, Type de connexion Google Cloud se connecte à d'autres services dans Google Cloud. Par exemple, le type de connexion S3 se connecte à un bucket Amazon S3.

Pour ajouter un type de connexion à Airflow, installez un package PyPI avec ce type de connexion. Certains packages sont préinstallés dans votre environnement. Pour Par exemple, vous pouvez utiliser la connexion de apache-airflow-providers-google sans installer de packages PyPI personnalisés.

Connexions préconfigurées

Cloud Composer configure les connexions par défaut suivantes dans votre environnement. Vous pouvez utiliser ces connexions pour accéder aux ressources de votre projet sans les configurer.

  • google_cloud_default
  • bigquery_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Ajouter une connexion dans Secret Manager

Vous pouvez stocker une connexion dans Secret Manager, sans l'ajouter à Airflow. Nous vous recommandons d'utiliser cette approche pour stocker des identifiants d'autres informations sensibles.

Pour ajouter une connexion dans Secret Manager :

  1. Configurez Secret Manager pour votre environnement.

  2. Ajoutez un secret dont le nom est correspond au modèle des connexions.

    Exemple : airflow-connections-example_connection. Dans vos DAG, utilisez le nom de la connexion sans le préfixe : example_connection.

  3. Ajoutez des paramètres pour la connexion :

    Format JSON

    Ajoutez la représentation JSON de votre connexion en tant que valeur du secret. Exemple :

    {
      "conn_type": "mysql",
      "host": "example.com",
      "login": "login",
      "password": "password",
      "port": "9000"
    }
    

    Pour en savoir plus sur le format de connexion JSON, consultez la documentation Airflow.

    Format de l'URI

    Ajoutez la représentation URI de votre connexion en tant que valeur du paramètre secret:

    • Le secret doit stocker un Représentation de l'URI de la connexion. Exemple : mysql://login:password@example.com:9000.

    • L'URI doit être encodé au format URL. Pour Par exemple, si un mot de passe comporte un espace, il doit être encodé au format URL. comme suit: mysql://login:secret%20password@example.com:9000

    Airflow dispose d'un méthode pratique permettant de générer des URI de connexion. Exemple d'encodage d'une URL complexe avec des extras JSON sont disponibles dans Documentation Airflow

  4. Vérifiez que tous les paramètres de connexion sont il est bien lu depuis Secret Manager.

Ajouter une connexion dans Airflow

Au lieu de stocker vos connexions dans Secret Manager, vous pouvez les stocker dans Airflow.

Pour ajouter une connexion dans Airflow :

CLI Airflow

Exécutez la connections add CLI Airflow via la Google Cloud CLI. Exemple :

Dans Airflow 2:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-type "mysql" \
    --conn-host "example.com" \
    --conn-port "9000" \
    --conn-login "login" \
    --conn-password "password" \
    example_connection

Vous pouvez également utiliser l'argument --conn-uri:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-uri "mysql://login:password@example.com:9000" \
    example_connection

Dans Airflow 1 :

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections -- \
    --add \
    --conn_type "mysql" \
    --conn_host "example.com" \
    --conn_port "9000" \
    --conn_login "login" \
    --conn_password "password" \
    --conn_id "example_connection"

Remplacez les éléments suivants :

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

Interface utilisateur d'Airflow

Suivez la documentation Airflow sur la création de connexions.

Vérifier qu'Airflow lit correctement une connexion

Vous pouvez exécuter la commande connections get de la CLI Airflow via Google Cloud CLI pour vérifier qu'une connexion est lue correctement. Par exemple, si vous stockez une connexion dans Secret Manager, vous pouvez vérifier si tous les paramètres d'une connexion sont lus par Airflow à partir d'un secret.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    connections get \
    -- CONNECTION_NAME

Remplacez :

  • ENVIRONMENT_NAME par le nom de l'environnement.
  • LOCATION par la région où se trouve l'environnement.
  • CONNECTION_NAME par le nom de la connexion ; Si votre connexion est stockée dans Secret Manager, utilisez le nom de connexion sans le préfixe de connexion. Par exemple, spécifiez example_connection au lieu de airflow-connections-example_connection_json.

Exemple :

gcloud composer environments run example-environment \
    --location us-central1 \
    connections get \
    -- example_connection -o json

Utiliser des connexions Airflow dans vos DAG

Cette section explique comment accéder à votre connexion à partir d'un DAG.

Utiliser une connexion Secret Manager

Utilisez le nom de la connexion sans le préfixe. Par exemple, si votre secret est nommé airflow-connections-aws_s3, spécifiez aws_s3.

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Si vous stockez une connexion par défaut dans Secret Manager, vous pouvez omettre le nom de la connexion. Consultez la documentation Airflow sur un opérateur spécifique afin d'obtenir le nom de connexion par défaut utilisé par un opérateur. Par exemple, l'opérateur Airflow S3ToGCSOperator utilise la connexion aws_default par défaut. Vous pouvez stocker cette connexion par défaut dans un secret nommé airflow-connections-aws_default

Utiliser une connexion stockée dans Airflow

Utilisez le nom de la connexion, tel qu'il est défini dans Airflow:

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Pour utiliser la connexion par défaut d'un opérateur, omettez son nom. Consultez la documentation Airflow d'un opérateur spécifique pour obtenir le nom de connexion par défaut utilisé par un opérateur. Par exemple, l'opérateur Airflow S3ToGCSOperator utilise la connexion aws_default par défaut.

Dépannage

Si votre environnement ne peut pas accéder au secret stocké dans Secret Manager:

  1. Assurez-vous que Secret Manager est configuré dans votre environnement.

  2. Vérifiez que le nom de la connexion dans Secret Manager correspond à la connexion utilisée par Airflow. Par exemple, pour une connexion nommée example_connection, le nom du secret est airflow-connections-example_connection.

  3. Vérifiez qu'Airflow lit correctement une connexion.

Étape suivante