

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
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python"></a>

*Luis Gustavo Dantas, Amazon Web Services*

## Résumé
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-summary"></a>

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](https://github.com/aws-samples/mainframe-data-utilities) GitHub référentiel.

## Conditions préalables et limitations
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif.
+ Un fichier d'entrée EBCDIC et le cahier COBOL (Common Business Oriented Language) correspondant. Un exemple de fichier EBCDIC et de cahier COBOL sont inclus dans le référentiel. [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub Pour plus d'informations sur les copybooks COBOL, consultez le [guide de programmation Enterprise COBOL for z/OS 6.4](https://publibfp.dhe.ibm.com/epubs/pdf/igy6pg40.pdf) sur le site Web d'IBM.

**Limites**
+ Les mises en page de fichiers définies dans les programmes COBOL ne sont pas prises en charge. Ils doivent être disponibles séparément.

**Versions du produit**
+ Python version 3.8 ou ultérieure

## Architecture
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-architecture"></a>

**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 à l'aide EC2 de scripts Python et d'un cahier COBOL\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/f5907bfe-7dff-4cd0-8523-57015ad48c4b/images/4f97b1dd-3f20-4966-a291-22180680ea99.png)


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\$1copybook\$1to\$1json.py**, vous convertissez le cahier COBOL en fichier JSON.

1. À l'aide du fichier JSON et du script **extract\$1ebcdic\$1to\$1ascii.py**, vous convertissez les données EBCDIC en fichier ASCII.

**Automatisation et évolutivité**

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.

1. 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](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/).

1. 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](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html).

## Outils
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-tools"></a>

**Services AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) fournit une capacité de calcul évolutive dans le cloud AWS. Vous pouvez lancer autant de serveurs virtuels que vous le souhaitez et les faire rapidement évoluer vers le haut ou vers le bas.
+ [Amazon Elastic Block Store (Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)) fournit des volumes de stockage au niveau des blocs à utiliser avec les instances Amazon Elastic Compute Cloud (Amazon). EC2
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.

