Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Führen Sie Komponententests für Python-ETL-Jobs AWS Glue mithilfe des Pytest-Frameworks aus - 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.

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.

Führen Sie Komponententests für Python-ETL-Jobs AWS Glue mithilfe des Pytest-Frameworks aus

Erstellt von Praveen Kumar Jeyarajan (AWS) und Vaidy Sankaran (AWS)

Übersicht

Sie können Komponententests für Python-Jobs zum Extrahieren, Transformieren und Laden (ETL) für AWS Glue in einer lokalen Entwicklungsumgebung ausführen, aber das Replizieren dieser Tests in einer DevOps Pipeline kann schwierig und zeitaufwändig sein. Unit-Tests können besonders schwierig sein, wenn Sie den Mainframe-ETL-Prozess auf AWS Technologie-Stacks modernisieren. Dieses Muster zeigt Ihnen, wie Sie Komponententests vereinfachen und gleichzeitig die bestehende Funktionalität beibehalten, Unterbrechungen wichtiger Anwendungsfunktionen bei der Veröffentlichung neuer Funktionen vermeiden und qualitativ hochwertige Software beibehalten können. Sie können die Schritte und Codebeispiele in diesem Muster verwenden, um Komponententests für Python-ETL-Jobs auszuführen, AWS Glue indem Sie das Pytest-Framework in AWS CodePipeline verwenden. Sie können dieses Muster auch verwenden, um mehrere AWS Glue Jobs zu testen und bereitzustellen.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktiver AWS-Konto

  • Eine Amazon Elastic Container Registry (Amazon ECR) -Image-URI für Ihre AWS Glue Bibliothek, heruntergeladen von der Amazon ECR Public Gallery

  • Bash-Terminal (auf jedem Betriebssystem) mit einem Profil für das Ziel und AWS-Konto AWS-Region

  • Python 3.10 oder höher

  • Pytest

  • Moto-Python-Bibliothek zum Testen AWS-Services

Architektur

Das folgende Diagramm beschreibt, wie Komponententests für AWS Glue ETL-Prozesse, die auf Python basieren, in eine typische Pipeline auf Unternehmensebene AWS DevOps integriert werden können.

Komponententests für AWS Glue ETL-Prozesse.

Das Diagramm zeigt den folgenden Workflow:

  1. AWS CodePipeline Verwendet in der Quellphase einen versionierten Amazon Simple Storage Service (Amazon S3) -Bucket zum Speichern und Verwalten von Quellcode-Assets. Zu diesen Ressourcen gehören ein Beispiel für einen Python-ETL-Job (sample.py), eine Unit-Test-Datei (test_sample.py) und eine AWS CloudFormation Vorlage. CodePipeline Überträgt dann den neuesten Code aus dem Hauptzweig zur weiteren Verarbeitung in das AWS CodeBuild Projekt.

  2. In der Erstellungs- und Veröffentlichungsphase wird der neueste Code aus der vorherigen Quellphase mithilfe eines AWS Glue öffentlichen Amazon ECR-Images auf Einheiten getestet. Anschließend wird der Testbericht für CodeBuild Berichtsgruppen veröffentlicht. Das Container-Image im öffentlichen Amazon ECR-Repository für AWS Glue Bibliotheken enthält alle Binärdateien, die für die lokale Ausführung und auf Unit-Tests PySparkbasierende ETL-Aufgaben erforderlich sind. AWS Glue Das öffentliche Container-Repository hat drei Image-Tags, einen für jede Version, die von unterstützt wird. AWS Glue Zu Demonstrationszwecken verwendet dieses Muster das glue_libs_4.0.0_image_01 Image-Tag. Um dieses Container-Image als Runtime-Image zu verwenden CodeBuild, kopieren Sie den Image-URI, der dem Image-Tag entspricht, den Sie verwenden möchten, und aktualisieren Sie dann die pipeline.yml Datei im GitHub Repository für die TestBuild Ressource.

  3. In der Bereitstellungsphase wird das CodeBuild Projekt gestartet und der Code wird in einem Amazon S3 S3-Bucket veröffentlicht, wenn alle Tests erfolgreich sind.

  4. Der Benutzer stellt die AWS Glue Aufgabe mithilfe der CloudFormation Vorlage im deploy Ordner bereit.

