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.
Konvertieren Sie Mainframe-Dateien vom EBCDIC-Format in das durch Zeichen getrennte ASCII-Format in Amazon S3 mit AWS Lambda
Luis Gustavo Dantas, Amazon Web Services
Übersicht
Dieses Muster zeigt Ihnen, wie Sie eine AWS Lambda Funktion starten, die EBCDIC-Dateien (Extended Binary Coded Decimal Interchange Code) für Mainframes automatisch in durch Zeichen getrennte ASCII-Dateien (American Standard Code for Information Interchange) konvertiert. Die Lambda-Funktion wird ausgeführt, nachdem die ASCII-Dateien in einen Amazon Simple Storage Service (Amazon S3) -Bucket hochgeladen wurden. Nach der Dateikonvertierung können Sie die ASCII-Dateien auf x86-basierten Workloads lesen oder die Dateien in moderne Datenbanken laden.
Der in diesem Muster vorgestellte Ansatz zur Dateikonvertierung kann Ihnen helfen, die Herausforderungen bei der Arbeit mit EBCDIC-Dateien in modernen Umgebungen zu bewältigen. In EBCDIC kodierte Dateien enthalten häufig Daten, die in einem binären oder komprimierten Dezimalformat dargestellt werden, und Felder haben eine feste Länge. Diese Eigenschaften stellen Hindernisse dar, da moderne x86-basierte Workloads oder verteilte Umgebungen im Allgemeinen mit ASCII-kodierten Daten arbeiten und EBCDIC-Dateien nicht verarbeiten können.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktiver AWS-Konto
Ein Amazon-S3-Bucket
Ein AWS Identity and Access Management (IAM-) Benutzer mit Administratorrechten
AWS CloudShell
Eine in EBCDIC kodierte Flatfile und die dazugehörige Datenstruktur in einem COBOL-Copybook (Common Business Oriented Language)
Anmerkung
Einschränkungen
COBOL-Copybooks enthalten normalerweise mehrere Layoutdefinitionen. Das mainframe-data-utilities
Projekt kann diese Art von Copybook analysieren, kann aber nicht ableiten, welches Layout bei der Datenkonvertierung berücksichtigt werden soll. Das liegt daran, dass Copybooks diese Logik nicht verwenden (die stattdessen bei COBOL-Programmen verbleibt). Folglich müssen Sie die Regeln für die Auswahl von Layouts manuell konfigurieren, nachdem Sie das Copybook analysiert haben. Dieses Muster unterliegt Lambda-Quoten.
Architektur
Quelltechnologie-Stack
IBM z/OS, IBM i und andere EBCDIC-Systeme
Sequentielle Dateien mit in EBCDIC codierten Daten (z. B. IBM Db2-Entladungen)
COBOL-Copybook
Zieltechnologie-Stack
Amazon S3
Amazon S3 S3-Ereignisbenachrichtigung
IAM
Lambda-Funktion
Python 3.8 oder höher
Mainframe-Datendienstprogramme
JSON-Metadaten
ASCII-Dateien, die durch Zeichen getrennt sind
Zielarchitektur
Das folgende Diagramm zeigt eine Architektur für die Konvertierung von Mainframe-EBCDIC-Dateien in ASCII-Dateien.

