EBCDICDaten mithilfe AWS von Python in ASCII on konvertieren und entpacken - 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.

EBCDICDaten mithilfe AWS von Python in ASCII on konvertieren und entpacken

Erstellt von Luis Gustavo Dantas () AWS

Quellcode-Repository: Mainframe Data Utilities

Umgebung: PoC oder Pilotprojekt

Quelle: Mainframe-Daten EBCDIC

Ziel: Verteilte oder in der Cloud modernisierte Daten ASCII

R-Typ: Replatform

Arbeitslast: IBM

Technologien: Mainframe; Datenbanken; Speicher und Backup; Modernisierung

AWSDienstleistungen: AmazonEBS; Amazon EC2

Übersicht

Da Mainframes in der Regel wichtige Geschäftsdaten hosten, ist die Modernisierung von Daten eine der wichtigsten Aufgaben bei der Migration von Daten in die Amazon Web Services (AWS) Cloud oder eine andere American Standard Code for Information Interchange (ASCII) -Umgebung. Auf Mainframes werden Daten in der Regel im erweiterten binärcodierten dezimalen Interchange-Code-Format () codiert. EBCDIC Beim Exportieren von Datenbank-, Virtual Storage Access Method (VSAM) oder Flatfiles werden im Allgemeinen gepackte EBCDIC Binärdateien erzeugt, deren Migration komplexer ist. Die am häufigsten verwendete Lösung für die Datenbankmigration ist Change Data Capture (CDC), die in den meisten Fällen die Datenkodierung automatisch konvertiert. Für diese Datenbank- oder Flatfiles sind jedoch möglicherweise keine CDC Mechanismen verfügbar. VSAM Für diese Dateien ist ein alternativer Ansatz zur Modernisierung der Daten erforderlich.

Dieses Muster beschreibt, wie EBCDIC Daten modernisiert werden, indem sie in ein Format konvertiert werden. ASCII Nach der Konvertierung können Sie die Daten in verteilte Datenbanken laden oder Anwendungen in der Cloud die Daten direkt verarbeiten lassen. Das Muster verwendet das Konvertierungsskript und die Beispieldateien im mainframe-data-utilities GitHub Repository.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Innerhalb von COBOL Programmen definierte Dateilayouts werden nicht unterstützt. Sie müssen separat zur Verfügung gestellt werden.

Produktversionen

  • Python-Version 3.8 oder höher

Architektur

Quelltechnologie-Stack

  • EBCDICDaten auf einem Mainframe

  • COBOLKopierbuch

Zieltechnologie-Stack

  • Amazon Elastic Compute Cloud (AmazonEC2) -Instanz in einer virtuellen privaten Cloud (VPC)

  • Amazon Elastic Block Store (AmazonEBS)

  • Python und die erforderlichen Pakete, JavaScript Object Notation (JSON), sys und datetime

  • ASCIIflache Datei, die bereit ist, von einer modernen Anwendung gelesen oder in eine relationale Datenbanktabelle geladen zu werden

Zielarchitektur

EBCDICDaten, die ASCII mithilfe von Python-Skripten und einem COBOL Copybook in eine EC2 Instanz konvertiert wurden

Das Architekturdiagramm zeigt den Prozess der Konvertierung einer EBCDIC Datei in eine ASCII Datei auf einer EC2 Instanz:

  1. Mithilfe des Skripts parse_copybook_to_json.py konvertieren Sie das COBOL Copybook in eine JSON Datei.

  2. Mithilfe der JSON Datei und des Skripts extract_ebcdic_to_ascii.py konvertieren Sie die EBCDIC Daten in eine ASCII Datei.

Automatisierung und Skalierung

Sobald die für die ersten manuellen Dateikonvertierungen benötigten Ressourcen vorhanden sind, können Sie die Dateikonvertierung automatisieren. Dieses Muster enthält keine Anweisungen zur Automatisierung. Es gibt mehrere Möglichkeiten, die Konvertierung zu automatisieren. Im Folgenden finden Sie einen Überblick über einen möglichen Ansatz:

  1. Kapseln Sie die AWS Befehlszeilenschnittstelle (AWSCLI) und die Python-Skriptbefehle in ein Shell-Skript.

  2. Erstellen Sie eine AWS Lambda-Funktion, die den Shell-Skriptjob asynchron an eine Instanz weiterleitet. EC2 Weitere Informationen finden Sie unter SSHJobs mit AWS Lambda planen.

  3. Erstellen Sie einen Amazon Simple Storage Service (Amazon S3) -Trigger, der die Lambda-Funktion jedes Mal aufruft, wenn eine Legacy-Datei hochgeladen wird. Weitere Informationen finden Sie unter Verwenden eines Amazon S3 S3-Triggers zum Aufrufen einer Lambda-Funktion.

Tools

AWSDienste

Andere Tools

  • GitHubist ein Code-Hosting-Dienst, der Tools für die Zusammenarbeit und Versionskontrolle bereitstellt.

  • Python ist eine Programmiersprache auf hohem Niveau.