Tools

AWS-Services

  • AWS CodeBuildist ein vollständig verwalteter Build-Service, der Sie beim Kompilieren von Quellcode, beim Ausführen von Komponententests und beim Erstellen bereitgestellter Artefakte unterstützt.

  • AWS CodePipelinehilft Ihnen dabei, die verschiedenen Phasen einer Softwareversion schnell zu modellieren und zu konfigurieren und die Schritte zu automatisieren, die für die kontinuierliche Veröffentlichung von Softwareänderungen erforderlich sind.

  • Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.

  • AWS Glueist ein vollständig verwalteter ETL-Service. Er hilft Ihnen dabei, Daten zuverlässig zu kategorisieren, zu bereinigen, anzureichern und zwischen Datenspeichern und Datenströmen zu verschieben.

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

Andere Tools

  • Python ist eine interpretierte Mehrzweck-Programmiersprache auf hohem Niveau.

  • Moto ist eine Python-Bibliothek zum Testen AWS-Services.

  • Pytest ist ein Framework zum Schreiben kleiner Komponententests, die skaliert werden können, um komplexe Funktionstests für Anwendungen und Bibliotheken zu unterstützen.

  • Die Python-ETL-Bibliothek für AWS Glue ist ein Repository für Python-Bibliotheken, die bei der lokalen Entwicklung von PySpark Batch-Jobs für verwendet werden AWS Glue.

Code-Repository

Der Code für dieses Muster ist im Repository GitHub aws-glue-jobs-unit-testing verfügbar. Das Repository umfasst die folgenden Ressourcen:

  • Ein Beispiel für einen Python-basierten AWS Glue Job im Ordner src

  • Zugeordnete Unit-Testfälle (erstellt mit dem Pytest-Framework) im Ordner tests

  • Eine CloudFormation Vorlage (in YAML geschrieben) im Ordner deploy

Bewährte Methoden

Sicherheit für Ressourcen CodePipeline

Es hat sich bewährt, Verschlüsselung und Authentifizierung für die Quell-Repositorys zu verwenden, die eine Verbindung zu Ihren Pipelines herstellen. CodePipeline Weitere Informationen finden Sie in der Dokumentation unter Bewährte Sicherheitsmethoden. CodePipeline

CodePipeline Ressourcen überwachen und protokollieren

Es hat sich bewährt, mithilfe von AWS Protokollierungsfunktionen zu ermitteln, welche Aktionen Benutzer in Ihrem Konto ausführen und welche Ressourcen sie verwenden. Die Protokolldateien zeigen Folgendes:

  • Uhrzeit und Datum der Aktionen

  • Quell-IP-Adresse der Aktionen

  • Welche Aktionen sind aufgrund unzureichender Berechtigungen fehlgeschlagen

Protokollierungsfunktionen sind in Amazon Events AWS CloudTrail und Amazon CloudWatch Events verfügbar. Sie können CloudTrail damit AWS API-Aufrufe und verwandte Ereignisse protokollieren, die von oder in Ihrem Namen getätigt wurden AWS-Konto. Weitere Informationen finden Sie AWS CloudTrail in der CodePipeline Dokumentation unter Protokollieren von CodePipeline API-Aufrufen mit.

Sie können CloudWatch Ereignisse verwenden, um Ihre AWS Cloud Ressourcen und Anwendungen zu überwachen, auf denen sie ausgeführt AWS werden. Sie können auch Benachrichtigungen unter CloudWatch Ereignisse erstellen. Weitere Informationen finden Sie in der CodePipeline Dokumentation unter CodePipeline Ereignisse überwachen.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Bereiten Sie das Codearchiv für die Bereitstellung vor.

  1. Laden Sie es code.zip aus dem GitHub aws-glue-jobs-unit-testing Repository herunter, oder erstellen Sie die .zip-Datei selbst mithilfe eines Befehlszeilentools. Sie können die .zip-Datei beispielsweise unter Linux oder Mac erstellen, indem Sie die folgenden Befehle im Terminal ausführen:

    git clone https://github.com/aws-samples/aws-glue-jobs-unit-testing.git cd aws-glue-jobs-unit-testing git checkout master zip -r code.zip src/ tests/ deploy/
  2. Melden Sie sich bei der an AWS Management Consoleund wählen Sie die Option AWS-Region Ihrer Wahl aus.

  3. Erstellen Sie einen Amazon S3 S3-Bucket und laden Sie dann das ZIP-Paket und die code.zip Datei (zuvor heruntergeladen) in den Amazon S3 S3-Bucket hoch, den Sie erstellt haben.