Das Diagramm zeigt den folgenden Workflow:
Der Benutzer führt das Copybook-Parser-Skript aus, das das COBOL-Copybook in eine JSON-Datei konvertiert.
Der Benutzer lädt die JSON-Metadaten in einen Amazon S3 S3-Bucket hoch. Dadurch werden die Metadaten von der Lambda-Funktion zur Datenkonvertierung lesbar.
Der Benutzer oder ein automatisierter Prozess lädt die EBCDIC-Datei in den Amazon S3 S3-Bucket hoch.
Das Amazon S3 S3-Benachrichtigungsereignis löst die Lambda-Funktion zur Datenkonvertierung aus.
AWS überprüft die Lese- und Schreibberechtigungen des Amazon S3 S3-Buckets für die Lambda-Funktion.
Lambda liest die Datei aus dem Amazon S3 S3-Bucket und konvertiert die Datei lokal von EBCDIC nach ASCII.
Lambda protokolliert den Prozessstatus in Amazon CloudWatch.
Lambda schreibt die ASCII-Datei zurück nach Amazon S3.
Anmerkung
Das Copybook-Parser-Skript wird einmal ausgeführt, um die Konvertierung der Metadaten in das JSON-Format durchzuführen, das anschließend in einem Amazon S3 S3-Bucket gespeichert wird. Nach der ersten Konvertierung verwenden alle nachfolgenden EBCDIC-Dateien, die auf dieselbe JSON-Datei im Amazon S3 S3-Bucket verweisen, die bestehende Metadatenkonfiguration.
Tools
AWS-Services
Amazon CloudWatch hilft Ihnen dabei, die Kennzahlen Ihrer AWS Ressourcen und der Anwendungen, auf denen Sie laufen, AWS in Echtzeit zu überwachen.
Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
AWS CloudShellist eine browserbasierte Shell, die Sie zur Verwaltung mithilfe AWS-Services von AWS Command Line Interface (AWS CLI) und einer Reihe vorinstallierter Entwicklungstools verwenden können.
AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.
Andere Tools
Code
Der Code für dieses Muster ist im GitHub mainframe-data-utilities
Bewährte Methoden
Beachten Sie die folgenden bewährten Methoden:
Legen Sie die erforderlichen Berechtigungen auf der Ebene des Amazon-Ressourcennamens (ARN) fest.
Gewähren Sie immer Berechtigungen mit den geringsten Rechten für IAM-Richtlinien. Weitere Informationen finden Sie in der IAM-Dokumentation unter Bewährte Sicherheitsmethoden in IAM.
Epen
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Erstellen Sie die Umgebungsvariablen. | Kopieren Sie die folgenden Umgebungsvariablen in einen Texteditor und ersetzen Sie dann die
AnmerkungSie erstellen Verweise auf Ihren Amazon S3 S3-Bucket und AWS-Region später. AWS-Konto Um Umgebungsvariablen zu definieren, öffnen Sie die CloudShell Konsole AnmerkungSie müssen diesen Schritt bei jedem Neustart der CloudShell Sitzung wiederholen. | Allgemeines AWS |
Erstellen Sie einen Arbeitsordner. | Um die spätere Bereinigung von Ressourcen zu vereinfachen, erstellen Sie einen Arbeitsordner in, CloudShell indem Sie den folgenden Befehl ausführen:
AnmerkungSie müssen jedes Mal, wenn Sie die Verbindung zu Ihrer CloudShell Sitzung verlieren, das Verzeichnis in das Arbeitsverzeichnis ( | Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Erstellen Sie eine Vertrauensrichtlinie für die Lambda-Funktion. | Der EBCDIC-Konverter läuft in einer Lambda-Funktion. Die Funktion muss eine IAM-Rolle haben. Bevor Sie die IAM-Rolle erstellen, müssen Sie ein Dokument mit einer Vertrauensrichtlinie definieren, das es Ressourcen ermöglicht, diese Richtlinie zu übernehmen. Erstellen Sie im CloudShell Arbeitsordner ein Richtliniendokument, indem Sie den folgenden Befehl ausführen:
| Allgemeines AWS |
Erstellen Sie die IAM-Rolle für die Lambda-Konvertierung. | Um eine IAM-Rolle zu erstellen, führen Sie den folgenden AWS CLI Befehl im CloudShell Arbeitsordner aus:
| Allgemeines AWS |
Erstellen Sie das IAM-Richtliniendokument für die Lambda-Funktion. | Die Lambda-Funktion muss Lese- und Schreibzugriff auf den Amazon S3 S3-Bucket und Schreibberechtigungen für Amazon Logs haben. CloudWatch Um eine IAM-Richtlinie zu erstellen, führen Sie den folgenden Befehl im Arbeitsordner aus: CloudShell
| Allgemeines AWS |
Hängen Sie das IAM-Richtliniendokument an die IAM-Rolle an. | Um die IAM-Richtlinie an die IAM-Rolle anzuhängen, geben Sie den folgenden Befehl aus Ihrem Arbeitsordner ein: CloudShell
| Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Laden Sie den Quellcode für die EBCDIC-Konvertierung herunter. | Führen Sie im CloudShell Arbeitsordner den folgenden Befehl aus, um den mainframe-data-utilities Quellcode herunterzuladen: GitHub
| Allgemeines AWS |
Erstellen Sie das ZIP-Paket. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um das ZIP-Paket zu erstellen, das die Lambda-Funktion für die EBCDIC-Konvertierung erstellt:
| Allgemeines AWS |
So erstellen Sie die Lambda-Funktion: | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die Lambda-Funktion für die EBCDIC-Konvertierung zu erstellen:
AnmerkungDas Layout der Umgebungsvariablen teilt der Lambda-Funktion mit, wo sich die JSON-Metadaten befinden. | Allgemeines AWS |
Erstellen Sie die ressourcenbasierte Richtlinie für die Lambda-Funktion. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, damit Ihre Amazon S3 S3-Ereignisbenachrichtigung die Lambda-Funktion für die EBCDIC-Konvertierung auslöst:
| Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Erstellen Sie das Konfigurationsdokument für die Amazon S3 S3-Ereignisbenachrichtigung. | Die Amazon S3 S3-Ereignisbenachrichtigung initiiert die Lambda-Funktion für die EBCDIC-Konvertierung, wenn Dateien im Eingabeordner platziert werden. Führen Sie im CloudShell Arbeitsordner den folgenden Befehl aus, um das JSON-Dokument für die Amazon S3 S3-Ereignisbenachrichtigung zu erstellen:
| Allgemeines AWS |
Erstellen Sie die Amazon S3 S3-Ereignisbenachrichtigung. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die Amazon S3 S3-Ereignisbenachrichtigung zu erstellen:
| Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Analysieren Sie das COBOL-Copybook. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um ein COBOL-Beispiel-Copybook in eine JSON-Datei zu parsen (die definiert, wie die Datendatei richtig gelesen und aufgeteilt wird):
| Allgemeines AWS |
Fügen Sie die Transformationsregel hinzu. | Bei der Beispieldatendatei und dem entsprechenden COBOL-Copybook handelt es sich um eine Datei mit mehreren Layouts. Das bedeutet, dass bei der Konvertierung Daten nach bestimmten Regeln aufgeteilt werden müssen. In diesem Fall definieren die Bytes an den Positionen 3 und 4 in jeder Zeile das Layout. Bearbeiten Sie die
| Allgemein AWS, IBM Mainframe, Cobol |
Laden Sie die JSON-Metadaten in den Amazon S3 S3-Bucket hoch. | Geben Sie im CloudShell Arbeitsordner den folgenden AWS CLI Befehl ein, um die JSON-Metadaten in Ihren Amazon S3 S3-Bucket hochzuladen:
| Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
Senden Sie die EBCDIC-Datei an den Amazon S3 S3-Bucket. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die EBCDIC-Datei an den Amazon S3 S3-Bucket zu senden:
AnmerkungWir empfehlen, unterschiedliche Ordner für Eingabe- (EBCDIC) und Ausgabedateien (ASCII) festzulegen, um zu vermeiden, dass die Lambda-Konvertierungsfunktion erneut aufgerufen wird, wenn die ASCII-Datei in den Amazon S3 S3-Bucket hochgeladen wird. | Allgemeines AWS |
Überprüfen Sie die Ausgabe. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um zu überprüfen, ob die ASCII-Datei in Ihrem Amazon S3 S3-Bucket generiert wurde:
AnmerkungDie Datenkonvertierung kann mehrere Sekunden dauern. Wir empfehlen Ihnen, einige Male nach der ASCII-Datei zu suchen. Nachdem die ASCII-Datei verfügbar ist, geben Sie den folgenden Befehl ein, um den Inhalt der konvertierten Datei im Amazon S3 S3-Bucket anzuzeigen. Bei Bedarf können Sie es herunterladen oder direkt aus dem Amazon S3 S3-Bucket verwenden:
Überprüfen Sie den Inhalt der ASCII-Datei:
| Allgemeines AWS |
| Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
|---|---|---|
(Optional) Bereiten Sie die Variablen und den Ordner vor. | Wenn Sie die Verbindung mit verlieren CloudShell, stellen Sie die Verbindung erneut her und geben Sie dann den folgenden Befehl ein, um das Verzeichnis in den Arbeitsordner zu ändern:
Stellen Sie sicher, dass die Umgebungsvariablen definiert sind:
| Allgemeines AWS |
Entfernen Sie die Benachrichtigungskonfiguration für den Bucket. | Führen Sie im CloudShell Arbeitsordner den folgenden Befehl aus, um die Konfiguration der Amazon S3 S3-Ereignisbenachrichtigung zu entfernen:
| Allgemeines AWS |
Löschen Sie die Lambda-Funktion. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die Lambda-Funktion für den EBCDIC-Konverter zu löschen:
| Allgemeines AWS |
Löschen Sie die IAM-Rolle und -Richtlinie. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die EBCDIC-Konverter-Rolle und -Richtlinie zu entfernen:
| Allgemeines AWS |
Löschen Sie die im Amazon S3 S3-Bucket generierten Dateien. | Geben Sie im CloudShell Arbeitsordner den folgenden Befehl ein, um die im Amazon S3 S3-Bucket generierten Dateien zu löschen:
| Allgemeines AWS |
Löschen Sie den Arbeitsordner. | Geben Sie aus dem CloudShell Arbeitsordner den folgenden Befehl ein, um ihn
| Allgemeines AWS |
Zugehörige Ressourcen
Der EBCDIC-Zeichensatz
(IBM-Dokumentation) EBCDIC zu ASCII
(IBM-Dokumentation) COBOL
(IBM-Dokumentation) Verwenden eines Amazon S3 S3-Triggers zum Aufrufen einer Lambda-Funktion (Dokumentation)AWS Lambda