Code-Repository

Der Code für dieses Muster ist im mainframe-data-utilities GitHub Repository verfügbar.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Starten einer EC2-Instance

Die EC2 Instanz muss über ausgehenden Internetzugang verfügen. Dadurch kann die Instanz auf den Python-Quellcode zugreifen, der auf verfügbar ist GitHub. Um die Instanz zu erstellen:

  1. Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2.

  2. Starten Sie eine EC2 Linux-Instance. Verwenden Sie eine öffentliche IP-Adresse und erlauben Sie eingehenden Zugriff über Port 22. Stellen Sie sicher, dass die Speichergröße der Instanz mindestens doppelt so groß ist wie die EBCDIC Datendatei. Anweisungen finden Sie in der EC2Amazon-Dokumentation.

Allgemein AWS

Installieren Sie Git.

  1. Stellen Sie mithilfe eines Secure Shell (SSH) -Clients eine Verbindung zu der EC2 Instance her, die Sie gerade gestartet haben. Weitere Informationen finden Sie unter Connect zu Ihrer Linux-Instance herstellen.

  2. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus. Dadurch wird Git auf der EC2 Instanz installiert.

    sudo yum install git
  3. Führen Sie den folgenden Befehl aus und vergewissern Sie sich, dass Git erfolgreich installiert wurde.

    git --version
AllgemeinAWS, Linux

Installieren Sie Python.

  1. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus. Dadurch wird Python auf der EC2 Instanz installiert.

    sudo yum install python3
  2. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus. Dadurch wird Pip3 auf der EC2 Instance installiert.

    sudo yum install python3-pip
  3. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus. Dies wird AWS SDK für Python (Boto3) auf der EC2 Instanz installiert.

    sudo pip3 install boto3
  4. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus, in dem <us-east-1> sich der Code für Ihre AWS Region befindet. Eine vollständige Liste der Regionscodes finden Sie in der EC2 Amazon-Dokumentation unter Verfügbare Regionen.

    export AWS_DEFAULT_REGION=<us-east-1>
AllgemeinAWS, Linux

Klonen Sie das GitHub Repository.

  1. Führen Sie in der EC2 Amazon-Konsole den folgenden Befehl aus. Dadurch wird das mainframe-data-utilitiesRepository aus dem home Ordner geklont GitHub und der standardmäßige Speicherort für Kopien geöffnet.

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. Vergewissern Sie sichhome, dass der mainframe-data-utilities Ordner in dem Ordner vorhanden ist.

AllgemeinAWS, GitHub
AufgabeBeschreibungErforderliche Fähigkeiten

Analysieren Sie das COBOL Copybook in die JSON Layoutdatei.

Führen Sie innerhalb des mainframe-data-utilities Ordners das Skript parse_copybook_to_json.py aus. Dieses Automatisierungsmodul liest das Dateilayout aus einem COBOL Copybook und erstellt eine JSON Datei. Die JSON Datei enthält die Informationen, die zum Interpretieren und Extrahieren der Daten aus der Quelldatei erforderlich sind. Dadurch werden die JSON Metadaten aus dem COBOL Copybook erstellt.

Der folgende Befehl konvertiert das COBOL Copybook in eine JSON Datei.

python3 parse_copybook_to_json.py \ -copybook LegacyReference/COBPACK2.cpy \ -output sample-data/cobpack2-list.json \ -dict sample-data/cobpack2-dict.json \ -ebcdic sample-data/COBPACK.OUTFILE.txt \ -ascii sample-data/COBPACK.ASCII.txt \ -print 10000

Das Skript druckt die empfangenen Argumente aus.

----------------------------------------------------------------------- Copybook file...............| LegacyReference/COBPACK2.cpy Parsed copybook (JSON List).| sample-data/cobpack2-list.json JSON Dict (documentation)...| sample-data/cobpack2-dict.json ASCII file..................| sample-data/COBPACK.ASCII.txt EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt Print each..................| 10000 -----------------------------------------------------------------------

Weitere Informationen zu den Argumenten finden Sie in der READMEDatei im GitHub Repository.

AllgemeinAWS, Linux

Untersuchen Sie die JSON Layoutdatei.

  1. Navigieren Sie zu dem im Skript parse_copybook_to_json.py definierten Ausgabepfad.

  2. Überprüfen Sie die Erstellungszeit der Datei sample-data/cobpack2-list.json, um sicherzustellen, dass Sie die entsprechende Layoutdatei ausgewählt haben. JSON

  3. Untersuchen Sie die JSON Datei und stellen Sie sicher, dass der Inhalt dem Folgenden ähnelt.