DevOps Ingenieur

Erstellen Sie den CloudFormation Stapel.

  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie dann die CloudFormation Konsole.

  2. Wählen Sie Stack erstellen und anschließend Mit vorhandenen Ressourcen (Ressourcen importieren) aus.

  3. Wählen Sie auf der Seite „Stack erstellen“ im Abschnitt „Vorlage angeben“ die Option „Eine Vorlagendatei hochladen“ und dann die Vorlage „pipeline.yml“ (aus dem Repository heruntergeladen) aus. GitHub Wählen Sie anschließend Weiter.

  4. Geben Sie als Stack-Name einen Stack-Namen Ihrer Wahl ein glue-unit-testing-pipeline, oder wählen Sie einen aus.

  5. Verwenden Sie für ApplicationStackNameden bereits ausgefüllten glue-codepipeline-appNamen. Dies ist der Name des CloudFormation Stacks, der von der Pipeline erstellt wird.

  6. Verwenden Sie für BucketNameden bereits ausgefüllten Bucket-Namen aws-glue-artifacts-us-east-1. Dies ist der Name des Amazon S3 S3-Buckets, der die .zip-Datei enthält und von der Pipeline zum Speichern von Codeartefakten verwendet wird.

  7. Verwenden Sie für CodeZipFileden vorab ausgefüllten Wert code.zip. Dies ist der Schlüsselname des Amazon S3 S3-Beispielcode-Objekts. Das Objekt sollte eine ZIP-Datei sein.

  8. Verwenden Sie für TestReportGroupNameden bereits ausgefüllten Namen glue-unittest-report. Dies ist der Name der CodeBuild Testberichtsgruppe, die zum Speichern der Unit-Testberichte erstellt wurde.

  9. Wählen Sie Weiter und klicken Sie dann auf der Seite Stack-Optionen konfigurieren erneut auf Weiter.

  10. Wählen Sie auf der Seite Überprüfen unter Funktionen die Option Ich bestätige, dass CloudFormation möglicherweise IAM-Ressourcen mit benutzerdefinierten Namen erstellt werden.

  11. Wählen Sie Absenden aus. Nachdem die Erstellung des Stacks abgeschlossen ist, können Sie die erstellten Ressourcen auf der Registerkarte Ressourcen sehen. Die Erstellung des Stacks dauert ungefähr 5-7 Minuten.

Der Stack erstellt eine CodePipeline Ansicht mit Amazon S3 als Quelle. In den obigen Schritten lautet die Pipeline aws-glue-unit-test-pipeline.

AWS DevOps, DevOps Ingenieur

Stellen Sie den Quellcode bereit

AufgabeBeschreibungErforderliche Fähigkeiten

Bereiten Sie das Codearchiv für die Bereitstellung vor.

  1. Laden Sie es code.zip aus dem GitHub aws-glue-jobs-unit-testing Repository herunter, oder erstellen Sie die .zip-Datei selbst mithilfe eines Befehlszeilentools. Sie können die .zip-Datei beispielsweise unter Linux oder Mac erstellen, indem Sie die folgenden Befehle im Terminal ausführen:

    git clone https://github.com/aws-samples/aws-glue-jobs-unit-testing.git cd aws-glue-jobs-unit-testing git checkout master zip -r code.zip src/ tests/ deploy/
  2. Melden Sie sich bei der an AWS Management Consoleund wählen Sie die Option AWS-Region Ihrer Wahl aus.

  3. Erstellen Sie einen Amazon S3 S3-Bucket und laden Sie dann das ZIP-Paket und die code.zip Datei (zuvor heruntergeladen) in den Amazon S3 S3-Bucket hoch, den Sie erstellt haben.

