Orchestrieren Sie eine ETL-Pipeline mit Validierung, Transformation und Partitionierung mithilfe von AWS Step Functions - AWS Prescriptive Guidance

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.

Orchestrieren Sie eine ETL-Pipeline mit Validierung, Transformation und Partitionierung mithilfe von AWS Step Functions

Erstellt von Sandip Gangapadhyay (AWS)

aws-step-functions-etlQuellcode-Repository: -pipeline-pattern

Umgebung: Produktion

Technologien: Analytik; Große Datenmengen; Datenseen DevOps; Serverlos

AWS-Services: Amazon Athena; AWS Glue; AWS Lambda; AWS Step Functions

Übersicht

Dieses Muster beschreibt, wie Sie eine serverlose ETL-Pipeline (Extrahieren, Transformieren und Laden) erstellen, um einen großen CSV-Datensatz zur Leistungs- und Kostenoptimierung zu validieren, zu transformieren, zu komprimieren und zu partitionieren. Die Pipeline wird von AWS Step Functions orchestriert und umfasst Funktionen zur Fehlerbehandlung, zur automatischen Wiederholung und zur Benutzerbenachrichtigung.

Wenn eine CSV-Datei in einen Bucket-Quellordner von Amazon Simple Storage Service (Amazon S3) hochgeladen wird, beginnt die ETL-Pipeline zu laufen. Die Pipeline validiert den Inhalt und das Schema der CSV-Quelldatei, wandelt die CSV-Datei in ein komprimiertes Apache Parquet-Format um, partitioniert den Datensatz nach Jahr, Monat und Tag und speichert ihn in einem separaten Ordner, damit Analysetools ihn verarbeiten können.

Der Code, der dieses Muster automatisiert GitHub, ist im Repository ETL-Pipeline mit AWS Step Functions verfügbar.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS-Konto.

  • Die AWS-Befehlszeilenschnittstelle (AWS CLI) wurde mit Ihrem AWS-Konto installiert und konfiguriert, sodass Sie AWS-Ressourcen erstellen können, indem Sie einen CloudFormation AWS-Stack bereitstellen. AWS CLI Version 2 wird empfohlen. Installationsanweisungen finden Sie unter Installation, Aktualisierung und Deinstallation von AWS CLI Version 2 in der AWS-CLI-Dokumentation. Anweisungen zur AWS-CLI-Konfiguration finden Sie unter Einstellungen für Konfiguration und Anmeldeinformationsdatei in der AWS-CLI-Dokumentation.

  • Ein Amazon-S3-Bucket

  • Ein CSV-Datensatz mit dem richtigen Schema. (Das in diesem Muster enthaltene Code-Repository enthält eine CSV-Beispieldatei mit dem richtigen Schema und Datentyp, die Sie verwenden können.)

  • Ein Webbrowser, der für die Verwendung mit der AWS-Managementkonsole unterstützt wird. (Sehen Sie sich die Liste der unterstützten Browser an.)

  • Zugriff auf die AWS Glue Glue-Konsole.

  • Zugriff auf die AWS Step Functions Functions-Konsole.

Einschränkungen

Produktversionen

  • Python 3.11 für AWS Lambda

  • AWS Glue, Version 2.0

Architektur

ETL-Prozess vom S3-Quell-Bucket über Step Functions, AWS Glue und Amazon SNS in 10 Schritten.

Der in der Abbildung dargestellte Arbeitsablauf besteht aus diesen grundlegenden Schritten:

  1. Der Benutzer lädt eine CSV-Datei in den Quellordner in Amazon S3 hoch.

  2. Ein Amazon S3 S3-Benachrichtigungsereignis initiiert eine AWS Lambda Lambda-Funktion, die die Step Functions Functions-Zustandsmaschine startet.

  3. Die Lambda-Funktion validiert das Schema und den Datentyp der CSV-Rohdatei.

  4. Abhängig von den Validierungsergebnissen:

    1. Wenn die Überprüfung der Quelldatei erfolgreich ist, wird die Datei zur weiteren Verarbeitung in den Stage-Ordner verschoben.

    2. Schlägt die Überprüfung fehl, wird die Datei in den Fehlerordner verschoben und eine Fehlerbenachrichtigung wird über Amazon Simple Notification Service (Amazon SNS) gesendet.

  5. Ein AWS Glue Glue-Crawler erstellt das Schema der Rohdatei aus dem Stage-Ordner in Amazon S3.

  6. Ein AWS Glue Glue-Job transformiert, komprimiert und partitioniert die Rohdatei in das Parquet-Format.

  7. Der AWS Glue Glue-Job verschiebt die Datei auch in den Transformationsordner in Amazon S3.

  8. Der AWS Glue Glue-Crawler erstellt das Schema aus der transformierten Datei. Das resultierende Schema kann von jedem Analysejob verwendet werden. Sie können Amazon Athena auch verwenden, um Ad-hoc-Abfragen auszuführen.

  9. Wenn die Pipeline ohne Fehler abgeschlossen wird, wird die Schemadatei in den Archivordner verschoben. Wenn Fehler auftreten, wird die Datei stattdessen in den Fehlerordner verschoben.

  10. Amazon SNS sendet eine Benachrichtigung, die auf Erfolg oder Misserfolg basierend auf dem Status der Pipeline-Fertigstellung hinweist.

