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 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.

Das Diagramm zeigt den folgenden Workflow:
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.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 diepipeline.yml
Datei im GitHub Repository für dieTestBuild
Ressource.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.
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
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
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Bereiten Sie das Codearchiv für die Bereitstellung vor. |
| DevOps Ingenieur |
Erstellen Sie den CloudFormation Stapel. |
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 |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Führen Sie die Unit-Tests in der Pipeline aus. |
| AWS DevOps, DevOps Ingenieur |
Aufgabe | Beschreibung | Erforderliche 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.
| AWS DevOps, DevOps Ingenieur |
Fehlerbehebung
Problem | Lösung |
---|---|
Die CodePipeline Servicerolle kann nicht auf den Amazon S3 S3-Bucket zugreifen. |
|
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.