# Airflow Dag Patterns > Construye DAGs de Apache Airflow listos para producción con buenas prácticas para operadores, sensores, testing y despliegue. Fuente: https://skillsagentes.com/skills/wshobson/agents/airflow-dag-patterns Markdown: https://skillsagentes.com/skills/wshobson/agents/airflow-dag-patterns.md Repositorio: https://github.com/wshobson/agents Autor: wshobson Licencia: MIT Actualizado: hace 4 meses Coste de contexto: 48 tok instalada, 784 tok al activarse, 3.6k tok con todos los archivos del bundle Bundle: 2 archivos, 14 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent claude-code # Cursor npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent cursor # Codex npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent codex # Gemini CLI npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent gemini # Windsurf npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent windsurf # Cline npx -y skills add wshobson/agents --skill airflow-dag-patterns --agent cline ``` ## Qué hace - Proporciona patrones para diseñar DAGs de Apache Airflow con operadores, sensores y dependencias de tareas - Da ejemplos de código listos como plantilla de DAG con default_args, retries y TaskFlow API - Incluye buenas y malas prácticas para producción (idempotencia, timeouts, sensores en modo reschedule) ## Cuándo usarla - Crear orquestación de pipelines de datos con Airflow - Diseñar estructuras de DAG y dependencias - Implementar operadores y sensores personalizados - Testear DAGs de Airflow localmente o depurar ejecuciones fallidas ## Qué la activa - "Ayúdame a crear un DAG de Airflow para un pipeline ETL diario" - "¿Cómo estructuro dependencias fan-out en Airflow?" - "Necesito testear localmente mis DAGs de Airflow" ## Antes de instalar - Requiere un entorno de Apache Airflow configurado (por ejemplo con acceso a `dags/`). ## Archivos - SKILL.md — 3 KB - references/details.md — 11 KB ## SKILL.md Reproducido tal cual desde wshobson/agents bajo MIT. Esta sección es el documento original y está en inglés. # Apache Airflow DAG Patterns Production-ready patterns for Apache Airflow including DAG design, operators, sensors, testing, and deployment strategies. ## When to Use This Skill - Creating data pipeline orchestration with Airflow - Designing DAG structures and dependencies - Implementing custom operators and sensors - Testing Airflow DAGs locally - Setting up Airflow in production - Debugging failed DAG runs ## Core Concepts ### 1. DAG Design Principles | Principle | Description | | --------------- | ----------------------------------- | | **Idempotent** | Running twice produces same result | | **Atomic** | Tasks succeed or fail completely | | **Incremental** | Process only new/changed data | | **Observable** | Logs, metrics, alerts at every step | ### 2. Task Dependencies ```python # Linear task1 >> task2 >> task3 # Fan-out task1 >> [task2, task3, task4] # Fan-in [task1, task2, task3] >> task4 # Complex task1 >> task2 >> task4 task1 >> task3 >> task4 ``` ## Quick Start ```python # dags/example_dag.py from datetime import datetime, timedelta from airflow import DAG from airflow.operators.python import PythonOperator from airflow.operators.empty import EmptyOperator default_args = { 'owner': 'data-team', 'depends_on_past': False, 'email_on_failure': True, 'email_on_retry': False, 'retries': 3, 'retry_delay': timedelta(minutes=5), 'retry_exponential_backoff': True, 'max_retry_delay': timedelta(hours=1), } with DAG( dag_id='example_etl', default_args=default_args, description='Example ETL pipeline', schedule='0 6 * * *', # Daily at 6 AM start_date=datetime(2024, 1, 1), catchup=False, tags=['etl', 'example'], max_active_runs=1, ) as dag: start = EmptyOperator(task_id='start') def extract_data(**context): execution_date = context['ds'] # Extract logic here return {'records': 1000} extract = PythonOperator( task_id='extract', python_callable=extract_data, ) end = EmptyOperator(task_id='end') start >> extract >> end ``` ## Detailed patterns and worked examples Detailed pattern documentation lives in `references/details.md`. Read that file when the navigation tier above is insufficient. ## Best Practices ### Do's - **Use TaskFlow API** - Cleaner code, automatic XCom - **Set timeouts** - Prevent zombie tasks - **Use `mode='reschedule'`** - For sensors, free up workers - **Test DAGs** - Unit tests and integration tests - **Idempotent tasks** - Safe to retry ### Don'ts - **Don't use `depends_on_past=True`** - Creates bottlenecks - **Don't hardcode dates** - Use `{{ ds }}` macros - **Don't use global state** - Tasks should be stateless - **Don't skip catchup blindly** - Understand implications - **Don't put heavy logic in DAG file** - Import from modules ## Dónde encaja - Categoría: [DevOps e infraestructura](https://skillsagentes.com/categorias/devops-infraestructura.md) — Despliegues, contenedores, IaC y flujos de gestión de incidentes. - Creador: [wshobson](https://skillsagentes.com/creators/wshobson.md) — 183 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)