Starten eines AWS Glue-Workflows mit einem Amazon-EventBridge-Ereignis
Mit Amazon EventBridge, auch bekannt als CloudWatch Events, können Sie Ihre AWS-Services automatisieren und automatisch auf Systemereignisse reagieren, z. B. bei Problemen mit der Anwendungsverfügbarkeit oder bei Ressourcenänderungen. Ereignisse von AWS-Services werden in EventBridge nahezu in Echtzeit bereitgestellt. Sie können einfache Regeln schreiben, um anzugeben, welche Ereignisse für Sie interessant sind und welche automatisierten Aktionen durchgeführt werden sollen, wenn sich für ein Ereignis eine Übereinstimmung mit einer Regel ergibt.
Mit EventBridge-Support kann AWS Glue in einer ereignisgesteuerten Architektur als Ereignisproduzent und -konsument eingesetzt werden. Für Workflows unterstützt AWS Glue jede Art von EventBridge-Ereignis als Konsument. Der wahrscheinlich häufigste Anwendungsfall ist die Ankunft eines neuen Objekts in einem Amazon-S3-Bucket. Wenn Daten in unregelmäßigen oder undefinierten Intervallen eintreffen, können Sie diese Daten so zeitnah wie möglich verarbeiten.
Anmerkung
AWS Glue bietet keine garantierte Zustellung von EventBridge-Nachrichten. AWS Glue führt keine Deduplizierung durch, wenn EventBridge Nachrichten doppelt zustellt. Sie müssen die Idempotenz auf der Grundlage Ihres Anwendungsfalls verwalten.
Bei der Konfiguration von EventBridge-Regeln sollten Sie sorgfältig vorgehen, um unerwünschte Ereignisse zu vermeiden.
Bevor Sie beginnen
Wenn Sie einen Workflow mit Amazon-S3-Datenereignissen starten möchten, müssen Sie sicherstellen, dass Ereignisse für den jeweiligen S3-Bucket in AWS CloudTrail und EventBridge protokolliert werden. Dazu müssen Sie einen CloudTrail-Trail erstellen. Weitere Informationen finden Sie unter Erstellen eines Trails für Ihr AWS-Konto.
Einen Workflow mit einem EventBridge-Ereignis starten
Anmerkung
Ersetzen Sie in den folgenden Befehlen …
-
<workflow-name>durch den gewünschten Namen für den Workflow; -
<trigger-name>durch den gewünschten Namen für den Auslöser; -
<bucket-name>durch den Namen des Amazon-S3-Buckets; -
<account-id>durch eine gültige AWS-Konto-ID; -
<region>durch den Namen der Region (z. B.us-east-1); -
<rule-name>durch den gewünschten Namen für die EventBridge-Regel.
-
Sie sollten AWS Identity and Access Management-Berechtigungen (IAM) zum Erstellen und Anzeigen von EventBridge-Regeln und -Zielen haben. Nachfolgend finden Sie eine Musterrichtlinie, die Sie anfügen können. Möglicherweise sollten Sie sie eingrenzen, um Beschränkungen für die Vorgänge und Ressourcen festzulegen.
-
Erstellen Sie eine IAM-Rolle, die der EventBridge-Service übernehmen kann, wenn er ein Ereignis an AWS Glue übergibt.
-
Wählen Sie auf der Seite Create role (Rolle erstellen) der IAM-Konsole die Option AWS-Service aus. Wählen Sie dann den Service CloudWatch Events aus.
-
Schließen Sie den Assistenten Create role (Rolle erstellen) ab. Der Assistent fügt automatisch die Richtlinien
CloudWatchEventsBuiltInTargetExecutionAccessundCloudWatchEventsInvocationAccessan. -
Fügen Sie der Rolle die folgende Inline-Richtlinie an. Mit dieser Richtlinie kann der EventBridge-Service Ereignisse an AWS Glue weiterleiten.
-
-
Verwenden Sie den folgenden Befehl, um den Workflow zu erstellen.
Weitere Informationen zu zusätzlichen optionalen Befehlszeilenparametern finden Sie unter create-workflow in der AWS CLI-Befehlsreferenz.
aws glue create-workflow --name<workflow-name> -
Geben Sie den folgenden Befehl ein, um einen EventBridge-Ereignisauslöser für den Workflow zu erstellen. Dies wird der Startauslöser für den Workflow sein. Ersetzen Sie
<actions>durch die auszuführenden Aktionen (die zu startenden Aufträge und Crawler).Weitere Informationen zum Programmieren des
actions-Arguments finden Sie unter create-trigger in der AWS CLI-Befehlsreferenz.aws glue create-trigger --workflow-name<workflow-name>--type EVENT --name<trigger-name>--actions<actions>Wenn der Workflow von einem Batch von Ereignissen statt von einem einzelnen EventBridge-Ereignis ausgelöst werden soll, geben Sie stattdessen den folgenden Befehl ein.
aws glue create-trigger --workflow-name<workflow-name>--type EVENT --name<trigger-name>--event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds>--actions<actions>Für das
event-batching-condition-Argument istBatchSizeerforderlich undBatchWindowoptional. Wenn SieBatchWindowweglassen, beträgt das Fenster standardmäßig 900 Sekunden – die maximale Fenstergröße.Im folgenden Beispiel wird ein Auslöser erstellt, der den Workflow
eventteststartet, nachdem drei EventBridge-Ereignisse eingetroffen sind oder fünf Minuten nach dem Eintreffen des ersten Ereignisses, je nachdem, was zuerst eintritt.aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1 -
Erstellen Sie eine Regel in Amazon EventBridge.
-
Erstellen Sie das JSON-Objekt für die Regeldetails in Ihrem bevorzugten Texteditor.
Im folgenden Beispiel wird Amazon S3 als Ereignisquelle,
PutObjectals Ereignisname und der Bucket-Name als Anforderungsparameter angegeben. Diese Regel startet einen Workflow, wenn ein neues Objekt im Bucket eintrifft.{ "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject" ], "requestParameters": { "bucketName": [ "<bucket-name>" ] } } }Damit der Workflow gestartet wird, wenn ein neues Objekt in einem Ordner innerhalb des Buckets eintrifft, können Sie den folgenden Code für
requestParametersaustauschen."requestParameters": { "bucketName": [ "<bucket-name>" ] "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}] } -
Verwenden Sie Ihr bevorzugtes Tool, um das JSON-Regelobjekt in eine Zeichenfolge mit Escapezeichen zu konvertieren.
{\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} -
Führen Sie den folgenden Befehl aus, um eine JSON-Parametervorlage zu erstellen, die Sie bearbeiten können, um Eingabeparameter für einen nachfolgenden
put-rule-Befehl anzugeben. Speichern Sie die Ausgabe in einer Datei. In diesem Beispiel heißt die DateiruleCommand.aws events put-rule --name<rule-name>--generate-cli-skeleton >ruleCommandWeitere Informationen zum Parameter
--generate-cli-skeletonfinden Sie unter Generieren der AWS CLI-Skeleton- und -Eingabeparameter aus einer JSON- oder YAML-Eingabedatei im Benutzerhandbuch für die AWS-Befehlszeilenschnittstelle.Die Ausgabedatei sollte wie folgt aussehen.
{ "Name": "", "ScheduleExpression": "", "EventPattern": "", "State": "ENABLED", "Description": "", "RoleArn": "", "Tags": [ { "Key": "", "Value": "" } ], "EventBusName": "" } -
Bearbeiten Sie die Datei, um mindestens die Parameter
Name,EventPatternundStatefestzulegen und optional Parameter zu entfernen. Geben Sie für den ParameterEventPatterndie Zeichenfolge mit Escapezeichen für die Regeldetails an, die Sie in einem vorherigen Schritt erstellt haben.{ "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" }Anmerkung
Es empfiehlt sich, die Regel deaktiviert zu lassen, bis Sie den Workflow fertig erstellt haben.
-
Geben Sie den folgenden
put-rule-Befehl ein, der Eingabeparameter aus der DateiruleCommandliest.aws events put-rule --name<rule-name>--cli-input-json file://ruleCommandDie folgende Ausgabe zeigt den Erfolg an.
{ "RuleArn": "
<rule-arn>" }
-
-
Führen Sie den folgenden Befehl aus, um die Richtlinie einem Ziel anzufügen. Das Ziel ist der Workflow in AWS Glue. Ersetzen Sie
<role-name>durch die Rolle, die Sie zu Beginn dieses Verfahrens erstellt haben.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>Die folgende Ausgabe zeigt den Erfolg an.
{ "FailedEntryCount": 0, "FailedEntries": [] } -
Bestätigen Sie die erfolgreiche Verbindung von Regel und Ziel, indem Sie den folgenden Befehl eingeben.
aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>Die folgende Ausgabe zeigt den Erfolg an. Dabei ist
<rule-name>der Name der Regel, die Sie erstellt haben.{ "RuleNames": [ "
<rule-name>" ] } Melden Sie sich bei der AWS Management Console an und öffnen Sie die AWS Glue-Konsole unter https://console.aws.amazon.com/glue/
. -
Wählen Sie den Workflow aus und prüfen Sie, ob der Startauslöser und seine Aktionen – die zu startenden Aufträge oder Crawler – im Workflow-Diagramm angezeigt werden. Fahren Sie anschließend mit dem Verfahren in Schritt 3: Hinzufügen weiterer Auslöser fort. Oder fügen Sie dem Workflow über die AWS Glue-API oder -AWS Command Line Interface weitere Komponenten hinzu.
-
Wenn der Workflow vollständig angegeben ist, aktivieren Sie die Regel.
aws events enable-rule --name<rule-name>Der Workflow ist nun bereit, von einem EventBridge-Ereignis oder Ereignisbatch gestartet zu werden.