M2E4 — Proyecto #1

TLC Pipeline - Parte 1: Ingesta de datos

Para este proyecto usaremos los datos de libre acceso de la TLC (Taxi & Limousine Comission).

La TLC publica desde hace más de una década registros detallados de todos los viajes en taxis amarillos, taxis verdes y vehículos de alquiler (For-Hire Vehicles) en la ciudad de Nueva York.

Estos datos se recopilan con el fin de monitorear el servicio de transporte, garantizar el cumplimiento de regulaciones y ofrecer información valiosa tanto a la ciudadanía como a investigadores y analistas de datos.

A continuación, el contexto de los datasets de la TLC:

  • Yellow Trips: Este dataset contiene datos de los viajes hechos por taxis amarillos que tienen permitido recoger pasajeros en cualquier punto de la ciudad.
  • Green Taxi Trips: Este dataset contiene datos de los viajes hechos por taxis verdes, los cuales fueron introducidos en 2013 para complementar la flota amarilla y solo pueden recoger pasajeros en zonas designadas.
  • For-Hire Vehicle Trip Records: Este dataset contiene datos de los servicios contratados previamente a través de bases o aplicaciones (como Uber, Lyft y compañías privadas tradicionales).
  • High Volume For-Hire Vehicle Trip: Desde 2019, los servicios de alto volumen (como Uber y Lyft) comenzaron a reportar sus viajes en un dataset más detallado.
    Este incluye información adicional para analizar la operación de estas plataformas, que representan hoy una parte significativa del transporte en Nueva York.
📌 Nota: Para información más detallada, incluyendo el diccionario de datos de cada dataset, consultar la Guía de usuario del TLC.

Descripción del proyecto

El objetivo de este proyecto es construir un pipeline de datos en AWS que permita ingestar los datos de la TLC.

📌 Nota: Para proyecto solo integraremos los datos del dataset de Yellow Trips y Green trips.

La siguiente es la arquitectura sugerida para este proyecto:

Outcome final

La solución final debe ser capaz de ingestar todos los archivos los datos del dataset de Yellow trips y Green trips para el año 2025.


Instrucciones

1. Prepárate antes de iniciar el proyecto

  • Si es tu primera vez utilizando AWS te recomiendo hacer este curso introductorio de 4 horas donde se hace una introducción a lo que es AWS.
  • Antes de empezar a hacer cosas en AWS te sugiero también ver este vídeo de 20 minutos acerca de IAM. Este es el "centro de mando" donde se manejan los permisos en AWS. Si no entiendes bien cómo funcionan los permisos en AWS vas a tener muchos retos a la hora de hacer este proyecto.
  • Finalmente, también recomiendo este vídeo de 13 minutos donde vas a tener una breve introducción a los servicios de AWS que todo Data Engineer debería conocer.

2. Crea tu cuenta en AWS

Usaremos el free tier de AWS para este proyecto.

📌 Nota: Asegúrate de seguir las buenas prácticas de AWS a la hora de crear la cuenta. Activa MFA y configura alertas de costos. Sin estas alertas corres el riesgo de pagar mucho dinero en caso de un error, así que cuidado con eso.

Antes de iniciar con el proyecto te recomiendo:

  • Nunca usar el root user. Una vez crees tu cuenta, crea un usuario administrador desde el cual puedas ejecutar las demás acciones. Por ejemplo, yo creé un usuario llamado admin-engineer y le asigné dos políticas que AWS trae por defecto: AdministratorAccess y IAMUserChangePassword.
  • Una vez hayas hecho esto, inicia sesión con tu usuario admin-engineer y desde allí ejecuta todo. Recuerda siempre seguir las buenas prácticas.
  • No olvides activar el MFA!

3. Crea los recursos

Para este proyecto vas a necesitar crear 2 recursos en AWS:

  • Una función Lambda
  • Un bucket de S3 donde guardar los archivos

3.1 Creación de recursos

📌 Nota: Antes de crear la función, asegúrate de ver el siguiente vídeo para entender mejor cómo funciona Lambda: AWS Lambda For Absolute Beginners: Python Tutorial in 25 Minutes
  • Crea la función Lambda a través de la consola de AWS. Solo asígnale el nombre y elige la versión de Python con la que quieras trabajar. Deja todas las opciones por defecto activadas. Esto hará que AWS cree automáticamente un rol para esta Lambda. A ese rol deberás asignarle permisos de escritura en S3.
  • Crea el bucket de S3. Aquí guardaremos todos los datos que ingestemos a lo largo del proyecto. Ten presente que los nombres de los buckets deben ser únicos en todo AWS. Te recomiendo esta plantilla para el nombre: nombre-apellido-data-lake. Deja todas las configuraciones por defecto activadas.
  • Crea un folder dentro de tu data lake. Una vez creado tu bucket, crea un folder llamado landing. Ahí guardarás todos los archivos provenientes del proceso de ingesta de datos.

3.2 Asignación de permisos

Para este proyecto solo necesitas asignar un permiso explícito: que el rol de tu función Lambda pueda escribir en el bucket de S3 que creaste en el paso anterior. No le des más permisos de los necesarios.

Recuerda seguir el principio de least privilege a la hora de crear permisos:

📌 En la práctica, esto significa dar únicamente los permisos mínimos necesarios para que la Lambda haga su trabajo, y nada más. “Using least-privilege permissions is an IAM best practice recommendation. The concept of least-privilege permissions is to grant users the permissions required to perform a task and no additional permissions.”

Acá tienes un ejemplo de política que podrías asignar al rol de la Lambda (recuerda reemplazar YOUR_BUCKET_NAME por el nombre real de tu bucket):

Acá un ejemplo de una política que le podrías asignar al rol de la lambda:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "REPLACE_WITH_A_LABEL",  
      // Sid = Statement ID (optional). Use it to label this permission block so it's easier to read or audit later.
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
    }
  ]
}

3.3 Implementa la Lambda

Implementa la función Lambda que se encargará de la ingesta de datos. Recuerda que hay varias formas de hacerlo. Una idea sencilla es aprovechar que la TLC publica siempre los archivos con el mismo patrón de nombre:

📌 https://d37ci6vzurychx.cloudfront.net/trip-data/{DATASET_NAME}_YYYY-MM.parquet

Donde:

  • DATASET_NAME representa el nombre del archivo
  • YYYY y MM representan el año y el mes del archivo

Así, el link para el dataset de Enero de 2025 para Yellow trips luciría de la siguiente forma:

https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2025-01.parquet

Con base en esto, puedes automatizar la descarga de estos archivos con Python, haciendo un request a ese link, construyendo dinámicamente la URL a partir del nombre del dataset, año y mes; para luego guardarlo directamente en tu bucket de S3.

Capas opcionales

  1. Si quieres subir el nivel de complejidad de este proyecto, despliega la Lambda utilizando Docker. Aquí tienes un vídeo donde se explica cómo hacerlo.
  2. Monta un pipeline de de CI/CD utilizando Github Actions para desplegar el código de la Lambda. Aquí tienes un vídeo donde se explica cómo hacerlo.
  3. Define y despliega la infraestructura usando Terraform. Aquí tienes un vídeo donde se explica cómo hacerlo.

Recursos técnicos - Proyecto #1


Otros Recursos

Completar y continuar