Alle in diesem Muster verwendeten AWS-Ressourcen sind serverlos. Es müssen keine Server verwaltet werden.

Tools

AWS-Services

  • AWS Glue — AWS Glue ist ein vollständig verwalteter ETL-Service, der es Kunden leicht macht, ihre Daten für Analysen vorzubereiten und zu laden.

  • AWS Step Functions — AWS Step Functions ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Lambda-Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen. In der grafischen Konsole von AWS Step Functions sehen Sie den Workflow Ihrer Anwendung als eine Reihe von ereignisgesteuerten Schritten.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) ist ein Objektspeicherservice, der branchenführende Skalierbarkeit, Datenverfügbarkeit, Sicherheit und Leistung bietet.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) ist ein hochverfügbarer, langlebiger, sicherer und vollständig verwalteter Pub/Sub-Messaging-Service, mit dem Sie Microservices, verteilte Systeme und serverlose Anwendungen entkoppeln können.

  • AWS Lambda — AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitzustellen oder zu verwalten. AWS Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde.

Code

Der Code für dieses Muster ist im Repository ETL-Pipeline mit AWS Step Functions verfügbar. GitHub Das Code-Repository enthält die folgenden Dateien und Ordner:

  • template.yml— CloudFormation AWS-Vorlage für die Erstellung der ETL-Pipeline mit AWS Step Functions.

  • parameter.json— Enthält alle Parameter und Parameterwerte. Sie aktualisieren diese Datei, um Parameterwerte zu ändern, wie im Abschnitt Epics beschrieben.

  • myLayer/pythonOrdner — Enthält Python-Pakete, die zur Erstellung der erforderlichen AWS-Lambda-Schicht für dieses Projekt benötigt werden.

  • lambdaOrdner — Enthält die folgenden Lambda-Funktionen:

    • move_file.py— Verschiebt den Quelldatensatz in den Archiv-, Transformations- oder Fehlerordner.

    • check_crawler.py— Überprüft den Status des AWS Glue Glue-Crawlers so oft, wie von der RETRYLIMIT  Umgebungsvariablen konfiguriert, bevor er eine Fehlermeldung sendet.

    • start_crawler.py— Startet den AWS Glue Glue-Crawler.

    • start_step_function.py— Startet AWS Step Functions.

    • start_codebuild.py— Startet das CodeBuild AWS-Projekt.

    • validation.py— Validiert den Eingabe-Rohdatensatz.

    • s3object.py— Erzeugt die erforderliche Verzeichnisstruktur innerhalb des S3-Buckets.

    • notification.py— Sendet Erfolgs- oder Fehlerbenachrichtigungen am Ende der Pipeline.

Um den Beispielcode zu verwenden, folgen Sie den Anweisungen im Abschnitt Epics.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das Beispielcode-Repository.

  1. Öffnen Sie die ETL-Pipeline mit dem AWS Step Functions Functions-Repository.

  2. Wählen Sie auf der Haupt-Repository-Seite über der Dateiliste die Option Code aus und kopieren Sie die unter Clone with HTTPS aufgeführte URL.

  3. Ändern Sie Ihr Arbeitsverzeichnis in das Verzeichnis, in dem Sie die Beispieldateien speichern möchten.

  4. Geben Sie an einem Terminal oder einer Befehlszeile den folgenden Befehl ein:

    git clone <repoURL>

    wo <repoURL> bezieht sich auf die URL, die Sie in Schritt 2 kopiert haben.

Developer

Aktualisieren Sie die Parameterwerte.

Bearbeiten Sie in Ihrer lokalen Kopie des Repositorys die parameter.json Datei und aktualisieren Sie die Standardparameterwerte wie folgt:

  • pS3BucketName─ Der Name des S3-Buckets zum Speichern der Datensätze. Die Vorlage erstellt diesen Bucket für Sie. Der Bucket-Name muss global eindeutig sein.

  • pSourceFolder─ Der Name des Ordners im S3-Bucket, der zum Hochladen der CSV-Quelldatei verwendet wird.

  • pStageFolder─ Der Name des Ordners im S3-Bucket, der während des Vorgangs als Staging-Bereich verwendet wird.

  • pTransformFolder─ Der Name des Ordners im S3-Bucket, der zum Speichern transformierter und partitionierter Datensätze verwendet wird.

  • pErrorFolder─ Der Ordner im S3-Bucket, in den die CSV-Quelldatei verschoben wird, wenn sie nicht validiert werden kann.

  • pArchiveFolder ─ Der Name des Ordners im S3-Bucket, der zum Archivieren der CSV-Quelldatei verwendet wird.

  • pEmailforNotification─ Eine gültige E-Mail-Adresse für den Empfang von Erfolgs- und Fehlerbenachrichtigungen.

  • pPrefix─ Eine Präfixzeichenfolge, die im Namen des AWS Glue Glue-Crawlers verwendet wird.

  • pDatasetSchema─ Das Datensatz-Schema, anhand dessen die Quelldatei validiert wird. Das Python-Paket Cerberus wird für die Validierung von Quelldatensätzen verwendet. Weitere Informationen finden Sie auf der Cerberus-Website.

