AWS Glue

AWS Glue triggers

7 min lectura José Miguel

En este artículo analizaremos los aspectos fundamentales que debemos conocer sobre los triggers en AWS Glue.

¿Qué son los triggers en AWS Glue?

En AWS Glue, podemos crear objetos en el Data Catalog llamados triggers, que podemos usar para iniciar manual o automáticamente uno o más crawlers o ETL. Con los triggers, podemos diseñar una cadena de jobs y crawlers dependientes.

Cuando se activa un trigger podemos iniciar jobs y crawlers específicos. Un trigger se puede activar bajo demanda, según un cronograma o según una combinación de eventos.

Nota importante: Solo se pueden activar dos crawlers con un solo trigger. Si deseamos rastrear varios data stores, debemos usar varias fuentes para cada crawler en lugar de ejecutar varios crawlers simultáneamente.

Estados de un trigger

Un trigger puede existir en uno de varios estados. Un trigger puede estar CREATED, ACTIVATED o DEACTIVATED. También existen estados de transición, como ACTIVATING.

Veamos a continuación los tipos de triggers que podemos crear en AWS Glue.

Tipos de triggers

Programado

Este es un trigger basado en el tiempo a través de un cron. Podemos crear un trigger para un conjunto de jobs o crawlers en función de una programación. Podemos además, especificar restricciones como la frecuencia con la que se ejecutan los jobs o crawlers, qué días de la semana se ejecutan y a qué hora. Estas restricciones se basan en un cron.

La expresión cron en AWS Glue sigue el formato de 6 campos de AWS:

cron(Minutos Horas Día_del_mes Mes Día_de_la_semana Año)

Algunos ejemplos comunes:

Expresión cron Descripción
cron(0 12 * * ? *) Todos los días a las 12:00 UTC
cron(0 8 ? * MON-FRI *) De lunes a viernes a las 8:00 UTC
cron(0 0/2 * * ? *) Cada 2 horas, todos los días
cron(0 18 ? * FRI *) Cada viernes a las 18:00 UTC

Para crear un trigger programado a través de la AWS CLI, usamos el siguiente comando:

aws glue create-trigger \
  --name "trigger-diario-etl" \
  --type SCHEDULED \
  --schedule "cron(0 12 * * ? *)" \
  --actions JobName="mi-job-etl" \
  --start-on-creation

El parámetro --start-on-creation activa el trigger inmediatamente después de crearlo. Sin este parámetro, el trigger se crea en estado CREATED y debe activarse manualmente.

También podemos definir el trigger programado en formato JSON a través del API de AWS Glue:

{
  "Name": "trigger-diario-etl",
  "Type": "SCHEDULED",
  "Schedule": "cron(0 12 * * ? *)",
  "Actions": [
    {
      "JobName": "mi-job-etl"
    }
  ],
  "StartOnCreation": true
}

Condicional

Este es un trigger que se activa cuando un job o crawler anterior o varios jobs o crawlers cumplen una lista de condiciones. Cuando creamos un trigger condicional, especificamos una lista de jobs y una lista de crawlers para observar. Para cada job o crawler observado, se especifica un estado, como correcto, fallido, tiempo de espera agotado, etc. El trigger se activa si los jobs o crawlers observados finalizan con los estados especificados. Podemos configurar el trigger para que se active cuando ocurra alguno o todos los eventos observados.

Veamos un ejemplo. Podemos configurar un trigger T1 para iniciar el job J3 cuando tanto el job J1 como el job J2 se completen con éxito.

En la siguiente tabla, se enumeran los estados de finalización (eventos) de un job y un crawler que pueden ser observados.

Estados de finalización del job Estados de finalización del crawler
SUCCEEDED SUCCEEDED
STOPPED FAILED
FAILED CANCELLED
TIMEOUT

Para crear el trigger condicional T1 del ejemplo anterior a través de la AWS CLI:

aws glue create-trigger \
  --name "trigger-condicional-T1" \
  --type CONDITIONAL \
  --predicate '{
    "Logical": "AND",
    "Conditions": [
      {"LogicalOperator": "EQUALS", "JobName": "J1", "State": "SUCCEEDED"},
      {"LogicalOperator": "EQUALS", "JobName": "J2", "State": "SUCCEEDED"}
    ]
  }' \
  --actions JobName="J3" \
  --start-on-creation

La misma definición en formato JSON:

{
  "Name": "trigger-condicional-T1",
  "Type": "CONDITIONAL",
  "Predicate": {
    "Logical": "AND",
    "Conditions": [
      { "LogicalOperator": "EQUALS", "JobName": "J1", "State": "SUCCEEDED" },
      { "LogicalOperator": "EQUALS", "JobName": "J2", "State": "SUCCEEDED" }
    ]
  },
  "Actions": [
    { "JobName": "J3" }
  ],
  "StartOnCreation": true
}

El campo Logical acepta dos valores:

  • AND: El trigger se activa cuando todos los jobs/crawlers observados cumplen su condición.
  • ANY: El trigger se activa cuando al menos uno de los jobs/crawlers observados cumple su condición.

Bajo demanda

Este es un trigger que se activa manualmente. Los triggers bajo demanda nunca entran en el estado ACTIVADO o DESACTIVADO. Siempre permanecen en el estado CREADO.

Para crear un trigger bajo demanda:

aws glue create-trigger \
  --name "trigger-manual-etl" \
  --type ON_DEMAND \
  --actions JobName="mi-job-etl"

Para ejecutarlo manualmente cuando lo necesitemos:

