AWS Glue: Transforma tus datos con facilidad
En la era actual de datos masivos y análisis empresariales, la capacidad de gestionar y transformar datos de manera eficiente es esencial. AWS Glue es…
En este artículo analizaremos los aspectos fundamentales que debemos conocer sobre 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.
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.
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
}
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.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.
Además de crear triggers, AWS CLI nos permite gestionarlos completamente. A continuación se muestran los comandos más utilizados.
aws glue get-triggers
aws glue get-trigger --name "trigger-diario-etl"
aws glue start-trigger --name "trigger-diario-etl"
aws glue stop-trigger --name "trigger-diario-etl"
aws glue delete-trigger --name "trigger-diario-etl"
aws glue update-trigger \
--name "trigger-diario-etl" \
--trigger-update '{
"Schedule": "cron(0 6 * * ? *)",
"Actions": [{"JobName": "mi-job-etl-v2"}]
}'
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:
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
trigger-[tipo]-[descripción] (ej: trigger-diario-ventas, trigger-post-crawler-inventario). Esto facilita la gestión cuando tienes decenas de triggers.FAILED puede iniciar un job de notificación o limpieza.--workflow-name al crear triggers para mantener todo organizado.aws glue get-trigger-run-history para revisar las ejecuciones pasadas de un trigger y detectar patrones de fallo.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:
AND o ANY.