Convertissez et décompressez les données EBCDIC en ASCII sur AWS à l'aide de Python - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Convertissez et décompressez les données EBCDIC en ASCII sur AWS à l'aide de Python

Créée par Luis Gustavo Dantas (AWS)

Référentiel de code : Mainframe Data Utilities

Environnement : PoC ou pilote

Source : données EBCDIC du mainframe

Cible : données ASCII distribuées ou modernisées dans le cloud

Type R : Replateforme

Charge de travail : IBM

Technologies : ordinateur central ; bases de données ; stockage et sauvegarde ; modernisation

Services AWS : Amazon EBS ; Amazon EC2

Récapitulatif

Les mainframes hébergeant généralement des données commerciales critiques, la modernisation des données est l'une des tâches les plus importantes lors de la migration des données vers le cloud Amazon Web Services (AWS) ou un autre environnement ASCII (American Standard Code for Information Interchange). Sur les ordinateurs centraux, les données sont généralement codées au format EBCDIC (Extended Binary Coded Decimal Interchange Code). L'exportation d'une base de données, d'une méthode d'accès au stockage virtuel (VSAM) ou de fichiers plats produit généralement des fichiers EBCDIC binaires compressés, dont la migration est plus complexe. La solution de migration de base de données la plus couramment utilisée est la capture des données modifiées (CDC), qui, dans la plupart des cas, convertit automatiquement le codage des données. Cependant, les mécanismes CDC peuvent ne pas être disponibles pour ces bases de données, VSAM ou fichiers plats. Pour ces fichiers, une autre approche est nécessaire pour moderniser les données.

Ce modèle décrit comment moderniser les données EBCDIC en les convertissant au format ASCII. Après la conversion, vous pouvez charger les données dans des bases de données distribuées ou demander aux applications du cloud de les traiter directement. Le modèle utilise le script de conversion et les fichiers d'exemple du mainframe-data-utilities GitHub référentiel.

Conditions préalables et limitations

Prérequis

Limites

  • Les mises en page de fichiers définies dans les programmes COBOL ne sont pas prises en charge. Ils doivent être mis à disposition séparément.

Versions du produit

  • Python version 3.8 ou ultérieure

Architecture

Pile technologique source

  • Données EBCDIC sur un ordinateur central

  • Cahier COBOL

Pile technologique cible

  • Instance Amazon Elastic Compute Cloud (Amazon EC2) dans un cloud privé virtuel (VPC)

  • Amazon Elastic Block Store (Amazon EBS)

  • Python et ses packages requis, JavaScript Object Notation (JSON), sys et datetime

  • Fichier plat ASCII prêt à être lu par une application moderne ou chargé dans une table de base de données relationnelle

Architecture cible

Données EBCDIC converties en ASCII sur une instance EC2 à l'aide de scripts Python et d'un cahier COBOL

Le schéma d'architecture montre le processus de conversion d'un fichier EBCDIC en fichier ASCII sur une instance EC2 :

  1. À l'aide du script parse_copybook_to_json.py, vous convertissez le cahier COBOL en fichier JSON.

  2. À l'aide du fichier JSON et du script extract_ebcdic_to_ascii.py, vous convertissez les données EBCDIC en fichier ASCII.

Automatisation et mise à l'échelle

Une fois que les ressources nécessaires pour les premières conversions de fichiers manuelles sont en place, vous pouvez automatiser la conversion de fichiers. Ce modèle n'inclut pas d'instructions pour l'automatisation. Il existe plusieurs méthodes pour automatiser la conversion. Voici un aperçu de l'une des approches possibles :

  1. Encapsulez l'interface de ligne de commande AWS (AWS CLI) et les commandes de script Python dans un script shell.

  2. Créez une fonction AWS Lambda qui soumet de manière asynchrone le job de script shell à une instance EC2. Pour plus d'informations, consultez la section Planification de tâches SSH à l'aide d'AWS Lambda.

  3. Créez un déclencheur Amazon Simple Storage Service (Amazon S3) qui invoque la fonction Lambda chaque fois qu'un ancien fichier est chargé. Pour plus d'informations, consultez Utilisation d'un déclencheur Amazon S3 pour appeler une fonction Lambda.

Outils

Services AWS

Autres outils

  • GitHubest un service d'hébergement de code qui fournit des outils de collaboration et de contrôle de version.

  • Python est un langage de programmation de haut niveau.

Référentiel de code

Le code de ce modèle est disponible dans le mainframe-data-utilities GitHub référentiel.

Épopées

TâcheDescriptionCompétences requises

Lancer une instance EC2.

L'instance EC2 doit disposer d'un accès Internet sortant. Cela permet à l'instance d'accéder au code source Python disponible sur GitHub. Pour créer l'instance, procédez comme suit :

  1. Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2.

  2. Lancez une instance Linux EC2. Utilisez une adresse IP publique et autorisez l'accès entrant via le port 22. Assurez-vous que la taille de stockage de l'instance est au moins deux fois supérieure à celle du fichier de données EBCDIC. Pour obtenir des instructions, consultez la documentation Amazon EC2.

AWS général

