Instalación de Airflow con Docker para Desarrollo Local

Lectura
15 min~6 min lectura

Concepto clave

La instalación de Apache Airflow con Docker para desarrollo local es una estrategia que permite crear un entorno aislado y reproducible donde puedes diseñar, probar y depurar tus DAGs (Directed Acyclic Graphs) sin afectar sistemas de producción. Imagina que Docker es como una caja de herramientas portátil: dentro tienes todo lo necesario (Airflow, sus dependencias, bases de datos) empaquetado en contenedores, listo para usar en cualquier máquina. Esto elimina problemas de compatibilidad entre sistemas operativos y versiones de software, similar a cómo un chef lleva sus utensilios a una cocina ajena para garantizar resultados consistentes.

Para un Data Engineer intermedio, esta aproximación es crucial porque acelera el ciclo de desarrollo. En lugar de perder horas configurando manualmente Airflow y sus componentes (como el metadatabase o el executor), Docker te ofrece una solución preconfigurada. Los contenedores actúan como máquinas virtuales ligeras: cada uno ejecuta un servicio específico (por ejemplo, Airflow webserver, scheduler, base de datos PostgreSQL) y se comunican entre sí a través de una red virtual. Esto simula un entorno de producción en miniatura, permitiéndote validar pipelines ETL complejos antes de desplegarlos.

Cómo funciona en la práctica

El proceso sigue estos pasos:

  1. Preparación del entorno: Instala Docker y Docker Compose en tu máquina local. Estos son los únicos requisitos previos, ya que todo lo demás se gestiona dentro de contenedores.
  2. Descarga de la configuración oficial: Airflow proporciona un archivo docker-compose.yaml oficial que define todos los servicios necesarios. Este archivo es como un plano de construcción que especifica qué contenedores crear, cómo configurarlos y cómo conectarlos.
  3. Personalización: Ajusta el archivo docker-compose.yaml según tus necesidades. Por ejemplo, puedes cambiar la versión de Airflow, agregar variables de entorno para conexiones a bases de datos externas, o montar volúmenes para persistir datos.
  4. Inicialización: Ejecuta comandos Docker Compose para iniciar los servicios. Esto descarga las imágenes de Docker (si no las tienes) y levanta los contenedores. Una vez completado, accedes a la interfaz web de Airflow en http://localhost:8080.

Un ejemplo básico de configuración en el archivo docker-compose.yaml incluye servicios como:

ServicioFunción
postgresBase de datos para metadatos de Airflow
redisBroker de mensajes para el executor Celery
airflow-webserverInterfaz web para gestionar DAGs
airflow-schedulerOrquesta la ejecución de tareas
airflow-workerEjecuta tareas en paralelo (si usas Celery)

Caso de estudio

Supongamos que eres un Data Engineer en una empresa de e-commerce que necesita orquestar un pipeline ETL diario. El pipeline extrae datos de ventas de una API, los transforma para calcular métricas como ingresos por región, y los carga en un data warehouse. Con Airflow en Docker, puedes simular este flujo localmente:

  1. Configuración inicial: Descargas el archivo docker-compose.yaml oficial de Airflow y lo modificas para usar la versión 2.7.0 (estable). Agregas un volumen para mapear una carpeta local donde guardarás tus DAGs, asegurando que los cambios en código se reflejen automáticamente en Airflow.
  2. Desarrollo del DAG: Creas un DAG en Python que define tareas para extraer datos (usando un operador Python), transformarlos (con Pandas en un operador personalizado) y cargarlos (con un operador para PostgreSQL). Lo guardas en la carpeta mapeada, y Airflow lo detecta al instante.
  3. Pruebas: En la interfaz web, activas el DAG y monitoreas su ejecución. Usas los logs de los contenedores para depurar errores, como problemas de conexión a la API. Esto te permite iterar rápidamente sin riesgos para producción.
Dato importante: Según la documentación de Airflow, la configuración con Docker reduce el tiempo de setup de horas a minutos, ideal para entornos de desarrollo ágiles.

Errores comunes

  • Permisos incorrectos en volúmenes: Al mapear carpetas locales a contenedores, los permisos de archivos pueden causar que Airflow no lea los DAGs. Solución: Asegúrate de que los archivos tengan permisos de lectura para el usuario dentro del contenedor (por defecto, usuario airflow con UID 50000).
  • Conflicto de puertos: Si otro servicio usa el puerto 8080 en tu máquina, el webserver de Airflow fallará al iniciar. Solución: Cambia el mapeo de puertos en docker-compose.yaml, por ejemplo, de 8080:8080 a 8081:8080 para acceder en http://localhost:8081.
  • Falta de recursos del sistema: Docker puede consumir mucha RAM y CPU, especialmente con múltiples contenedores. Solución: Ajusta los límites en la configuración de Docker Desktop o usa comandos como docker-compose up --scale airflow-worker=2 para controlar el número de workers.
  • Olvidar inicializar la base de datos: Antes de usar Airflow por primera vez, debes ejecutar docker-compose up airflow-init para configurar la base de datos. Si lo omites, los servicios no funcionarán correctamente.
  • No gestionar variables y conexiones: En desarrollo, es común hardcodear credenciales en DAGs, lo que es inseguro. Solución: Usa la interfaz web o comandos de Airflow para definir variables y conexiones de forma segura desde el inicio.

Checklist de dominio

  1. Verifica que Docker y Docker Compose estén instalados y funcionando en tu sistema operativo.
  2. Descarga y personaliza el archivo docker-compose.yaml oficial de Airflow para tu versión deseada.
  3. Ejecuta el comando de inicialización para configurar la base de datos de metadatos.
  4. Inicia todos los servicios con Docker Compose y accede a la interfaz web en el puerto configurado.
  5. Crea un DAG simple, guárdalo en la carpeta mapeada, y confirma que Airflow lo detecte automáticamente.
  6. Configura al menos una conexión (por ejemplo, a PostgreSQL) y una variable en Airflow para usarlas en un DAG.
  7. Monitorea los logs de los contenedores para depurar un error simulado en una tarea.

Configura un entorno local de Airflow con Docker y despliega tu primer DAG ETL

Sigue estos pasos para instalar Airflow con Docker y probar un pipeline básico:

  1. Prepara tu máquina: Si no tienes Docker instalado, descárgalo desde docker.com. Asegúrate de que Docker Compose esté incluido (viene con Docker Desktop en Windows/Mac, o instálalo por separado en Linux).
  2. Obtén la configuración de Airflow: Descarga el archivo docker-compose.yaml oficial desde la documentación de Airflow (versión 2.7.0). Guárdalo en una carpeta nueva, por ejemplo, ~/airflow-docker.
  3. Personaliza la configuración: Abre el archivo docker-compose.yaml y realiza estos cambios:
    • Cambia la versión de la imagen de Airflow a apache/airflow:2.7.0.
    • Agrega un volumen para mapear una carpeta local (por ejemplo, ./dags) al directorio de DAGs en el contenedor (/opt/airflow/dags).
    • Modifica el puerto del webserver si el 8080 está en uso (por ejemplo, usa 8081:8080).
  4. Inicializa Airflow: En la terminal, navega a la carpeta con el archivo docker-compose.yaml y ejecuta:
    docker-compose up airflow-init
    Espera a que complete, lo que configurará la base de datos.
  5. Inicia los servicios: Ejecuta:
    docker-compose up -d
    Esto levantará todos los contenedores en segundo plano. Verifica que estén corriendo con docker-compose ps.
  6. Accede y prueba: Abre tu navegador en http://localhost:8080 (o el puerto que configuraste). Usa las credenciales por defecto (usuario: airflow, contraseña: airflow). Crea un DAG simple en la carpeta mapeada (por ejemplo, un DAG que imprima "Hola Mundo" cada minuto) y confirma que aparezca en la interfaz.
  7. Ejecuta un pipeline ETL simulado: Desarrolla un DAG con tres tareas:
    • Extraer: Usa un operador Python para generar datos ficticios de ventas (por ejemplo, una lista de diccionarios con producto, cantidad y precio).
    • Transformar: En otra tarea, calcula el ingreso total (cantidad * precio) y filtra productos con ingreso mayor a 100.
    • Cargar: Usa un operador para guardar los resultados en un archivo CSV local.
    Activa el DAG y verifica que se ejecute sin errores.
Pistas
  • Si el webserver no carga, revisa los logs con 'docker-compose logs airflow-webserver' para ver errores específicos.
  • Para acceder a la terminal de un contenedor y depurar, usa 'docker exec -it [nombre-contenedor] bash'.
  • Asegúrate de que tu DAG tenga un 'dag_id' único y esté en la carpeta correcta mapeada; Airflow escanea cada 30 segundos.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.