Erstellen des Blueprint-Layoutskripts - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen des Blueprint-Layoutskripts

Das Blueprint-Layoutskript muss eine Funktion enthalten, die die Entitäten in Ihrem Workflow generiert. Sie können diese Funktion benennen, wie immer Sie möchten. AWS Glue verwendet die Konfigurationsdatei, um den vollständig qualifizierten Namen der Funktion zu ermitteln.

Die Layoutfunktion führt Folgendes durch:

  • (Optional) Instanziiert die Job-Klasse, um Job-Objekte zu erstellen, und übergibt Argumente wie Command und Role. Dies sind Auftragseigenschaften, die Sie angeben, wenn Sie den Auftrag mit der AWS Glue-Konsole oder der API erstellen.

  • (Optional) Instanziiert die Crawler-Klasse, um Crawler-Objekte zu erstellen, und übergibt Argumente wie Name, Rolle und Ziel.

  • Übergibt die zusätzlichen Argumente DependsOn und WaitForDependencies an Job() und Crawler(), um Abhängigkeiten zwischen den Objekten (Workflow-Entitäten) anzugeben. Diese Argumente werden später in diesem Abschnitt erläutert.

  • Instanziiert die Workflow-Klasse, um das Workflow-Objekt zu erstellen, das an AWS Glue zurückgegeben wird. Dabei werden ein Name-Argument, ein Entities-Argument und ein optionales OnSchedule-Argument übergeben. Das Entities-Argument gibt alle Aufträge und Crawler an, die im Workflow enthalten sein sollen. Um zu erfahren, wie man ein Entities-Objekt aufbaut, sehen Sie sich das Beispielprojekt weiter unten in diesem Abschnitt an.

  • Gibt das Workflow-Objekt zurück.

Definitionen der Klassen Job, Crawler und Workflow finden Sie unter Referenz zu AWS Glue-Blueprint-Klassen.

Die Layoutfunktion muss die folgenden Eingabeargumente akzeptieren.

Argument Beschreibung
user_params Python-Wörterbuch der Blueprint-Parameternamen und -werte. Weitere Informationen finden Sie unter Angeben der Blueprint-Parameter.
system_params Python-Wörterbuch, das zwei Eigenschaften enthält: region und accountId.

Hier ist ein Layoutgenerator-Beispielskript in einer Datei namens Layout.py:

import argparse import sys import os import json from awsglue.blueprint.workflow import * from awsglue.blueprint.job import * from awsglue.blueprint.crawler import * def generate_layout(user_params, system_params): etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']), Command={ "Name": "glueetl", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole']) post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']), Command={ "Name": "pythonshell", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole'], DependsOn={ etl_job: "SUCCEEDED" }, WaitForDependencies="AND") sample_workflow = Workflow(Name=user_params['WorkflowName'], Entities=Entities(Jobs=[etl_job, post_process_job])) return sample_workflow

Das Beispielskript importiert die erforderlichen Blueprint-Bibliotheken und enthält eine generate_layout-Funktion, die einen Workflow mit zwei Aufträgen generiert. Dies ist ein sehr einfaches Skript. Ein komplexeres Skript könnte zusätzliche Logik und Parameter verwenden, um einen Workflow mit vielen Aufträgen und Crawlern oder sogar einer variablen Anzahl von Aufträgen und Crawlern zu generieren.

Verwenden des DependsOn-Arguments

Das DependsOn-Argument ist eine Wörterbuchdarstellung einer Abhängigkeit dieser Entität von anderen Entitäten innerhalb des Workflows. Es hat das folgende Format.

DependsOn = {dependency1 : state, dependency2 : state, ...}

Die Schlüssel in diesem Wörterbuch stellen die Objektreferenz, nicht den Namen, der Entität dar, während die Werte Zeichenfolgen sind, die dem Zustand entsprechen, auf den geachtet werden soll. AWS Glue leitet die richtigen Auslöser ab. Informationen zu den gültigen Zuständen finden Sie unter Bedingungsstruktur.

Beispielsweise kann ein Auftrag vom erfolgreichen Abschluss eines Crawlers abhängen. Wenn Sie ein Crawler-Objekt namens crawler2 wie folgt festlegen:

crawler2 = Crawler(Name="my_crawler", ...)

Dann enthält ein Objekt, das von crawler2 abhängig ist, ein Konstruktor-Argument wie folgt:

DependsOn = {crawler2 : "SUCCEEDED"}

Zum Beispiel:

job1 = Job(Name="Job1", ..., DependsOn = {crawler2 : "SUCCEEDED", ...})

Wenn DependsOn für eine Entität weggelassen wird, hängt diese Entität vom Workflow-Startauslöser ab.

Verwenden des Arguments WaitForDependencies

Das WaitForDependencies-Argument definiert, ob eine Auftrags- oder Crawler-Entität warten soll, bis alle Entitäten, von denen sie abhängig ist, abgeschlossen sind, oder bis irgendeine abgeschlossen ist.

Die zulässigen Werte sind „AND“ oder „ANY“.

Verwenden des Arguments OnSchedule

Das OnSchedule-Argument für den Workflow-Klassenkonstruktor ist ein cron-Ausdruck, der die Startauslöserdefinition für einen Workflow definiert.

Wenn dieses Argument angegeben wird, erstellt AWS Glue einen Zeitplanauslöser mit dem entsprechenden Zeitplan. Wenn es nicht angegeben wird, ist der Startauslöser für den Workflow ein On-Demand-Auslöser.