Installez Git.

  1. À l'aide d'un client Secure Shell (SSH), connectez-vous à l'instance EC2 que vous venez de lancer. Pour plus d'informations, consultez Connect to your Linux instance.

  2. Dans la console Amazon EC2, exécutez la commande suivante. Cela installe Git sur l'instance EC2.

    sudo yum install git
  3. Exécutez la commande suivante et vérifiez que Git a été correctement installé.

    git --version
AWS, Linux en général

Installez Python.

  1. Dans la console Amazon EC2, exécutez la commande suivante. Cela installe Python sur l'instance EC2.

    sudo yum install python3
  2. Dans la console Amazon EC2, exécutez la commande suivante. Cela installe Pip3 sur l'instance EC2.

    sudo yum install python3-pip
  3. Dans la console Amazon EC2, exécutez la commande suivante. Ceci installe le SDK AWS pour Python (Boto3) sur l'instance EC2.

    sudo pip3 install boto3
  4. Dans la console Amazon EC2, exécutez la commande suivante, où se <us-east-1> trouve le code de votre région AWS. Pour obtenir la liste complète des codes de région, consultez la section Régions disponibles dans la documentation Amazon EC2.

    export AWS_DEFAULT_REGION=<us-east-1>
AWS, Linux en général

Clonez le GitHub dépôt.

  1. Dans la console Amazon EC2, exécutez la commande suivante. Cela clone le mainframe-data-utilitiesréférentiel depuis GitHub et ouvre l'emplacement de copie par défaut, le home dossier.

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. Dans le home dossier, vérifiez que le mainframe-data-utilities dossier est présent.

AWS général, GitHub
TâcheDescriptionCompétences requises

Analysez le cahier COBOL dans le fichier de mise en page JSON.

Dans le mainframe-data-utilities dossier, exécutez le script parse_copybook_to_json.py. Ce module d'automatisation lit la mise en page du fichier à partir d'un cahier COBOL et crée un fichier JSON. Le fichier JSON contient les informations nécessaires pour interpréter et extraire les données du fichier source. Cela crée les métadonnées JSON à partir du cahier COBOL.

La commande suivante convertit le cahier COBOL en fichier JSON.

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

Le script affiche les arguments reçus.

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

Pour plus d'informations sur les arguments, consultez le fichier README du GitHub référentiel.

AWS, Linux en général

Inspectez le fichier de mise en page JSON.

  1. Accédez au chemin de sortie défini dans le script parse_copybook_to_json.py.

  2. Vérifiez l'heure de création du fichier sample-data/cobpack2-list.json pour confirmer que vous avez sélectionné le fichier de mise en page JSON approprié.

  3. Examinez le fichier JSON et vérifiez que son contenu est similaire au suivant.

"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" }

Les attributs les plus importants du fichier de mise en page JSON sont les suivants :

  • input— Contient le chemin du fichier EBCDIC à convertir

  • output— Définit le chemin où le fichier ASCII sera généré

  • lrecl— Spécifie la taille en octets de la longueur logique de l'enregistrement

  • transf— Liste tous les champs et leur taille en octets

Pour plus d'informations sur le fichier de mise en page JSON, consultez le fichier README dans le GitHub référentiel.

AWS, JSON en général

Créez le fichier ASCII.

Exécutez le script extract_ebcdic_to_ascii.py, qui est inclus dans le GitHub référentiel cloné. Ce script lit le fichier EBCDIC et écrit un fichier ASCII converti et lisible.

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

Lorsque le script traite les données EBCDIC, il imprime un message pour chaque lot de 10 000 enregistrements. Consultez l'exemple suivant.

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

Pour plus d'informations sur la modification de la fréquence d'impression, consultez le fichier README du GitHub référentiel.

AWS général

Examinez le fichier ASCII.

  1. Vérifiez l'heure de création du fichier extract-ebcdic-to-ascii/cobpack.ascii.txt pour vérifier qu'il a été créé récemment.

  2. Dans la console Amazon EC2, entrez la commande suivante. Cela ouvre le premier enregistrement du fichier ASCII.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. Examinez le contenu du premier enregistrement. Les fichiers EBCDIC étant généralement binaires, ils ne contiennent pas de caractères spéciaux CRLF (Carriage Return and Line Feed). Le script extract_ebcdic_to_ascii.py ajoute un caractère de tube en tant que séparateur de colonne, qui est défini dans les paramètres du script.

Si vous avez utilisé l'exemple de fichier EBCDIC fourni, voici le premier enregistrement du fichier ASCII.

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|.
AWS, Linux en général

Évaluez le fichier EBCDIC.

Dans la console Amazon EC2, entrez la commande suivante. Cela ouvre le premier enregistrement du fichier EBCDIC.

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

Si vous avez utilisé l'exemple de fichier EBCDIC, voici le résultat.

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

Pour évaluer l'équivalence entre les fichiers source et cible, une connaissance approfondie de l'EBCDIC est requise. Par exemple, le premier caractère de l'exemple de fichier EBCDIC est un tiret (). - Dans la notation hexadécimale du fichier EBCDIC, ce caractère est représenté par60, et dans la notation hexadécimale du fichier ASCII, ce caractère est représenté par. 2D Pour une table de conversion EBCDIC en ASCII, voir EBCDIC en ASCII sur le site Web d'IBM.

Informations générales sur AWS, Linux, EBCDIC

Ressources connexes

Références

Didacticiels