Quiero utilizar una función de AWS Lambda para iniciar automáticamente un trabajo de AWS Glue cuando se complete la ejecución de un rastreador.
Breve descripción
Para iniciar un trabajo cuando se complete la ejecución de un rastreador, crea una función de AWS Lambda y una regla de Amazon EventBridge.
Nota: También puedes utilizar los flujos de trabajo de AWS Glue para iniciar automáticamente un trabajo cuando se complete la ejecución de un rastreador. Para obtener más información, consulta ¿Cómo puedo utilizar los flujos de trabajo de AWS Glue para iniciar automáticamente un trabajo cuando finaliza la ejecución de un rastreador?
Resolución
Requisitos previos:
Debes tener lo siguiente:
- Un trabajo de extracción, transformación y carga (ETL) de AWS Glue.
- Un rastreador de AWS Glue.
- Un rol de AWS Identity and Access Management (IAM) para Lambda con permiso para ejecutar trabajos de AWS Glue. Por ejemplo, configura un rol vinculado a un servicio para Lambda que tenga asociada la política AWSGlueServiceRole.
Creación de la función de Lambda
Sigue estos pasos:
- Abre la consola de Lambda.
- Selecciona Crear función.
- En la página Crear función, introduce la siguiente información:
Selecciona Crear desde cero.
En Nombre de la función, introduce un nombre para la función.
En Tiempo de ejecución, elige una opción de Python.
En Arquitectura, utiliza la opción predeterminada, x86_64.
En Cambiar el rol de ejecución predeterminado, en Rol de ejecución, elija Usar un rol existente.
En Rol existente, selecciona un rol de IAM que tenga permiso para ejecutar trabajos de AWS Glue.
- Selecciona Crear función.
- En la página de detalles de la función, en Código fuente, introduce el siguiente código:
# Set up loggingimport json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')
# Variables for the job:
glueJobName = "MyTestJob"
# Define Lambda function
def lambda_handler(event, context):
logger.info('## INITIATED BY EVENT: ')
logger.info(event['detail'])
response = client.start_job_run(JobName = glueJobName)
logger.info('## STARTED GLUE JOB: ' + glueJobName)
logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
return response
Nota: Sustituye MyTestJob por el nombre de tu trabajo de ETL de AWS Glue.
- En Código fuente, selecciona Probar.
- Abre la consola de AWS Glue y, a continuación, confirma si el trabajo se ha iniciado.
Para probar la función de Lambda, ejecuta el rastreador de AWS Glue. A continuación, consulta la lista de recursos de ejecución de trabajos de tu trabajo de ETL de AWS Glue. El Estado de ejecución muestra Iniciando o En ejecución.
Creación de la regla de EventBridge
Sigue estos pasos:
- Abre la consola de EventBridge.
- En el panel de navegación, selecciona Reglas y, a continuación, selecciona Crear una regla.
- Introduce un nombre y una descripción para la regla y selecciona Siguiente.
- Utiliza los valores predeterminados para Origen del evento y Evento de muestra.
- En la sección Patrón de eventos, selecciona Patrones personalizados (editor JSON).
- Introduce el siguiente código en el campo Patrón de eventos:
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
Nota: Sustituye MyTestCrawl por el nombre de tu rastreador de AWS Glue.
- En Seleccionar destinos, introduce la siguiente información:
En Destino, selecciona Función de Lambda.
En Función, selecciona tu función de Lambda.
- Selecciona Crear.
Para probar la función de Lambda y la regla de EventBridge, ejecuta el rastreador de AWS Glue. A continuación, consulta la lista de recursos de ejecución de trabajos de tu trabajo de ETL de AWS Glue. El Estado de ejecución muestra Iniciando o En ejecución.
Información relacionada
Creación de reglas que reaccionen a los eventos en Amazon EventBridge