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 in AWS Glue mithilfe des Pytest-Frameworks aus
Quellcode-Repository: aws-glue-jobs-unit-testing | Umgebung: Produktion | Technologien: DevOps; Große Datenmengen; Softwareentwicklung und Testen |
AWS-Dienste: AWS CloudFormation CodeBuild; AWS CodeCommit; AWS CodePipeline; AWS Glue |
Ü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 die Replikation 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 hochwertige Software beibehalten können. Sie können die Schritte und Codebeispiele in diesem Muster verwenden, um Komponententests für Python-ETL-Jobs in AWS Glue auszuführen, indem Sie das Pytest-Framework in AWS CodePipeline verwenden. Sie können dieses Muster auch verwenden, um mehrere AWS Glue Glue-Jobs zu testen und bereitzustellen.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto
Eine Amazon Elastic Container Registry (Amazon ECR) -Image-URI für Ihre AWS Glue Glue-Bibliothek, heruntergeladen von der Amazon ECR Public Gallery
Bash-Terminal (auf einem beliebigen Betriebssystem) mit einem Profil für das AWS-Zielkonto und die AWS-Region
Python 3.10
oder höher Moto-Python-Bibliothek
zum Testen von AWS-Services
Architektur
Technologie-Stack
Amazon Elastic Container Registry (Amazon ECR)
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
AWS Glue
Pytest
Python
Python-ETL-Bibliothek für AWS Glue
Zielarchitektur
Das folgende Diagramm beschreibt, wie Unit-Tests für AWS Glue ETL-Prozesse, die auf Python basieren, in eine typische DevOps AWS-Pipeline für Unternehmen integriert werden können.
![Komponententests für AWS Glue ETL-Prozesse](images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/bb4d67e8-cefb-4018-aef3-44d655adf705.png)
Das Diagramm zeigt den folgenden Workflow:
CodePipeline Verwendet in der Quellphase ein CodeCommit Repository für Quellcode, einschließlich eines Python-ETL-Beispieljobs (
sample.py
), einer Unit-Test-Datei (test_sample.py
) und einer CloudFormation AWS-Vorlage. CodePipeline Überträgt dann den neuesten Code aus dem Hauptzweig zur weiteren Verarbeitung in das CodeBuild Projekt.In der Erstellungs- und Veröffentlichungsphase wird der neueste Code aus der vorherigen Quellphase mithilfe eines öffentlichen Amazon ECR-Images von AWS Glue 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 in AWS Glue erforderlich sind. Das öffentliche Container-Repository hat drei Image-Tags, einen für jede von AWS Glue unterstützte Version. 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 Simple Storage Service (Amazon S3) -Bucket veröffentlicht, wenn alle Tests erfolgreich sind.
Der Benutzer stellt die AWS Glue Glue-Aufgabe mithilfe der CloudFormation Vorlage im
deploy
Ordner bereit.
Tools
AWS-Tools
Amazon Elastic Container Registry (Amazon ECR) ist ein verwalteter Container-Image-Registry-Service, der sicher, skalierbar und zuverlässig ist.
AWS CodeBuild ist ein vollständig verwalteter Build-Service, mit dem Sie Quellcode kompilieren, Komponententests ausführen und bereitstellungsbereite Artefakte erstellen können.
AWS CodeCommit ist ein Versionskontrollservice, mit dem Sie Git-Repositorys privat speichern und verwalten können, ohne Ihr eigenes Quellcodeverwaltungssystem verwalten zu müssen.
AWS CodePipeline hilft 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.
AWS Glue ist 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.
Andere Tools
Python
ist eine interpretierte Mehrzweck-Programmiersprache auf hohem Niveau. Moto
ist eine Python-Bibliothek zum Testen von 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 AWS Glue verwendet werden.
Code
Der Code für dieses Muster ist im Repository GitHub aws-glue-jobs-unit-testing
Ein Beispiel für einen Python-basierten AWS Glue 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 der 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 AWS CloudTrail und Amazon CloudWatch Events verfügbar. Sie können CloudTrail damit AWS-API-Aufrufe und zugehörige Ereignisse protokollieren, die von oder im Namen Ihres AWS-Kontos getätigt wurden. Weitere Informationen finden Sie CloudTrail in der CodePipeline Dokumentation unter Protokollieren von CodePipeline API-Aufrufen mit AWS.
Sie können CloudWatch Events verwenden, um Ihre AWS-Cloud-Ressourcen und -Anwendungen zu überwachen, die auf AWS ausgeführt werden. Sie können auch Benachrichtigungen in CloudWatch Events 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 automatisch ein CodeCommit Repository mit dem ursprünglichen Code, der aus der ZIP-Datei eingecheckt und in den S3-Bucket hochgeladen wurde. Darüber hinaus erstellt der Stack eine CodePipeline Ansicht, die das CodeCommit Repository als Quelle verwendet. In den obigen Schritten heißt das CodeCommit Repository aws-glue-unit-test und die Pipeline aws-glue-unit-test-pipeline. | AWS DevOps, DevOps Ingenieur |
Bereinigen 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 |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Führen Sie die in der Pipeline befindlichen Komponententests aus. |
| AWS DevOps, DevOps Ingenieur |
Fehlerbehebung
Problem | Lösung |
---|---|
Eine Pipeline mit Amazon S3, Amazon ECR oder CodeCommit Quelle wird nicht mehr automatisch gestartet | Wenn Sie Konfigurationseinstellungen für eine Aktion ändern, die Ereignisregeln in Amazon EventBridge oder CloudWatch Ereignisse zur Änderungserkennung verwendet, erkennt die AWS-Managementkonsole möglicherweise keine Änderung, wenn Quellkennungen ähnlich sind und identische Anfangszeichen haben. Da die neue Ereignisregel nicht von der Konsole erstellt wird, wird die Pipeline nicht mehr automatisch gestartet. Das Ändern eines CodeCommit Zweignamens von Dies gilt für die folgenden Quellaktionen, bei denen Ereignisse in CloudWatch Ereignissen zur Erkennung von Änderungen verwendet werden:
Gehen Sie wie folgt vor, um das Problem zu beheben:
|
Zugehörige Ressourcen
Zusätzliche Informationen
Darüber hinaus können Sie die CloudFormation AWS-Vorlagen mithilfe der AWS-CLI bereitstellen. Weitere Informationen finden Sie in der CloudFormation Dokumentation unter Schnelles Bereitstellen von Vorlagen mit Transformationen.