DevOps Ingenieur

Erstellen Sie den CloudFormation Stapel.

  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie dann die CloudFormation Konsole.

  2. Wählen Sie Stack erstellen und anschließend Mit vorhandenen Ressourcen (Ressourcen importieren) aus.

  3. Wählen Sie auf der Seite „Stack erstellen“ im Abschnitt „Vorlage angeben“ die Option „Eine Vorlagendatei hochladen“ und dann die Vorlage „pipeline.yml“ (aus dem Repository heruntergeladen) aus. GitHub Wählen Sie anschließend Weiter.

  4. Geben Sie als Stack-Name einen Stack-Namen Ihrer Wahl ein glue-unit-testing-pipeline, oder wählen Sie einen aus.

  5. Verwenden Sie für ApplicationStackNameden bereits ausgefüllten glue-codepipeline-appNamen. Dies ist der Name des CloudFormation Stacks, der von der Pipeline erstellt wird.

  6. Verwenden Sie für BucketNameden bereits ausgefüllten Bucket-Namen aws-glue-artifacts-us-east-1. Dies ist der Name des Amazon S3 S3-Buckets, der die .zip-Datei enthält und von der Pipeline zum Speichern von Codeartefakten verwendet wird.

  7. Verwenden Sie für CodeZipFileden vorab ausgefüllten Wert code.zip. Dies ist der Schlüsselname des Amazon S3 S3-Beispielcode-Objekts. Das Objekt sollte eine ZIP-Datei sein.

  8. Verwenden Sie für TestReportGroupNameden bereits ausgefüllten Namen glue-unittest-report. Dies ist der Name der CodeBuild Testberichtsgruppe, die zum Speichern der Unit-Testberichte erstellt wurde.

  9. Wählen Sie Weiter und klicken Sie dann auf der Seite Stack-Optionen konfigurieren erneut auf Weiter.

  10. Wählen Sie auf der Seite Überprüfen unter Funktionen die Option Ich bestätige, dass CloudFormation möglicherweise IAM-Ressourcen mit benutzerdefinierten Namen erstellt werden.

  11. Wählen Sie Absenden aus. Nachdem die Erstellung des Stacks abgeschlossen ist, können Sie die erstellten Ressourcen auf der Registerkarte Ressourcen sehen. Die Erstellung des Stacks dauert ungefähr 5-7 Minuten.

Der Stack erstellt eine CodePipeline Ansicht mit Amazon S3 als Quelle. In den obigen Schritten lautet die Pipeline aws-glue-unit-test-pipeline.

AWS DevOps, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie die Unit-Tests in der Pipeline aus.

  1. Um die bereitgestellte Pipeline zu testen, melden Sie sich bei der AWS Management Console an und öffnen Sie dann die CodePipeline Konsole.

  2. Wählen Sie die Pipeline aus, die durch den CloudFormation Stack erstellt wurde, und klicken Sie dann auf Änderung veröffentlichen. Die Pipeline wird gestartet (mit dem neuesten Code im Amazon S3 S3-Bucket).

  3. Nachdem die Test_and_Build-Phase abgeschlossen ist, wählen Sie die Registerkarte Details und überprüfen Sie dann die Protokolle.

  4. Wählen Sie die Registerkarte Berichte und dann unter Berichtsverlauf den Testbericht aus, um die Ergebnisse der Komponententests anzuzeigen.

  5. Führen Sie nach Abschluss der Bereitstellungsphase den bereitgestellten AWS Glue Job auf der AWS Glue Konsole aus und überwachen Sie ihn. Weitere Informationen finden Sie AWS Glue in der AWS Glue Dokumentation unter Überwachung.

AWS DevOps, DevOps Ingenieur

Führen Sie die Komponententests aus

AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie die Unit-Tests in der Pipeline aus.

  1. Um die bereitgestellte Pipeline zu testen, melden Sie sich bei der AWS Management Console an und öffnen Sie dann die CodePipeline Konsole.

  2. Wählen Sie die Pipeline aus, die durch den CloudFormation Stack erstellt wurde, und klicken Sie dann auf Änderung veröffentlichen. Die Pipeline wird gestartet (mit dem neuesten Code im Amazon S3 S3-Bucket).

  3. Nachdem die Test_and_Build-Phase abgeschlossen ist, wählen Sie die Registerkarte Details und überprüfen Sie dann die Protokolle.

  4. Wählen Sie die Registerkarte Berichte und dann unter Berichtsverlauf den Testbericht aus, um die Ergebnisse der Komponententests anzuzeigen.

  5. Führen Sie nach Abschluss der Bereitstellungsphase den bereitgestellten AWS Glue Job auf der AWS Glue Konsole aus und überwachen Sie ihn. Weitere Informationen finden Sie AWS Glue in der AWS Glue Dokumentation unter Überwachung.

AWS DevOps, DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Säubern Sie die Ressourcen in Ihrer Umgebung.

Um zusätzliche Infrastrukturkosten zu vermeiden, stellen Sie sicher, dass Sie den Stack löschen, nachdem Sie mit den Beispielen in diesem Muster experimentiert haben.

  1. Öffnen Sie die CloudFormation Konsole und wählen Sie dann den Stack aus, den Sie erstellt haben.

  2. Wählen Sie Löschen. Dadurch werden alle Ressourcen gelöscht, die Ihr Stack erstellt hat, einschließlich AWS Identity and Access Management (IAM-) Rollen, IAM-Richtlinien und Projekte. CodeBuild

AWS DevOps, DevOps Ingenieur

Säubere alle AWS Ressourcen

AufgabeBeschreibungErforderliche Fähigkeiten

Säubern Sie die Ressourcen in Ihrer Umgebung.

Um zusätzliche Infrastrukturkosten zu vermeiden, stellen Sie sicher, dass Sie den Stack löschen, nachdem Sie mit den Beispielen in diesem Muster experimentiert haben.

  1. Öffnen Sie die CloudFormation Konsole und wählen Sie dann den Stack aus, den Sie erstellt haben.

  2. Wählen Sie Löschen. Dadurch werden alle Ressourcen gelöscht, die Ihr Stack erstellt hat, einschließlich AWS Identity and Access Management (IAM-) Rollen, IAM-Richtlinien und Projekte. CodeBuild

AWS DevOps, DevOps Ingenieur

Fehlerbehebung

ProblemLösung

Die CodePipeline Servicerolle kann nicht auf den Amazon S3 S3-Bucket zugreifen.

  • Fügen s3:ListBucket Sie die mit Ihrer CodePipeline Servicerolle verknüpfte Richtlinie der Liste der Aktionen in Ihrer Richtlinie hinzu. Anweisungen zum Anzeigen der Servicerollenrichtlinie finden Sie unter Pipeline-ARN und Dienstrollen-ARN (Konsole) anzeigen. Bearbeiten Sie die Richtlinienerklärung für Ihre Servicerolle, wie unter Berechtigungen zur CodePipeline Servicerolle hinzufügen beschrieben.

  • Fügen Sie für die ressourcenbasierte Richtlinie, die an den Amazon S3 S3-Artefakt-Bucket für Ihre Pipeline angehängt ist, auch Artifact-Bucket-Richtlinie genannt, eine Anweisung hinzu, die es der CodePipeline Servicerolle ermöglicht, die Berechtigung zu verwenden. s3:ListBucket

CodePipeline gibt einen Fehler zurück, dass der Amazon S3 S3-Bucket nicht versioniert ist.

CodePipeline erfordert, dass der Amazon S3 S3-Quell-Bucket versioniert ist. Aktivieren Sie die Versionierung in Ihrem Amazon S3 S3-Bucket. Anweisungen finden Sie unter Versionierung für Buckets aktivieren.

Zugehörige Ressourcen

Zusätzliche Informationen

Darüber hinaus können Sie die AWS CloudFormation Vorlagen mithilfe von AWS Command Line Interface (AWS CLI) bereitstellen. Weitere Informationen finden Sie in der CloudFormation Dokumentation unter Schnelles Bereitstellen von Vorlagen mit Transformationen.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.