M3E4 — Proyecto #2

TLC Pipeline - Parte 2: Orquestamiento de Datos con Apache Airflow

Este proyecto es una continuación directa del Proyecto #1

El objetivo principal de este proyecto es:

📌 Automatizar la ingesta de archivos utilizando Apache Airflow como orquestador

Descripción del proyecto

Tu tarea en este proyecto es automatizar la ingesta de archivos para los datasets de Yellow y Green trips utilizando Apache Airflow como orquestador.

Consideraciones:

  • Para facilitar el aprendizaje, se recomienda comenzar por Yellow Trips y, luego, si queda tiempo, avanzar a Green Trips.

Outcome final

La solución final debe:

  • Ingestar los datos del dataset de Yellow Trips (y Green trips) para todo el año 2025.
  • Orquestar toda la ingesta utilizando Apache Airflow.

Instrucciones

1. Desplegar Airflow de manera local

Sigue esta guía oficial para desplegar Apache Airflow en local utilizando Docker Compose: https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html

Tener en cuenta:

📌 Recomendación: Después de desplegar Apache Airflow, asegúrate de instalar el provider de AWS. Para hacerlo, busca en tu docker-compose el atributo_PIP_ADDITIONAL_REQUIREMENTS y reemplazándolo de tal manera que quede así: _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- apache-airflow-providers-amazon}

2. Crear conexión de Airflow a AWS

Luego de instalar el provider de AWS, crea una conexión tipo “Amazon Web Services” dentro de la UI de Airflow (Admin → Connections).

Aquí una guía para crear la conexión:

📌 https://www.astronomer.io/docs/learn/connections

Para crear la conexión, sugiero que crees un nuevo usuario de AWS y generes las access keys. Asegúrate que este nuevo usuario tenga los permisos adecuados para invocar la Lambda.

Puedes utilizar las siguientes políticas a modo de referencia:

Si solo utilizar lambda para este proyecto:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::115024895228:role/ROLE_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "<<<YOUR ARN HERE>>"
        }
    ]
}

Si también utilizas Glue (más abajo se especifica cómo se puede usar Glue)

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": [
				"logs:CreateLogStream",
				"glue:GetCrawler",
				"glue:GetCrawlers",
				"glue:StartCrawler",
				"glue:StartJobRun",
				"glue:GetJobRun",
				"logs:FilterLogEvents",
				"glue:GetCrawlerMetrics",
				"logs:CreateLogGroup",
				"logs:PutLogEvents",
				"glue:GetJobRuns",
				"glue:GetJob"
			],
			"Resource": "<<<YOUR ARN HERE>>"
		}
	]
}

3. Crear un DAG que orqueste la ingesta

Antes de empezar a crear DAGs en Airflow te sugiero ver este curso introductorio de Airflow.

📌 https://academy.astronomer.io/path/airflow-101

Luego que entiendas las bases de cómo funciona Airflow crea un DAG con la siguiente estructura básica:

  • Tarea start → dummy operator (start)
  • Tarea que invoque la Lambda de ingesta (AwsLambdaInvokeFunctionOperator)
  • Tarea end → dummy operator (end)

El flujo debe ser: start → lambda_ingest → end.

Luego realiza un backfill que permita la ingesta de todos los archivos de 2025 para el dataset de Yellow Trips.

Asegúrate de probar que funcione el backfill para 2025, ya que este será un requerimiento obligatorio del proyecto.

Si no conoces aún nada acerca de los backfills, esta es una de las funcionalidad más importantes de airflow.

Aquí algo de información al respecto

📌 https://www.youtube.com/watch?v=Pz9VKKqwCk0

Recursos técnicos - Proyecto #2


Otros Recursos


Completar y continuar