

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Converti e decomprimi i dati EBCDIC in ASCII su AWS usando Python
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python"></a>

*Luis Gustavo Dantas, Amazon Web Services*

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

Poiché i mainframe in genere ospitano dati aziendali critici, la modernizzazione dei dati è una delle attività più importanti durante la migrazione dei dati verso il cloud Amazon Web Services (AWS) o un altro ambiente American Standard Code for Information Interchange (ASCII). Sui mainframe, i dati sono generalmente codificati in formato EBCDIC (Extended Binary-Coded Decimal Interchange Code). L'esportazione di database, Virtual Storage Access Method (VSAM) o file flat produce generalmente file EBCDIC binari compressi, la cui migrazione è più complessa. La soluzione di migrazione del database più utilizzata è Change Data Capture (CDC), che, nella maggior parte dei casi, converte automaticamente la codifica dei dati. Tuttavia, i meccanismi CDC potrebbero non essere disponibili per questi database, VSAM o file flat. Per questi file, è necessario un approccio alternativo per modernizzare i dati.

Questo modello descrive come modernizzare i dati EBCDIC convertendoli in formato ASCII. Dopo la conversione, puoi caricare i dati in database distribuiti o fare in modo che le applicazioni nel cloud elaborino direttamente i dati. Il pattern utilizza lo script di conversione e i file di esempio presenti nel [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub repository.

## Prerequisiti e limitazioni
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo.
+ Un file di input EBCDIC e il corrispondente quaderno COBOL (Common Business-Oriented Language). Nel repository sono inclusi un file EBCDIC di esempio e un quaderno COBOL. [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub Per ulteriori informazioni sui quaderni COBOL, consulta [Enterprise COBOL](https://publibfp.dhe.ibm.com/epubs/pdf/igy6pg40.pdf) for 6.4 Programming Guide sul sito Web IBM. z/OS 

**Limitazioni**
+ I layout di file definiti all'interno dei programmi COBOL non sono supportati. Devono essere resi disponibili separatamente.

**Versioni del prodotto**
+ Python versione 3.8 o successiva

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

**Stack tecnologico di origine**
+ Dati EBCDIC su un mainframe
+ Quaderno COBOL

**Stack tecnologico Target**
+ Istanza Amazon Elastic Compute Cloud (Amazon EC2) in un cloud privato virtuale (VPC)
+ Amazon Elastic Block Store (Amazon EBS)
+ Python e i suoi pacchetti richiesti, JavaScript Object Notation (JSON), sys e datetime
+ File flat ASCII pronto per essere letto da un'applicazione moderna o caricato in una tabella di database relazionale

**Architettura Target**

![\[Dati EBCDIC convertiti in ASCII su un' EC2 istanza utilizzando script Python e un quaderno COBOL\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/f5907bfe-7dff-4cd0-8523-57015ad48c4b/images/4f97b1dd-3f20-4966-a291-22180680ea99.png)


Il diagramma di architettura mostra il processo di conversione di un file EBCDIC in un file ASCII su un'istanza: EC2 

1. Utilizzando lo script **parse\$1copybook\$1to\$1json.py**, convertite il quaderno COBOL in un file JSON.

1. Utilizzando il file JSON e lo script **extract\$1ebcdic\$1to\$1ascii.py**, convertite i dati EBCDIC in un file ASCII.

**Automazione e scalabilità**

Dopo aver predisposto le risorse necessarie per le prime conversioni manuali dei file, puoi automatizzare la conversione dei file. Questo modello non include istruzioni per l'automazione. Esistono diversi modi per automatizzare la conversione. Di seguito è riportata una panoramica di un approccio possibile:

1. Incapsula i comandi di script AWS Command Line Interface (AWS CLI) e Python in uno script di shell.

1. Crea una funzione AWS Lambda che invii in modo asincrono il job dello script di shell a un'istanza. EC2 Per ulteriori informazioni, consulta [Pianificazione di lavori SSH con AWS Lambda](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/).

1. Crea un trigger Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) che richiami la funzione Lambda ogni volta che viene caricato un file legacy. Per ulteriori informazioni, consulta [Usare un trigger Amazon S3 per richiamare una funzione Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html).

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

**Servizi AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) fornisce capacità di calcolo scalabile nel cloud AWS. Puoi avviare tutti i server virtuali di cui hai bisogno e scalarli rapidamente verso l'alto o verso il basso.
+ [Amazon Elastic Block Store (Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)) fornisce volumi di storage a livello di blocco da utilizzare con istanze Amazon Elastic Compute Cloud (Amazon). EC2
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.

**Altri strumenti**
+ [GitHub](https://github.com/)è un servizio di code-hosting che fornisce strumenti di collaborazione e controllo delle versioni.
+ [Python](https://www.python.org/) è un linguaggio di programmazione di alto livello.

**Archivio di codice**

Il codice per questo pattern è disponibile nel [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub repository.

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

### Prepara l'istanza EC2
<a name="prepare-the-ec2-instance"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia un' EC2 istanza. | L' EC2 istanza deve disporre di accesso a Internet in uscita. Ciò consente all'istanza di accedere al codice sorgente Python disponibile su. GitHub Per creare l'istanza:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | Informazioni generali su AWS | 
| Installa Git. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | Informazioni generali su AWS, Linux | 
| Installare Python. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | Informazioni generali su AWS, Linux | 
| Clona il GitHub repository. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS generale, GitHub | 

### Crea il file ASCII dai dati EBCDIC
<a name="create-the-ascii-file-from-the-ebcdic-data"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Analizza il quaderno COBOL nel file di layout JSON. | **All'interno della `mainframe-data-utilities` cartella, esegui lo script parse\$1copybook\$1to\$1json.py.** Questo modulo di automazione legge il layout del file da un quaderno COBOL e crea un file JSON. Il file JSON contiene le informazioni necessarie per interpretare ed estrarre i dati dal file sorgente. Questo crea i metadati JSON dal quaderno COBOL. Il comando seguente converte il quaderno COBOL in un file 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>Lo script stampa gli argomenti ricevuti.<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>Per ulteriori informazioni sugli argomenti, consultate il [file README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) nel GitHub repository. | Informazioni generali su AWS, Linux | 
| Ispeziona il file di layout JSON. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/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>Gli attributi più importanti del file di layout JSON sono:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Per ulteriori informazioni sul file di layout JSON, consultate il file [README nel repository](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md). GitHub  | Informazioni generali su AWS, JSON | 
| Crea il file ASCII.  | Esegui lo script **extract\$1ebcdic\$1to\$1ascii.py**, incluso nel repository GitHub clonato. Questo script legge il file EBCDIC e scrive un file ASCII convertito e leggibile.<pre>python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json</pre>Durante l'elaborazione dei dati EBCDIC, lo script stampa un messaggio per ogni batch di 10.000 record. Guarda l'esempio seguente.<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>Per informazioni su come modificare la frequenza di stampa, consultate il [file README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) nel repository. GitHub  | Informazioni generali su AWS | 
| Esamina il file ASCII. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Se è stato utilizzato il file EBCDIC di esempio fornito, il seguente è il primo record del file 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> | Informazioni generali su AWS, Linux | 
| Valuta il file EBCDIC. | Nella EC2 console Amazon, inserisci il seguente comando. Questo apre il primo record del file EBCDIC.<pre>head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd</pre>Se hai utilizzato il file EBCDIC di esempio, il risultato è il seguente.<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>Per valutare l'equivalenza tra il file di origine e quello di destinazione, è richiesta una conoscenza approfondita di EBCDIC. Ad esempio, il primo carattere del file EBCDIC di esempio è un trattino (). `-` Nella notazione esadecimale del file EBCDIC, questo carattere è rappresentato da, e nella notazione esadecimale del file ASCII`60`, questo carattere è rappresentato da. `2D` [Per una tabella di EBCDIC-to-ASCII conversione, consulta EBCDIC to ASCII sul sito Web IBM.](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) | Informazioni generali su AWS, Linux, EBCDIC | 

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

**Riferimenti**
+ [Il set di caratteri EBCDIC (](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set)documentazione IBM)
+ [Da EBCDIC](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) ad ASCII (documentazione IBM)
+ [COBOL](https://www.ibm.com/docs/en/i/7.1?topic=languages-cobol) (documentazione IBM)
+ [Concetti JCL di base (documentazione IBM](https://www.ibm.com/docs/en/zos-basic-skills?topic=collection-basic-jcl-concepts))
+ [Connect alla tua istanza Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) ( EC2 documentazione Amazon)

**Tutorial**
+ [Pianificazione di lavori SSH con AWS Lambda](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/) (post sul blog AWS)
+ [Utilizzo di un trigger Amazon S3 per richiamare una funzione Lambda (documentazione AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html))