Cloud Composer 1 | Cloud Composer 2
Cette page explique comment gérer les connexions Airflow dans votre environnement et y accéder à partir de 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 pour communiquer et accéder aux ressources de Google Cloud et d'autres services à partir de vos DAG.
Dans vos DAG, les opérateurs Airflow 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. À la place, ils utilisent des connexions Airflow.
Lorsque vous créez un environnement, Cloud Composer génère une 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 de l'interface utilisateur Airflow.
Pour en savoir plus sur la sécurisation des connexions et des mots de passe dans Airflow, consultez les pages Sécuriser les connexions et Masquer les données sensibles.
À propos des types de connexion
Airflow utilise des connexions de différents types pour se connecter à des services spécifiques. Par exemple, le type de connexion Google Cloud se connecte à d'autres services dans Google Cloud. Autre 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. Par exemple, vous pouvez utiliser la connexion à partir du package 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 lorsque vous stockez des identifiants et d'autres informations sensibles.
Pour ajouter une connexion dans Secret Manager:
Ajoutez un secret dont le nom correspond au modèle de connexion.
Exemple :
airflow-connections-example_connection
. Dans vos DAG, utilisez le nom de la connexion sans le préfixe:example_connection
.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 secret:
Le secret doit stocker une représentation d'URI de la connexion. Exemple :
mysql://login:password@example.com:9000
.L'URI doit être encodé au format URL. Par exemple, un mot de passe contenant un symbole d'espace doit être encodé en URL comme suit :
mysql://login:secret%20password@example.com:9000
.
Airflow propose une méthode pratique pour générer des URI de connexion. Vous trouverez un exemple d'encodage d'URL complexe avec des extras JSON dans la documentation Airflow.
Vérifiez que tous les paramètres de connexion sont correctement lus à partir de 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, procédez comme suit:
CLI Airflow
Exécutez la commande CLI Airflow connections add
via 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 environnementLOCATION
: 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 CLI Airflow connections get
via Google Cloud CLI pour vérifier qu'une connexion est lue correctement. Par exemple, si vous stockez une connexion dans Secret Manager, cela permet de 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 dans laquelle 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 la connexion sans le préfixe de connexion. Par exemple, spécifiezexample_connection
au lieu deairflow-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 s'appelle 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 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. 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 pour un opérateur, omettez le nom de la connexion. Consultez la documentation Airflow sur 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:
Assurez-vous que Secret Manager est configuré dans votre environnement.
Vérifiez que le nom de la connexion dans Secret Manager correspond à celle utilisée par Airflow. Par exemple, pour une connexion nommée
example_connection
, le nom du secret estairflow-connections-example_connection
.Vérifiez qu'Airflow lit correctement la connexion.