Concepto clave
En Apache Airflow, las conexiones y variables son mecanismos fundamentales para gestionar credenciales y configuraciones de manera segura y centralizada. Las conexiones almacenan información de autenticación para sistemas externos como bases de datos, APIs o servicios en la nube, mientras que las variables permiten almacenar valores configurables que pueden ser reutilizados en multiples DAGs.
Imagina que estás construyendo una red de tuberías en una planta industrial. Las conexiones serían los puntos de union estandarizados donde conectas tuberías a diferentes tanques de almacenamiento (bases de datos), mientras que las variables serían los controles de presion y temperatura que puedes ajustar desde una sala de control central. Esta separacion permite cambiar credenciales o parametros sin modificar el codigo de los DAGs, facilitando mantenimiento y seguridad.
Como funciona en la practica
La interfaz web de Airflow proporciona una forma visual para configurar conexiones y variables. Para crear una conexion:
- Accede a la pestaña Admin > Connections
- Haz clic en el boton + para agregar una nueva conexion
- Selecciona el tipo de conexion (ej: PostgreSQL, AWS, HTTP)
- Completa los campos requeridos como host, puerto, usuario y contraseña
- Guarda la conexion con un identificador unico
Para crear una variable:
- Accede a la pestaña Admin > Variables
- Haz clic en el boton + para agregar una nueva variable
- Define una clave y un valor (puede ser JSON, texto o numeros)
- Guarda la variable para que este disponible en todos los DAGs
En un DAG, puedes acceder a estos recursos usando:
from airflow.models import Variable
from airflow.hooks.base import BaseHook
# Acceder a una variable
limite_registros = Variable.get('limite_extraccion', default_var=1000)
# Obtener una conexion
conn = BaseHook.get_connection('mi_postgres')
host = conn.host
usuario = conn.loginCaso de estudio
Considera un pipeline ETL que extrae datos de una API de ventas, los transforma y los carga en una base de datos analitica. En lugar de codificar credenciales directamente en el DAG:
| Componente | Conexion/Variable | Configuracion |
|---|---|---|
| API de ventas | Conexion: api_ventas | Tipo: HTTP, Host: api.empresa.com, Token: *** |
| Data Warehouse | Conexion: dw_postgres | Tipo: Postgres, Host: dw.internal, DB: analytics |
| Limite de extraccion | Variable: limite_diario | Valor: 50000 |
| Zona horaria | Variable: zona_horaria | Valor: America/Mexico_City |
Este enfoque permite que el mismo DAG funcione en diferentes entornos (desarrollo, produccion) simplemente cambiando las conexiones y variables, sin modificar el codigo del pipeline.
Las conexiones en Airflow cifran las contraseñas por defecto, pero para entornos de produccion se recomienda usar sistemas externos como HashiCorp Vault o AWS Secrets Manager integrados mediante backends de conexiones personalizados.
Errores comunes
- Usar credenciales hardcodeadas en DAGs: Expone informacion sensible y dificulta la rotacion de credenciales. Solucion: Siempre usar conexiones.
- Nombres inconsistentes de conexiones: Diferentes DAGs usando nombres distintos para la misma conexion causa duplicacion. Solucion: Establecer un estandar de nomenclatura en el equipo.
- Variables demasiado grandes o complejas: Almacenar JSONs muy extensos como variables puede afectar rendimiento. Solucion: Para configuraciones complejas, considerar archivos de configuracion externos.
- No probar conexiones: Asumir que una conexion configurada funciona sin validacion. Solucion: Usar el boton Test en la interfaz o crear tareas de prueba en DAGs.
- Permisos excesivos en la interfaz web: Permitir que muchos usuarios modifiquen conexiones de produccion. Solucion: Implementar RBAC y flujos de aprobacion.
Checklist de dominio
- Puedo crear y configurar una conexion a PostgreSQL desde la interfaz web de Airflow
- Se como acceder a variables y conexiones desde codigo Python en un DAG
- Comprendo la diferencia entre conexiones (credenciales) y variables (configuracion)
- Puedo explicar por que no se deben hardcodear credenciales en DAGs
- Se como estructurar variables para diferentes entornos (dev/staging/prod)
- Puedo identificar cuando usar una variable vs un parametro de DAG
- Comprendo las implicaciones de seguridad al gestionar conexiones
Configuracion de un pipeline ETL con conexiones y variables
En este ejercicio, configuraras las conexiones y variables necesarias para un pipeline ETL que procesa datos de ventas. Sigue estos pasos:
- Accede a la interfaz web de tu instancia de Airflow (generalmente en http://localhost:8080)
- Crea una conexion llamada ventas_api con estos parametros:
- Tipo: HTTP
- Host: https://api.ejemplo-ventas.com
- Extra: {"headers": {"Authorization": "Bearer TU_TOKEN_AQUI"}}
- Crea una conexion llamada warehouse_db para PostgreSQL:
- Tipo: Postgres
- Host: localhost
- Schema: ventas_analytics
- Usuario: airflow_user
- Contraseña: seguro123
- Puerto: 5432
- Crea tres variables:
- limite_extraccion_diaria con valor 10000
- pais_filtro con valor MX
- config_transformacion con valor JSON: {"formato_fecha": "YYYY-MM-DD", "moneda": "MXN"}
- Verifica que las conexiones esten activas usando el boton Test en la interfaz
- Crea un archivo DAG de prueba que:
- Acceda a la variable limite_extraccion_diaria
- Obtenga los detalles de la conexion warehouse_db
- Imprima estos valores en los logs
- Recuerda que el campo Extra en conexiones HTTP acepta JSON para headers y parametros adicionales
- Para acceder a variables en un DAG, importa from airflow.models import Variable
- Puedes verificar que las variables se esten cargando correctamente imprimiendolas con logging.info()
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.