**Autres outils**
+ [GitHub](https://github.com/)est un service d'hébergement de code qui fournit des outils de collaboration et de contrôle de version.
+ [Python](https://www.python.org/) 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](https://github.com/aws-samples/mainframe-data-utilities) GitHub référentiel.

## Épopées
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-epics"></a>

### Préparer l' EC2 instance
<a name="prepare-the-ec2-instance"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez une EC2 instance. | L' EC2 instance 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 :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS général | 
| Installez Git. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS, Linux en général | 
| Installez Python. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS, Linux en général | 
| Clonez le GitHub dépôt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS général, GitHub | 

### Créez le fichier ASCII à partir des données EBCDIC
<a name="create-the-ascii-file-from-the-ebcdic-data"></a>


| Sous-tâche | Description | Compé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\$1copybook\$1to\$1json.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.<pre>python3 parse_copybook_to_json.py \<br />-copybook LegacyReference/COBPACK2.cpy \<br />-output sample-data/cobpack2-list.json \<br />-dict sample-data/cobpack2-dict.json \<br />-ebcdic sample-data/COBPACK.OUTFILE.txt \<br />-ascii sample-data/COBPACK.ASCII.txt \<br />-print 10000</pre>Le script affiche les arguments reçus.<pre>-----------------------------------------------------------------------<br />Copybook file...............| LegacyReference/COBPACK2.cpy<br />Parsed copybook (JSON List).| sample-data/cobpack2-list.json<br />JSON Dict (documentation)...| sample-data/cobpack2-dict.json<br />ASCII file..................| sample-data/COBPACK.ASCII.txt<br />EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt<br />Print each..................| 10000<br />-----------------------------------------------------------------------</pre>Pour plus d'informations sur les arguments, consultez le [fichier README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) du GitHub référentiel. | AWS, Linux en général | 
| Inspectez le fichier de mise en page JSON. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)<pre> "input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt",<br /> "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt",<br /> "max": 0,<br /> "skip": 0,<br /> "print": 10000,<br /> "lrecl": 150,<br /> "rem-low-values": true,<br /> "separator": "|",<br /> "transf": [<br /> {<br /> "type": "ch",<br /> "bytes": 19,<br /> "name": "OUTFILE-TEXT"<br /> } </pre>Les attributs les plus importants du fichier de mise en page JSON sont les suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Pour plus d'informations sur le fichier de mise en page JSON, consultez le [fichier README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) dans le GitHub référentiel. | AWS, JSON en général | 
| Créez le fichier ASCII.  | Exécutez le script **extract\$1ebcdic\$1to\$1ascii.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.<pre>python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json</pre>Lorsque le script traite les données EBCDIC, il imprime un message pour chaque lot de 10 000 enregistrements. Consultez l'exemple suivant.<pre>------------------------------------------------------------------<br />2023-05-15 21:21:46.322253 | Local Json file   | -local-json | sample-data/cobpack2-list.json<br />2023-05-15 21:21:47.034556 | Records processed | 10000<br />2023-05-15 21:21:47.736434 | Records processed | 20000<br />2023-05-15 21:21:48.441696 | Records processed | 30000<br />2023-05-15 21:21:49.173781 | Records processed | 40000<br />2023-05-15 21:21:49.874779 | Records processed | 50000<br />2023-05-15 21:21:50.705873 | Records processed | 60000<br />2023-05-15 21:21:51.609335 | Records processed | 70000<br />2023-05-15 21:21:52.292989 | Records processed | 80000<br />2023-05-15 21:21:52.938366 | Records processed | 89280<br />2023-05-15 21:21:52.938448 Seconds 6.616232</pre>Pour plus d'informations sur la modification de la fréquence d'impression, consultez le [fichier README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) du GitHub référentiel. | AWS général | 
| Examinez le fichier ASCII. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Si vous avez utilisé l'exemple de fichier EBCDIC fourni, voici le premier enregistrement du fichier ASCII.<pre>00000000: 2d30 3030 3030 3030 3030 3130 3030 3030  -000000000100000<br />00000010: 3030 307c 3030 3030 3030 3030 3031 3030  000|000000000100<br />00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030  000000|-00000000<br />00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31  0100000000|0|0|1<br />00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030  00000000|-100000<br />00000050: 3030 307c 3130 3030 3030 3030 307c 2d31  000|100000000|-1<br />00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30  00000000|00000|0<br />00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d  0000|100000000|-<br />00000080: 3130 3030 3030 3030 307c 3030 3030 3030  100000000|000000<br />00000090: 3030 3030 3130 3030 3030 3030 307c 2d30  0000100000000|-0<br />000000a0: 3030 3030 3030 3030 3031 3030 3030 3030  0000000001000000<br />000000b0: 3030 7c41 7c41 7c0a                      00|A|A|.</pre> | AWS, Linux en général | 
| Évaluez le fichier EBCDIC. | Dans la EC2 console Amazon, entrez la commande suivante. Cela ouvre le premier enregistrement du fichier EBCDIC.<pre>head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd</pre>Si vous avez utilisé l'exemple de fichier EBCDIC, voici le résultat.<pre> 00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `...............<br /> 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................<br /> 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................<br /> 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................<br /> 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................<br /> 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................<br /> 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................<br /> 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................<br /> 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................<br /> 00000090: 0000 0000 0000 ......</pre>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é par`60`, et dans la notation hexadécimale du fichier ASCII, ce caractère est représenté par. `2D` Pour un tableau EBCDIC-to-ASCII de conversion, voir [EBCDIC en ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) sur le site Web d'IBM. | AWS, Linux, EBCDIC en général | 

## Ressources connexes
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-resources"></a>

**Références**
+ [Le jeu de caractères EBCDIC](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set) (documentation IBM)
+ [EBCDIC vers ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) (documentation IBM)
+ [COBOL](https://www.ibm.com/docs/en/i/7.1?topic=languages-cobol) (documentation IBM)
+ [Concepts de base du JCL](https://www.ibm.com/docs/en/zos-basic-skills?topic=collection-basic-jcl-concepts) (documentation IBM)
+ [Connectez-vous à votre instance Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) ( EC2 documentation Amazon)

**Didacticiels**
+ [Planification de tâches SSH à l'aide d'AWS](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/) Lambda (article de blog AWS)
+ [Utilisation d'un déclencheur Amazon S3 pour appeler une fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) (documentation AWS Lambda)