Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Démarrage d'un flux de travail AWS Glue avec un événement Amazon EventBridge
Amazon EventBridge, également connu sous le nom de CloudWatch Events, vous permet d'automatiser vos services AWS et de répondre automatiquement aux événements système tels que les problèmes de disponibilité des applications ou les changements de ressources. Les événements des services AWS sont fournis à EventBridge presque en temps réel. Vous pouvez écrire des règles simples pour indiquer quels événements vous intéressent et les actions automatisées à effectuer quand un événement correspond à une règle.
Avec le support EventBridge, AWS Glue peut servir de producteur et de consommateur d'événements dans une architecture orientée événements. Pour les flux de travail, AWS Glue prend en charge tout type d'événement EventBridge en tant que consommateur. Le cas d'utilisation le plus courant est l'arrivée d'un nouvel objet dans un compartiment Amazon S3. Si vous avez des données arrivant à des intervalles irréguliers ou indéfinis, vous pouvez traiter ces données aussi près que possible de leur arrivée.
Note
AWS Glue ne garantit pas la livraison des messages EventBridge. AWS Glue n'effectue aucune déduplication si EventBridge livre des messages en double. Vous devez gérer l'idempotence en fonction de votre cas d'utilisation.
Veillez à configurer correctement les règles EventBridge pour éviter d'envoyer des événements indésirables.
Avant de commencer
Si vous souhaitez démarrer un flux de travail avec des événements de données Amazon S3, vous devez vous assurer que les événements du compartiment S3 concerné sont consignés dans AWS CloudTrail et EventBridge. Pour ce faire, vous devez créer un journal d'activité CloudTrail. Pour de plus amples informations, veuillez consulter Création d'un journal d'activité pour votre compte AWS.
Pour démarrer d'un flux de travail avec un événement EventBridge
Note
Dans les commandes suivantes, remplacez :
-
<workflow-name>
par le nom à attribuer au flux de travail. -
<trigger-name>
par le nom à attribuer au déclencheur. -
<bucket-name>
par le nom du compartiment Amazon S3. -
<account-id>
par un ID de compte AWS valide. -
<region>
par le nom de la région (par exemple,us-east-1
). -
<rule-name>
par le nom à attribuer à la règle EventBridge.
-
Assurez-vous de disposer des autorisations AWS Identity and Access Management (IAM) vous permettant de créer et d'afficher des règles et des cibles EventBridge. Voici un modèle de politique de clé que vous pouvez attacher. Vous voudrez peut-être restreindre sa portée afin d'imposer des limites aux opérations et aux ressources.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:DisableRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets", "events:EnableRule", "events:List*", "events:Describe*" ], "Resource": "*" } ] }
-
Créez un rôle IAM que le service EventBridge peut endosser lorsqu'il transmet un événement à AWS Glue.
-
Sur la page Création d'un rôle de la console IAM, sélectionnez Service AWS. Ensuite, sélectionnez le service CloudWatch Events.
-
Suivez intégralement l'assistant de Création d'un rôle. L'Assistant attache automatiquement les politiques
CloudWatchEventsBuiltInTargetExecutionAccess
etCloudWatchEventsInvocationAccess
. -
Attachez la politique en ligne suivante au rôle. Cette politique autorise le service EventBridge à transmettre les événements vers AWS Glue.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:notifyEvent" ], "Resource": [ "arn:aws:glue:
<region>
:<account-id>
:workflow/<workflow-name>
" ] } ] }
-
-
Saisissez la commande suivante pour créer le flux de travail.
Veuillez consulter la rubrique create-workflow dans la Référence des commandes AWS CLI pour plus d'informations sur les paramètres de ligne de commande facultatifs supplémentaires.
aws glue create-workflow --name
<workflow-name>
-
Saisissez la commande suivante pour créer un déclencheur d'événement EventBridge pour le flux de travail. Ce sera le déclencheur de démarrage du flux de travail. Remplacez
<actions>
avec les actions à effectuer (les tâches et les crawlers à démarrer).Veuillez consulter la rubrique create-triggerdans la Référence des commandes AWS CLI pour obtenir des informations sur la manière de coder les arguments
actions
.aws glue create-trigger --workflow-name
<workflow-name>
--type EVENT --name<trigger-name>
--actions<actions>
Si vous souhaitez que le flux de travail soit déclenché par un lot d'événements au lieu d'un événement EventBridge unique, saisissez la commande suivante à la place.
aws glue create-trigger --workflow-name
<workflow-name>
--type EVENT --name<trigger-name>
--event-batching-condition BatchSize=<number-of-events>
,BatchWindow=<seconds>
--actions<actions>
En ce qui concerne les arguments
event-batching-condition
,BatchSize
est obligatoire etBatchWindow
est facultatif. SiBatchWindow
est omis, la fenêtre est définie par défaut à 900 secondes, ce qui correspond à la taille maximale de la fenêtre.L'exemple suivant crée un déclencheur qui démarre le flux de travail
eventtest
après l'arrivée de trois événements EventBridge, ou cinq minutes après l'arrivée du premier événement, selon la première éventualité.aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
-
Créer une règle dans Amazon EventBridge.
-
Créer l'objet JSON définissant les détails de la règle dans votre éditeur de texte préféré.
L'exemple suivant spécifie Amazon S3 comme source d'événement,
PutObject
comme nom de l'événement, et le nom du compartiment en tant que paramètre de requête. Cette règle démarre un flux de travail lorsqu'un nouvel objet arrive dans le compartiment.{ "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject" ], "requestParameters": { "bucketName": [ "
<bucket-name>
" ] } } }Pour démarrer le flux de travail lorsqu'un nouvel objet arrive dans un dossier du compartiment, vous pouvez introduire le code suivant dans
requestParameters
."requestParameters": { "bucketName": [ "
<bucket-name>
" ] "key" : [{ "prefix" : "<folder1>
/<folder2>
/*"}}] } -
Utilisez votre outil préféré pour convertir l'objet JSON de définition de règle en une chaîne échappée.
{\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"
<bucket-name>
\"\n ]\n }\n }\n} -
Exécutez la commande suivante pour créer un modèle de paramètre JSON que vous pouvez modifier afin de spécifier les paramètres d'entrée d'une commande
put-rule
ultérieure. Enregistrez le résultat dans un fichier. Dans cet exemple, le fichier est nomméruleCommand
.aws events put-rule --name
<rule-name>
--generate-cli-skeleton >ruleCommandPour de plus amples informations sur le paramètre
--generate-cli-skeleton
, veuillez consulter la rubrique Génération du squelette AWS CLI et des paramètres d'entrée à partir d'un fichier d'entrée JSON ou YAML dans le Guide de l'utilisateur de l'interface de ligne de commande AWS.Le fichier de sortie devrait ressembler à ce qui suit.
{ "Name": "", "ScheduleExpression": "", "EventPattern": "", "State": "ENABLED", "Description": "", "RoleArn": "", "Tags": [ { "Key": "", "Value": "" } ], "EventBusName": "" }
-
Modifiez le fichier pour supprimer éventuellement des paramètres et pour spécifier au minimum les paramètres
Name
,EventPattern
etState
. Pour le paramètreEventPattern
, fournissez la chaîne d'échappement des détails de règle que vous avez créé à l'étape précédente.{ "Name": "
<rule-name>
", "EventPattern": "{\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>
\"\n ]\n }\n }\n}", "State": "DISABLED", "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket" }Note
Il est préférable de laisser la règle désactivée jusqu'à ce que vous ayez terminé la création du flux de travail.
-
Saisissez la commande
put-rule
suivante, qui lit les paramètres d'entrée dans le fichierruleCommand
.aws events put-rule --name
<rule-name>
--cli-input-json file://ruleCommandLa sortie suivante indique que l'opération a réussi.
{ "RuleArn": "
<rule-arn>
" }
-
-
Saisissez la commande suivante pour attacher la règle à une cible. La cible est le flux de travail dans AWS Glue. Remplacez
<role-name>
par le rôle que vous avez créé au début de cette procédure.aws events put-targets --rule
<rule-name>
--targets "Id"="1","Arn"="arn:aws:glue:<region>
:<account-id>
:workflow/<workflow-name>
","RoleArn"="arn:aws:iam::<account-id>
:role/<role-name>
" --region<region>
La sortie suivante indique que l'opération a réussi.
{ "FailedEntryCount": 0, "FailedEntries": [] }
-
Confirmez la connexion réussie de la règle et de la cible en saisissant la commande suivante.
aws events list-rule-names-by-target --target-arn arn:aws:glue:
<region>
:<account-id>
:workflow/<workflow-name>
La sortie suivante indique que l'opération a réussi, où
<rule-name>
est le nom de la règle que vous avez créée.{ "RuleNames": [ "
<rule-name>
" ] } Connectez-vous à la AWS Management Console et ouvrez la console AWS Glue à l'adresse https://console.aws.amazon.com/glue/
. -
Sélectionnez le flux de travail et vérifiez que le déclencheur de démarrage et ses actions (les tâches ou les crawlers qu'il démarre) apparaissent sur le graphique du flux de travail. Procédez ensuite comme indiqué dans Étape 3 : Ajouter d'autres déclencheurs. Vous pouvez également ajouter d'autres composants au flux de travail en utilisant l'API AWS Glue ou AWS Command Line Interface.
-
Lorsque le flux de travail est entièrement défini, activez la règle.
aws events enable-rule --name
<rule-name>
Le flux de travail est désormais prêt à être démarré par un événement ou un lot d'événements EventBridge.