aws glue start-trigger --name "trigger-manual-etl"

Los triggers bajo demanda son útiles para tareas que no tienen una frecuencia fija, como reprocesamiento de datos históricos o cargas puntuales.

Gestionar triggers con AWS CLI

Además de crear triggers, AWS CLI nos permite gestionarlos completamente. A continuación se muestran los comandos más utilizados.

Listar todos los triggers

aws glue get-triggers

Obtener información de un trigger específico

aws glue get-trigger --name "trigger-diario-etl"

Activar un trigger

aws glue start-trigger --name "trigger-diario-etl"

Desactivar un trigger

aws glue stop-trigger --name "trigger-diario-etl"

Eliminar un trigger

aws glue delete-trigger --name "trigger-diario-etl"

Actualizar un trigger existente

aws glue update-trigger \
  --name "trigger-diario-etl" \
  --trigger-update '{
    "Schedule": "cron(0 6 * * ? *)",
    "Actions": [{"JobName": "mi-job-etl-v2"}]
  }'

Diseñar workflows con triggers

Una de las funcionalidades más potentes de los triggers en AWS Glue es la capacidad de encadenarlos para crear workflows completos. Un workflow es una orquestación de crawlers y jobs ETL conectados mediante triggers.

Por ejemplo, un pipeline típico podría ser:

  1. Un trigger programado inicia un crawler que detecta nuevos datos en S3.
  2. Un trigger condicional observa el crawler y, al completarse con éxito, inicia un job ETL de transformación.
  3. Otro trigger condicional observa el job ETL y, al completarse, inicia un segundo job de carga al data warehouse.

Esta cadena se puede crear con AWS CLI de la siguiente forma:

# Paso 1: Crear el workflow
aws glue create-workflow --name "pipeline-ventas-diario"

# Paso 2: Trigger programado que inicia el crawler
aws glue create-trigger \
  --name "trigger-inicio-crawler" \
  --workflow-name "pipeline-ventas-diario" \
  --type SCHEDULED \
  --schedule "cron(0 6 * * ? *)" \
  --actions CrawlerName="crawler-datos-ventas" \
  --start-on-creation

# Paso 3: Trigger condicional que inicia el job ETL tras el crawler
aws glue create-trigger \
  --name "trigger-etl-transformacion" \
  --workflow-name "pipeline-ventas-diario" \
  --type CONDITIONAL \
  --predicate '{"Conditions": [{"LogicalOperator": "EQUALS", "CrawlerName": "crawler-datos-ventas", "CrawlState": "SUCCEEDED"}]}' \
  --actions JobName="job-transformacion-ventas" \
  --start-on-creation

# Paso 4: Trigger condicional que inicia la carga tras la transformación
aws glue create-trigger \
  --name "trigger-carga-dw" \
  --workflow-name "pipeline-ventas-diario" \
  --type CONDITIONAL \
  --predicate '{"Conditions": [{"LogicalOperator": "EQUALS", "JobName": "job-transformacion-ventas", "State": "SUCCEEDED"}]}' \
  --actions JobName="job-carga-data-warehouse" \
  --start-on-creation

Buenas prácticas

  1. Nombra tus triggers de forma descriptiva. Usa un patrón consistente como trigger-[tipo]-[descripción] (ej: trigger-diario-ventas, trigger-post-crawler-inventario). Esto facilita la gestión cuando tienes decenas de triggers.
  2. Usa triggers condicionales en lugar de programados en cadena. Si tienes un job que debe ejecutarse después de otro, no programes ambos con un desfase de tiempo. Usa un trigger condicional para que el segundo se inicie automáticamente al completarse el primero.
  3. Configura notificaciones para fallos. Combina tus triggers con Amazon CloudWatch Events y Amazon SNS para recibir alertas cuando un job falle. Un trigger condicional que observa el estado FAILED puede iniciar un job de notificación o limpieza.
  4. Agrupa tus triggers en workflows. Los workflows de AWS Glue proporcionan una vista unificada de todos los triggers, crawlers y jobs de un pipeline. Usa --workflow-name al crear triggers para mantener todo organizado.
  5. Monitorea el historial de ejecuciones. Usa aws glue get-trigger-run-history para revisar las ejecuciones pasadas de un trigger y detectar patrones de fallo.
  6. Limita la concurrencia. Recuerda que un trigger solo puede activar un máximo de dos crawlers. Si necesitas más, configura múltiples fuentes en un solo crawler.

Conclusión

Los triggers en AWS Glue son una herramienta fundamental para automatizar y orquestar pipelines de datos. Ya sea que necesites ejecutar un job ETL todos los días a una hora específica, encadenar múltiples jobs con dependencias, o ejecutar tareas puntuales bajo demanda, los triggers te ofrecen la flexibilidad necesaria.

Los puntos clave a recordar son:

  • Existen tres tipos de triggers: programado, condicional y bajo demanda.
  • Las expresiones cron de AWS Glue siguen el formato de 6 campos de AWS.
  • Los triggers condicionales permiten encadenar jobs y crawlers con lógica AND o ANY.
  • Los workflows agrupan triggers, crawlers y jobs en pipelines visuales.
  • La AWS CLI permite crear, gestionar y monitorear triggers de forma programable.
José Miguel Moya Curbelo
José Miguel Moya Curbelo
Senior Data Engineer & Big Data Instructor

MSc Applied Mathematics · AWS Cloud Practitioner · SCRUM Master. Especializado en arquitecturas de datos de alto rendimiento con Apache Spark, Snowflake, Python y Scala.

Conectar en LinkedIn

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada.