Je souhaite utiliser une fonction AWS Lambda pour démarrer automatiquement une tâche AWS Glue à la fin de l’exécution d’un robot.
Brève description
Pour pouvoir démarrer une tâche une fois l’exécution d’un robot terminée, vous devez créer une fonction AWS Lambda et une règle Amazon EventBridge.
Remarque : Vous pouvez également utiliser des flux de travail AWS Glue pour démarrer automatiquement une tâche à la fin de l’exécution d’un robot. Pour plus d’informations, consultez la section Comment utiliser les flux de travail AWS Glue pour démarrer automatiquement une tâche à la fin de l’exécution d’un robot ?
Résolution
Prérequis :
Vous devez disposer des éléments suivants :
- Tâche d’extraction, transformation et chargement (ETL) AWS Glue
- Robot AWS Glue
- Rôle Gestion des identités et des accès AWS (AWS IAM) pour Lambda avec l’autorisation d’exécuter des tâches AWS Glue. Vous pouvez par exemple configurer un rôle lié à un service pour Lambda auquel la politique AWSGlueServiceRole est attachée.
Créer la fonction Lambda
Procédez comme suit :
- Ouvrez la console Lambda.
- Sélectionnez Créer une fonction.
- Sur la page Créer une fonction, saisissez les informations suivantes :
Sélectionnez Créer à partir de zéro.
Dans Nom de la fonction, saisissez le nom de votre fonction.
Dans Exécution, choisissez une option Python.
Dans Architecture, utilisez l’option par défaut : x86_64.
Sous Modifier le rôle d'exécution par défaut, dans Rôle d'exécution, sélectionnez Utiliser un rôle existant.
Dans Rôle existant, sélectionnez le rôle IAM autorisé à exécuter des tâches AWS Glue.
- Sélectionnez Créer une fonction.
- Sur la page Détails de la fonction, sous Source du code, saisissez le code suivant :
# 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
Remarque : Remplacez MyTestJob par le nom de votre tâche ETL AWS Glue.
- Sous Source du code, sélectionnez Tester.
- Ouvrez la console AWS Glue, puis vérifiez que la tâche a bien démarré.
Pour tester la fonction Lambda, exécutez votre robot AWS Glue. Puis, vérifiez la liste de ressources d’exécution de tâches de votre tâche ETL AWS Glue. Le statut d’exécution indique Démarrage en cours ou En cours d’exécution.
Créer la règle EventBridge
Procédez comme suit :
- Ouvrez la console EventBridge.
- Dans le volet de navigation, choisissez Règles, puis Créer une règle.
- Saisissez le nom et la description de la règle, puis sélectionnez Suivant.
- Utilisez les valeurs par défaut pour Source d’événement et Exemple d’événement.
- Dans la section Modèle d’événement, sélectionnez Modèles personnalisés (éditeur JSON).
- Saisissez le code suivant dans le champ Modèle d'événement :
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
Remarque : Remplacez MyTestCrawl par le nom de votre robot AWS Glue.
- Dans Sélectionner des cibles, saisissez les informations suivantes :
Dans Cible, sélectionnez Fonction Lambda.
Dans Fonction Lambda, sélectionnez votre fonction Lambda.
- Sélectionnez Créer.
Pour tester la fonction Lambda et la règle EventBridge, exécutez votre robot AWS Glue. Puis, vérifiez la liste de ressources d’exécution de tâches de votre tâche ETL AWS Glue. Le statut d’exécution indique Démarrage en cours ou En cours d’exécution.
Informations connexes
Création de règles Amazon EventBridge qui réagissent aux événements