

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Convierta y desempaquete datos EBCDIC a ASCII en AWS mediante Python
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python"></a>

*Luis Gustavo Dantas, Amazon Web Services*

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

Dado que los mainframe suelen alojar datos empresariales críticos, la modernización de estos datos es una de las tareas más importantes a la hora de migrar datos a la nube de Amazon Web Services (AWS) o a otro entorno de American Standard Code for Information Interchange (ASCII). En los mainframe, los datos suelen codificarse en un formato ampliado de código de intercambio decimal codificado en binario (EBCDIC). La exportación de bases de datos, los métodos de acceso al almacenamiento virtual (VSAM) o los archivos planos suelen producir archivos EBCDIC binarios empaquetados, que son más complejos de migrar. La solución de migración de bases de datos más usada es la captura de datos de cambios (CDC), que, en la mayoría de los casos, convierte automáticamente la codificación de los datos. Sin embargo, es posible que los mecanismos de CDC no estén disponibles para estas bases de datos, VSAM o archivos planos. En el caso de estos archivos, es necesario adoptar un enfoque alternativo para modernizar los datos.

Este patrón describe cómo modernizar los datos EBCDIC convirtiéndolos a formato ASCII. Tras la conversión, puede cargar los datos en bases de datos distribuidas o hacer que las aplicaciones en la nube procesen los datos directamente. El patrón utiliza el script de conversión y los archivos de muestra del [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub repositorio.

## Requisitos previos y limitaciones
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-prereqs"></a>

**Requisitos previos**
+ Una cuenta de AWS activa.
+ Un archivo de entrada EBCDIC y su correspondiente cuaderno en lenguaje común orientado a negocios (COBOL). En el repositorio se incluyen un archivo EBCDIC de muestra y un cuaderno de notas COBOL. [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub Para obtener más información sobre los cuadernos de COBOL, consulte la Guía de programación de [Enterprise COBOL for z/OS 6.4](https://publibfp.dhe.ibm.com/epubs/pdf/igy6pg40.pdf) en el sitio web de IBM.

**Limitaciones**
+ No es compatible con diseños de archivo definidos en COBOL. Deben estar disponibles por separado.

**Versiones de producto**
+ Python, versión 3.8 o posterior

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

**Pila de tecnología de origen**
+ Datos EBCDIC en un mainframe
+ Cuaderno COBOL

**Pila de tecnología de destino**
+ Instancia de Amazon Elastic Compute Cloud (Amazon EC2) en una nube privada virtual (VPC)
+ Amazon Elastic Block Store (Amazon EBS)
+ Python y sus paquetes necesarios, JavaScript Object Notation (JSON), sys y datetime
+ Archivo plano ASCII listo para ser leído por una aplicación moderna o cargado en una tabla de base de datos relacional

**Arquitectura de destino**

![\[Datos EBCDIC convertidos a ASCII en una EC2 instancia mediante scripts de Python y un cuaderno COBOL\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/f5907bfe-7dff-4cd0-8523-57015ad48c4b/images/4f97b1dd-3f20-4966-a291-22180680ea99.png)


El diagrama de arquitectura muestra el proceso de conversión de un archivo EBCDIC en un archivo ASCII en una instancia: EC2 

1. Con el script **parse\$1copybook\$1to\$1json.py**, el cuaderno COBOL se convierte en un archivo JSON.

1. Con el archivo JSON y el script **extract\$1ebcdic\$1to\$1ascii.py**, los datos EBCDIC se convierten en un archivo ASCII.

**Automatizar y escalar**

Una vez que disponga de los recursos necesarios para las primeras conversiones manuales de archivos, puede automatizar la conversión de archivos. Este patrón no incluye instrucciones para la automatización. La conversión se puede automatizar de varias formas. A continuación, se muestra un posible enfoque:

1. Encapsular la interfaz de la línea de comandos de AWS (AWS CLI) y los comandos de script de Python en un script de intérprete de comandos.

1. Cree una función de AWS Lambda que envíe de forma asíncrona el trabajo del script de shell a una instancia. EC2 Para obtener más información, consulte [Programar trabajos de SSH con AWS Lambda](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/).

1. Crear un desencadenante de Amazon Simple Storage Service (Amazon S3) que invoque la función de Lambda cada vez que se cargue un archivo heredado. Para obtener más información, consulte [Utilizar un desencadenador de Amazon S3 para invocar una función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html).

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

**Servicios de AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) proporciona capacidad informática escalable en la nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.
+ [Amazon Elastic Block Store (Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)) proporciona volúmenes de almacenamiento a nivel de bloques para utilizarlos con instancias de Amazon Elastic Compute Cloud (Amazon). EC2
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.

**Otras herramientas**
+ [GitHub](https://github.com/)es un servicio de alojamiento de código que proporciona herramientas de colaboración y control de versiones.
+ [Python](https://www.python.org/) es un lenguaje de programación de alto nivel.

**Repositorio de código**

El código de este patrón está disponible en el [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub repositorio.

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

### Prepara la EC2 instancia
<a name="prepare-the-ec2-instance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Lanza una EC2 instancia. | La EC2 instancia debe tener acceso saliente a Internet. Esto permite que la instancia acceda al código fuente de Python disponible en GitHub. Para crear una instancia:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS general | 
| Instala Git | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS general, Linux | 
| Instalación de Python. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS general, Linux | 
| Clona el GitHub repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | AWS general, GitHub | 

### Cree el archivo ASCII a partir de los datos del EBCDIC
<a name="create-the-ascii-file-from-the-ebcdic-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Convierta el cuaderno COBOL en el archivo de diseño JSON. | En la carpeta `mainframe-data-utilities`, ejecute el script **parse\$1copybook\$1to\$1json.py**. Este módulo de automatización lee el diseño del archivo de un cuaderno COBOL y crea un archivo JSON. Este archivo JSON contiene la información necesaria para interpretar y extraer los datos del archivo fuente. Se crearán los metadatos de JSON a partir del cuaderno COBOL. El siguiente comando convierte el cuaderno COBOL en un archivo 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>El script imprime los argumentos recibidos.<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>Para obtener más información sobre los argumentos, consulte el [archivo README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) del GitHub repositorio. | AWS general, Linux | 
| Inspeccione el archivo de diseño JSON. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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>Los atributos más importantes del archivo de diseño JSON son:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Para obtener más información sobre el archivo de diseño JSON, consulta el [archivo README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) del GitHub repositorio. | AWS general, JSON | 
| Cree el archivo ASCII.  | Ejecute el script **extract\$1ebcdic\$1to\$1ascii.py**, que se incluye en el repositorio clonado GitHub . Este script lee el archivo EBCDIC y escribe un archivo ASCII convertido y legible.<pre>python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json</pre>A medida que el script procesa los datos del EBCDIC, imprime un mensaje por cada lote de 10 000 registros. Consulte el siguiente ejemplo.<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>Para obtener información sobre cómo cambiar la frecuencia de impresión, consulte el [archivo README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) del GitHub repositorio. | AWS general | 
| Examinar el archivo ASCII. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)Si ha usado el archivo EBCDIC proporcionado como ejemplo, el primer registro del archivo ASCII será este.<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 general, Linux | 
| Evalúe el archivo EBCDIC. | En la EC2 consola de Amazon, introduce el siguiente comando. Esto abre el primer registro del archivo EBCDIC.<pre>head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd</pre>Si ha usado el archivo EBCDIC de ejemplo, el resultado es el siguiente.<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>Para evaluar la equivalencia entre los archivos de origen y de destino, es necesario un conocimiento exhaustivo de EBCDIC. Por ejemplo, el primer carácter del archivo EBCDIC de muestra es un guion (`-`). En la notación hexadecimal del archivo EBCDIC, este carácter se representa mediante `60`, y en la notación hexadecimal del archivo ASCII, este carácter se representa mediante `2D`. Para obtener una tabla EBCDIC-to-ASCII de conversión, consulte [EBCDIC a ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) en el sitio web de IBM. | AWS general, Linux, EBCDIC | 

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

**Referencias**
+ [El conjunto de caracteres EBCDIC](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set) (documentación de IBM)
+ [EBCDIC a ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii) (documentación de IBM)
+ [COBOL](https://www.ibm.com/docs/en/i/7.1?topic=languages-cobol) (documentación de IBM)
+ [Conceptos básicos de JCL](https://www.ibm.com/docs/en/zos-basic-skills?topic=collection-basic-jcl-concepts) (documentación de IBM)
+ [Conéctate a tu instancia de Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) ( EC2 documentación de Amazon)

**Tutoriales**
+ [Programar trabajos de SSH con AWS Lambda](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/) (publicación del blog de AWS)
+ [Uso de un desencadenador de Amazon S3 para invocar una función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) (documentación de AWS Lambda)