"input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt", "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt", "max": 0, "skip": 0, "print": 10000, "lrecl": 150, "rem-low-values": true, "separator": "|", "transf": [ { "type": "ch", "bytes": 19, "name": "OUTFILE-TEXT" }

Die wichtigsten Attribute der JSON Layoutdatei sind:

  • input— Enthält den Pfad der zu konvertierenden EBCDIC Datei

  • output— Definiert den Pfad, in dem die ASCII Datei generiert wird

  • lrecl— Gibt die Größe der logischen Datensatzlänge in Byte an

  • transf— Listet alle Felder und ihre Größe in Byte auf

Weitere Informationen zur JSON Layout-Datei finden Sie in der READMEDatei im GitHub Repository.

AllgemeinAWS, JSON

Erstellen Sie die Datei ASCII.

Führen Sie das Skript extract_ebcdic_to_ascii.py aus, das im geklonten GitHub Repository enthalten ist. Dieses Skript liest die EBCDIC Datei und schreibt eine konvertierte und lesbare ASCII Datei.

python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json

Während das Skript die EBCDIC Daten verarbeitet, druckt es für jeden Stapel von 10.000 Datensätzen eine Nachricht. Sehen Sie sich das folgende -Beispiel an.

------------------------------------------------------------------ 2023-05-15 21:21:46.322253 | Local Json file | -local-json | sample-data/cobpack2-list.json 2023-05-15 21:21:47.034556 | Records processed | 10000 2023-05-15 21:21:47.736434 | Records processed | 20000 2023-05-15 21:21:48.441696 | Records processed | 30000 2023-05-15 21:21:49.173781 | Records processed | 40000 2023-05-15 21:21:49.874779 | Records processed | 50000 2023-05-15 21:21:50.705873 | Records processed | 60000 2023-05-15 21:21:51.609335 | Records processed | 70000 2023-05-15 21:21:52.292989 | Records processed | 80000 2023-05-15 21:21:52.938366 | Records processed | 89280 2023-05-15 21:21:52.938448 Seconds 6.616232

Informationen zum Ändern der Druckfrequenz finden Sie in der READMEDatei im GitHub Repository.

Allgemein AWS

Untersuchen Sie die ASCII Datei.

  1. Überprüfen Sie die Erstellungszeit von extract-ebcdic-to-ascii/COBPACK. ASCII.txt-Datei, um zu überprüfen, ob sie kürzlich erstellt wurde.

  2. Geben Sie in der EC2 Amazon-Konsole den folgenden Befehl ein. Dadurch wird der erste Datensatz der ASCII Datei geöffnet.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. Untersuchen Sie den Inhalt des ersten Datensatzes. Da EBCDIC Dateien in der Regel binär sind, enthalten sie keine Sonderzeichen für Zeilenumbruch und Zeilenvorschub (CRLF). Das Skript extract_ebcdic_to_ascii.py fügt ein senkrechtes Strichzeichen als Spaltentrennzeichen hinzu, das in den Skriptparametern definiert ist.

Wenn Sie die bereitgestellte EBCDIC Beispieldatei verwendet haben, ist der folgende Datensatz der erste Datensatz in der ASCII Datei.

00000000: 2d30 3030 3030 3030 3030 3130 3030 3030 -000000000100000 00000010: 3030 307c 3030 3030 3030 3030 3031 3030 000|000000000100 00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030 000000|-00000000 00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31 0100000000|0|0|1 00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030 00000000|-100000 00000050: 3030 307c 3130 3030 3030 3030 307c 2d31 000|100000000|-1 00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30 00000000|00000|0 00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d 0000|100000000|- 00000080: 3130 3030 3030 3030 307c 3030 3030 3030 100000000|000000 00000090: 3030 3030 3130 3030 3030 3030 307c 2d30 0000100000000|-0 000000a0: 3030 3030 3030 3030 3031 3030 3030 3030 0000000001000000 000000b0: 3030 7c41 7c41 7c0a 00|A|A|.
AllgemeinAWS, Linux

Evaluieren Sie die EBCDIC Datei.

Geben Sie in der EC2 Amazon-Konsole den folgenden Befehl ein. Dadurch wird der erste Datensatz der EBCDIC Datei geöffnet.

head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd

Wenn Sie die EBCDIC Beispieldatei verwendet haben, ist das Ergebnis wie folgt.

00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `............... 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................ 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................ 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................ 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................ 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................ 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................ 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................ 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000090: 0000 0000 0000 ......

Um die Gleichwertigkeit zwischen den Quell- und Zieldateien zu bewerten, sind umfassende Kenntnisse von EBCDIC erforderlich. Das erste Zeichen der EBCDIC Beispieldatei ist beispielsweise ein Bindestrich ()-. In der hexadezimalen Schreibweise der EBCDIC Datei wird dieses Zeichen durch dargestellt60, und in der hexadezimalen Schreibweise der ASCII Datei wird dieses Zeichen durch dargestellt. 2D Eine EBCDIC-to-ASCII Umrechnungstabelle finden Sie unter EBCDICto auf ASCII der Website. IBM

AllgemeinAWS, Linux, EBCDIC

Zugehörige Ressourcen

Referenzen

Tutorials