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.
Testen eines Blueprints
Während Sie Ihren Code entwickeln, sollten Sie lokale Tests durchführen, um zu überprüfen, ob das Workflow-Layout korrekt ist.
Lokale Tests generieren keine AWS Glue-Aufträge, -Crawler oder -Auslöser. Stattdessen führen Sie das Layoutskript lokal aus und verwenden die Methoden to_json()
undvalidate()
, um Objekte zu drucken und Fehler zu finden. Diese Methoden sind in allen drei Klassen verfügbar, die in den Bibliotheken definiert sind.
Es gibt zwei Möglichkeiten zur Handhabung der Argumente user_params
und system_params
, die AWS Glue an Ihre Layoutfunktion übergibt. Ihr Testbench-Code kann ein Wörterbuch mit Beispiel-Blueprint-Parameterwerten erstellen und dieses als user_params
-Argument an die Layoutfunktion übergeben. Sie können auch die Verweise auf user_params
entfernen und durch hartcodierte Zeichenfolgen ersetzen.
Wenn Ihr Code die Eigenschaften region
und accountId
im Argument system_params
verwendet, können Sie Ihr eigenes Wörterbuch für system_params
übergeben.
Blueprint testen
-
Starten Sie einen Python-Interpreter in einem Verzeichnis mit den Bibliotheken oder laden Sie die Blueprint-Dateien und die bereitgestellten Bibliotheken in Ihre bevorzugte integrierte Entwicklungsumgebung (IDE).
-
Stellen Sie sicher, dass Ihr Code die bereitgestellten Bibliotheken importiert.
-
Fügen Sie Code zu Ihrer Layoutfunktion hinzu, um
validate()
oderto_json()
für eine beliebige Entität oder dasWorkflow
-Objekt aufzurufen. Wenn Ihr Code beispielsweise einCrawler
-Objekt namensmycrawler
erstellt, können Sievalidate()
wie folgt aufrufen.mycrawler.validate()
Sie können
mycrawler
wie folgt drucken:print(mycrawler.to_json())
Wenn Sie
to_json
für ein Objekt aufrufen, müssen Sievalidate()
nicht auch aufrufen, dato_json()
validate()
aufruft.Am nützlichsten ist es, diese Methoden für das Workflow-Objekt aufzurufen. Angenommen, das Skript benennt das Workflowobjekt mit
my_workflow
, validieren und drucken Sie das Workflow-Objekt wie folgt.print(my_workflow.to_json())
Weitere Informationen zu
to_json()
undvalidate()
finden Sie unter Klassenmethoden.Sie können auch
pprint
importieren und das Workflow-Objekt im Schöndruck drucken, wie im Beispiel weiter unten in diesem Abschnitt gezeigt. -
Führen Sie den Code aus, beheben Sie Fehler und entfernen Sie schließlich alle Aufrufe von
validate()
oderto_json()
.
Das folgende Beispiel zeigt, wie ein Wörterbuch mit Blueprint-Beispielparametern erstellt und als user_params
-Argument an die Layoutfunktion generate_compaction_workflow
übergeben wird. Außerdem wird gezeigt, wie das generierte Workflow-Objekt im Schöndruck gedruckt wird.
from pprint import pprint from awsglue.blueprint.workflow import * from awsglue.blueprint.job import * from awsglue.blueprint.crawler import * USER_PARAMS = {"WorkflowName": "compaction_workflow", "ScriptLocation": "s3://awsexamplebucket1/scripts/threaded-compaction.py", "PassRole": "arn:aws:iam::111122223333:role/GlueRole-ETL", "DatabaseName": "cloudtrial", "TableName": "ct_cloudtrail", "CoalesceFactor": 4, "MaxThreadWorkers": 200} def generate_compaction_workflow(user_params: dict, system_params: dict) -> Workflow: compaction_job = Job(Name=f"{user_params['WorkflowName']}_etl_job", Command={"Name": "glueetl", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "3"}, Role="arn:aws:iam::111122223333:role/AWSGlueServiceRoleDefault", DefaultArguments={"DatabaseName": user_params['DatabaseName'], "TableName": user_params['TableName'], "CoalesceFactor": user_params['CoalesceFactor'], "max_thread_workers": user_params['MaxThreadWorkers']}) catalog_target = {"CatalogTargets": [{"DatabaseName": user_params['DatabaseName'], "Tables": [user_params['TableName']]}]} compacted_files_crawler = Crawler(Name=f"{user_params['WorkflowName']}_post_crawl", Targets = catalog_target, Role=user_params['PassRole'], DependsOn={compaction_job: "SUCCEEDED"}, WaitForDependencies="AND", SchemaChangePolicy={"DeleteBehavior": "LOG"}) compaction_workflow = Workflow(Name=user_params['WorkflowName'], Entities=Entities(Jobs=[compaction_job], Crawlers=[compacted_files_crawler])) return compaction_workflow generated = generate_compaction_workflow(user_params=USER_PARAMS, system_params={}) gen_dict = generated.to_json() pprint(gen_dict)