Developer

Laden Sie den Quellcode in den S3-Bucket hoch.

Bevor Sie die CloudFormation Vorlage bereitstellen, die die ETL-Pipeline automatisiert, müssen Sie die Quelldateien für die CloudFormation Vorlage verpacken und in einen S3-Bucket hochladen. Führen Sie dazu den folgenden AWS-CLI-Befehl mit Ihrem vorkonfigurierten Profil aus:

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

Wobei:

  • <bucket_name>ist der Name eines vorhandenen S3-Buckets in der AWS-Region, in der Sie den Stack bereitstellen möchten. Dieser Bucket wird verwendet, um das Quellcodepaket für die CloudFormation Vorlage zu speichern.

  • <profile_name>ist ein gültiges AWS-CLI-Profil, das Sie bei der Einrichtung von AWS CLI vorkonfiguriert haben.

Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Stellen Sie die CloudFormation Vorlage bereit.

Führen Sie den folgenden AWS-CLI-Befehl aus, um die CloudFormation Vorlage bereitzustellen:

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

Wobei:

  • <stack_name>ist ein eindeutiger Bezeichner für den CloudFormation Stack.

  • <profile-name>ist Ihr vorkonfiguriertes AWS-CLI-Profil.

Developer

Überprüfen Sie den Fortschritt.

Überprüfen Sie auf der CloudFormation AWS-Konsole den Fortschritt der Stack-Entwicklung. Wenn der Status lautetCREATE_COMPLETE, wurde der Stack erfolgreich bereitgestellt.

Developer

Notieren Sie sich den Namen der AWS Glue Glue-Datenbank.

Auf der Registerkarte Ausgaben für den Stack wird der Name der AWS Glue Glue-Datenbank angezeigt. Der Schlüsselname istGlueDBOutput.

Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Starten Sie die ETL-Pipeline.

  1. Navigieren Sie zum Quellordner (oder dem Ordnernamensource, den Sie in der parameter.json Datei festgelegt haben) im S3-Bucket.

  2. Laden Sie eine CSV-Beispieldatei in diesen Ordner hoch. (Das Code-Repository enthält eine Beispieldatei mit dem NamenSample_Bank_Transaction_Raw_Dataset.csv, die Sie verwenden können.) Durch das Hochladen der Datei wird die ETL-Pipeline über Step Functions gestartet.

  3. Überprüfen Sie in der Step Functions Functions-Konsole den Status der ETL-Pipeline.

Developer

Suchen Sie nach dem partitionierten Datensatz.

Wenn die ETL-Pipeline abgeschlossen ist, stellen Sie sicher, dass der partitionierte Datensatz im Amazon S3 S3-Transformationsordner (oder dem Ordnernamentransform, den Sie in der parameter.json Datei festgelegt haben) verfügbar ist.

Developer

Suchen Sie nach der partitionierten AWS Glue Glue-Datenbank.

  1. Wählen Sie in der AWS Glue Glue-Konsole die vom Stack erstellte AWS Glue Glue-Datenbank aus (dies ist die Datenbank, die Sie im vorherigen Epic notiert haben).

  2. Stellen Sie sicher, dass die partitionierte Tabelle im AWS Glue Glue-Datenkatalog verfügbar ist.

Developer

Führen Sie Abfragen aus.

(Optional) Verwenden Sie Amazon Athena, um Ad-hoc-Abfragen in der partitionierten und transformierten Datenbank auszuführen. Anweisungen finden Sie in der AWS-Dokumentation unter Ausführen von SQL-Abfragen mit Amazon Athena.

Datenbank-Analyst

Fehlerbehebung

ProblemLösung

AWS Identity and Access Management (IAM) -Berechtigungen für den AWS Glue Glue-Job und den Crawler

Wenn Sie den AWS Glue Glue-Job oder den Crawler weiter anpassen, stellen Sie sicher, dass Sie die entsprechenden IAM-Berechtigungen in der vom AWS Glue Glue-Job verwendeten IAM-Rolle gewähren oder AWS Lake Formation Datenberechtigungen gewähren. Weitere Informationen finden Sie in der AWS-Dokumentation.

Zugehörige Ressourcen

AWS-Servicedokumentation

Zusätzliche Informationen

Das folgende Diagramm zeigt den AWS Step Functions Functions-Workflow für eine erfolgreiche ETL-Pipeline im Bereich Step Functions Inspector.

Step Functions Functions-Workflow zur Validierung der Eingabe-CSV-Datei, zum Crawlen von Daten und zum Ausführen des AWS Glue Glue-Jobs.

Das folgende Diagramm zeigt den AWS Step Functions Functions-Workflow für eine ETL-Pipeline, die aufgrund eines Eingabevalidierungsfehlers fehlschlägt, im Bereich Step Functions Inspector.

Step Functions Functions-Workflow mit Fehler, sodass die Datei in den Fehlerordner verschoben wird.