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
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
In AWS Step Functions beträgt die Höchstgrenze für die Aufbewahrung von Verlaufsprotokollen 90 Tage. Weitere Informationen finden Sie unter Kontingente und Kontingente für Standard-Workflows in der AWS Step Functions Functions-Dokumentation.
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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/054c8e9d-76a2-4334-b21a-cbe76af45923.png)
Der in der Abbildung dargestellte Arbeitsablauf besteht aus diesen grundlegenden Schritten:
Der Benutzer lädt eine CSV-Datei in den Quellordner in Amazon S3 hoch.
Ein Amazon S3 S3-Benachrichtigungsereignis initiiert eine AWS Lambda Lambda-Funktion, die die Step Functions Functions-Zustandsmaschine startet.
Die Lambda-Funktion validiert das Schema und den Datentyp der CSV-Rohdatei.
Abhängig von den Validierungsergebnissen:
Wenn die Überprüfung der Quelldatei erfolgreich ist, wird die Datei zur weiteren Verarbeitung in den Stage-Ordner verschoben.
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.
Ein AWS Glue Glue-Crawler erstellt das Schema der Rohdatei aus dem Stage-Ordner in Amazon S3.
Ein AWS Glue Glue-Job transformiert, komprimiert und partitioniert die Rohdatei in das Parquet-Format.
Der AWS Glue Glue-Job verschiebt die Datei auch in den Transformationsordner in Amazon S3.
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.
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.
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
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/python
Ordner — Enthält Python-Pakete, die zur Erstellung der erforderlichen AWS-Lambda-Schicht für dieses Projekt benötigt werden.lambda
Ordner — 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 derRETRYLIMIT
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
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Klonen Sie das Beispielcode-Repository. |
| Developer |
Aktualisieren Sie die Parameterwerte. | Bearbeiten Sie in Ihrer lokalen Kopie des Repositorys die
| 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:
Wobei:
| Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Stellen Sie die CloudFormation Vorlage bereit. | Führen Sie den folgenden AWS-CLI-Befehl aus, um die CloudFormation Vorlage bereitzustellen:
Wobei:
| Developer |
Überprüfen Sie den Fortschritt. | Überprüfen Sie auf der CloudFormation AWS-Konsole | 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 ist | Developer |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Starten Sie die 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 Ordnernamen | Developer |
Suchen Sie nach der partitionierten AWS Glue Glue-Datenbank. |
| 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
Problem | Lö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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)
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.](images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)