Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
En esta página se describe cómo gestionar las conexiones de Airflow en tu entorno y cómo acceder a ellas desde tus DAGs.
Acerca de las conexiones de Airflow
Las conexiones de Aiflow almacenan credenciales y otra información de conexión, como nombres de usuario, cadenas de conexión y contraseñas. Tus DAGs usan conexiones para comunicarse y acceder a recursos en Google Cloud y otros servicios desde tus DAGs.
Los operadores de Airflow de tus DAGs usan una conexión predeterminada para el operador o especificas un nombre de conexión personalizado.
Acerca de la seguridad de la conexión
La mayoría de los operadores de Airflow no aceptan credenciales directamente. En su lugar, utilizan conexiones de Airflow.
Cuando creas un entorno, Cloud Composer genera una clave fernet única y permanente para el entorno, y protege los extras de conexión de forma predeterminada. Puedes ver el fernet_key
en la página Configuración de la interfaz de usuario de Airflow.
Para obtener más información sobre cómo se protegen las conexiones y las contraseñas en Airflow, consulta Securing Connections (Protección de conexiones) y Masking sensitive data (Máscara de datos sensibles) en la documentación de Airflow.
Acerca de los tipos de conexión
Airflow usa conexiones de diferentes tipos para conectarse a servicios específicos. Por ejemplo, el Google Cloud tipo de conexión se conecta a otros servicios de Google Cloud. Otro ejemplo es el tipo de conexión S3, que se conecta a un segmento de Amazon S3.
Para añadir un tipo de conexión a Airflow, instala un paquete de PyPI con ese tipo de conexión.
Algunos paquetes están preinstalados en tu entorno. Por ejemplo, puedes usar la conexión del paquete apache-airflow-providers-google
sin instalar paquetes PyPI personalizados.
Conexiones preconfiguradas
Cloud Composer configura las siguientes conexiones predeterminadas en tu entorno. Puedes usar estas conexiones para acceder a los recursos de tu proyecto sin configurarlos.
google_cloud_default
bigquery_default
google_cloud_datastore_default
google_cloud_storage_default
Añadir una conexión en Secret Manager
Puedes almacenar una conexión en Secret Manager sin añadirla a Airflow. Recomendamos usar este método para almacenar credenciales y otra información sensible.
Para añadir una conexión en Secret Manager, sigue estos pasos:
Añade un secreto con el nombre que coincida con el patrón de las conexiones.
Por ejemplo:
airflow-connections-example_connection
. En tus DAGs, usa el nombre de la conexión sin el prefijo:example_connection
.Añade los parámetros de la conexión:
Formato JSON
Añade la representación JSON de tu conexión como valor del secreto. Por ejemplo:
{ "conn_type": "mysql", "host": "example.com", "login": "login", "password": "password", "port": "9000" }
Para obtener más información sobre el formato de conexión JSON, consulta la documentación de Airflow.
Formato de URI
Añade la representación URI de tu conexión como valor del secreto:
El secreto debe almacenar una representación URI de la conexión. Por ejemplo,
mysql://login:password@example.com:9000
.El URI debe tener codificación URL. Por ejemplo, una contraseña que tenga un espacio debe codificarse como URL de la siguiente manera:
mysql://login:secret%20password@example.com:9000
.
Airflow tiene un método de conveniencia para generar URIs de conexión. Puedes consultar un ejemplo de cómo codificar una URL compleja con extras JSON en la documentación de Airflow.
Comprueba que todos los parámetros de conexión se leen correctamente de Secret Manager.
Añadir una conexión en Airflow
Como alternativa a almacenar tus conexiones en Secret Manager, puedes almacenarlas en Airflow.
Para añadir una conexión en Airflow, sigue estos pasos:
CLI de Airflow
Ejecuta el comando de la CLI de Airflow connections add
con Google Cloud CLI. Por ejemplo:
En 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
También puedes usar el argumento --conn-uri
:
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections add -- \
--conn-uri "mysql://login:password@example.com:9000" \
example_connection
En 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"
Haz los cambios siguientes:
ENVIRONMENT_NAME
: el nombre de tu entorno.LOCATION
: la región en la que se encuentra el entorno.
Interfaz de usuario de Airflow
Sigue las instrucciones de la documentación de Airflow para crear conexiones.
Comprobar que Airflow lee correctamente una conexión
Puedes ejecutar el comando connections get
de la CLI de Airflow a través de la CLI de Google Cloud para comprobar que una conexión se lee correctamente. Por ejemplo, si almacenas una conexión en Secret Manager, puedes comprobar si Airflow lee todos los parámetros de una conexión desde un secreto.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections get \
-- CONNECTION_NAME
Sustituye:
ENVIRONMENT_NAME
con el nombre del entorno.LOCATION
con la región en la que se encuentra el entorno.CONNECTION_NAME
con el nombre de la conexión. Si tu conexión está almacenada en Secret Manager, usa el nombre de la conexión sin el prefijo de conexión. Por ejemplo, especificaexample_connection
en lugar deairflow-connections-example_connection_json
.
Ejemplo:
gcloud composer environments run example-environment \
--location us-central1 \
connections get \
-- example_connection -o json
Usar conexiones de Airflow en tus DAGs
En esta sección se muestra cómo acceder a tu conexión desde un DAG.
Usar una conexión de Secret Manager
Usa el nombre de la conexión sin el prefijo. Por ejemplo, si tu secreto se llama airflow-connections-aws_s3
, especifica 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 almacenas una conexión predeterminada en Secret Manager, puedes omitir el nombre de la conexión. Consulta la documentación de Airflow para ver el nombre de conexión predeterminado que usa un operador concreto. Por ejemplo, el operador S3ToGCSOperator
de Airflow usa la conexión aws_default
de forma predeterminada. Puedes almacenar esta conexión predeterminada en un secreto llamado airflow-connections-aws_default
.
Usar una conexión almacenada en Airflow
Usa el nombre de la conexión tal como se define en 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/')
Para usar la conexión predeterminada de un operador, omite el nombre de la conexión. Consulta la documentación de Airflow para ver el nombre de la conexión predeterminada que usa un operador concreto. Por ejemplo, el operador S3ToGCSOperator
de Airflow
usa la conexión aws_default
de forma predeterminada.
Solución de problemas
Si tu entorno no puede acceder al secreto almacenado en Secret Manager, haz lo siguiente:
Asegúrate de que Secret Manager esté configurado en tu entorno.
Comprueba que el nombre de la conexión en Secret Manager se corresponda con la conexión que usa Airflow. Por ejemplo, para una conexión llamada
example_connection
, el nombre del secreto esairflow-connections-example_connection
.Comprueba que Airflow lee correctamente una conexión.