Convierta y desempaquete datos EBCDIC a ASCII en AWS mediante Python - Recomendaciones de AWS

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

Creado por Luis Gustavo Dantas (AWS)

Repositorio de código: Mainframe Data Utilities

Entorno: PoC o piloto

Origen: datos EBCDIC de mainframe

Destino: datos ASCII distribuidos o modernizados en la nube

Tipo R: redefinir la plataforma

Carga de trabajo: IBM

Tecnologías: mainframe; bases de datos; almacenamiento y respaldo; modernización

Servicios de AWS: Amazon EBS; Amazon EC2

Resumen

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

Requisitos previos y limitaciones

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 GitHub Para obtener más información sobre los cuadernos COBOL, consulte la Guía del programador de Enterprise COBOL para z/OS 6.4 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

Pila de tecnología de origen

  • Datos EBCDIC en un mainframe

  • Cuaderno COBOL

Pila de tecnología de destino

  • Una 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 instancia de EC2 mediante scripts de Python y un cuaderno COBOL

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

  1. Con el script parse_copybook_to_json.py, el cuaderno COBOL se convierte en un archivo JSON.

  2. Con el archivo JSON y el script extract_ebcdic_to_ascii.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.

  2. Crear una función de Lambda de AWS que envíe de forma asíncrona el trabajo del script de intérprete de comandos a una instancia de EC2. Para obtener más información, consulte Programar trabajos de SSH con AWS Lambda.

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

Herramientas

Servicios de AWS

Otras herramientas

  • GitHubes un servicio de alojamiento de código que proporciona herramientas de colaboración y control de versiones.

  • Python 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 GitHub repositorio.

Epics

TareaDescripciónHabilidades requeridas

Lanzar una instancia EC2.

La instancia de EC2 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:

  1. Abra la consola Amazon EC2 en https://console.aws.amazon.com/ec2.

  2. Lance una instancia de EC2 de Linux. Use una dirección IP pública y permita el acceso entrante a través del puerto 22. Asegúrese de que el tamaño de almacenamiento de la instancia sea, al menos, el doble del tamaño del archivo de datos EBCDIC. Para obtener instrucciones, consulte la documentación de Amazon EC2.

AWS general

Instale Git

  1. Con un cliente de secure shell (SSH), conéctese a la instancia de EC2 que acaba de lanzar. Para obtener más información, consulte Conexión con la instancia de Linux.

  2. En la consola de Amazon EC2, ejecute el siguiente comando. Se instalará Git en la instancia de EC2.

    sudo yum install git
  3. Ejecute el comando siguiente y confirme que Git ha sido instalado correctamente.

    git --version
AWS general, Linux

Instalación de Python.

  1. En la consola de Amazon EC2, ejecute el siguiente comando. Esto instala Python en la instancia de EC2.

    sudo yum install python3
  2. En la consola de Amazon EC2, ejecute el siguiente comando. Esto instala Pip3 en la instancia de EC2.

    sudo yum install python3-pip
  3. En la consola de Amazon EC2, ejecute el siguiente comando. Se instalará AWS SDK para Python (Boto3) en la instancia de EC2.

    sudo pip3 install boto3
  4. En la consola de Amazon EC2, ejecute el siguiente comando, donde <us-east-1> es el código de su región de AWS. Para obtener una lista de códigos de región, consulte Regiones disponibles en la documentación de Amazon EC2.

    export AWS_DEFAULT_REGION=<us-east-1>
AWS general, Linux

Clone el GitHub repositorio.

  1. En la consola de Amazon EC2, ejecute el siguiente comando. De este modo, se clona el mainframe-data-utilitiesrepositorio GitHub y se abre la ubicación de copia predeterminada, la home carpeta.

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. En la carpeta home, confirme que existe la carpeta mainframe-data-utilities.

AWS general, GitHub
TareaDescripciónHabilidades requeridas

Convierta el cuaderno COBOL en el archivo de diseño JSON.

En la carpeta mainframe-data-utilities, ejecute el script parse_copybook_to_json.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.

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

El script imprime los argumentos recibidos.

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

Para obtener más información sobre los argumentos, consulte el archivo README del GitHub repositorio.

AWS general, Linux

Inspeccione el archivo de diseño JSON.

  1. Acceda a la ruta de salida definida en el script parse_copybook_to_json.py.

  2. Compruebe la hora de creación del archivo sample-data/cobpack2-list.json para confirmar que ha seleccionado el archivo de diseño JSON adecuado.

  3. Examine el archivo JSON y confirme que el contenido es similar a este.

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

Los atributos más importantes del archivo de diseño JSON son:

  • input – Contiene la ruta del archivo EBCDIC que se va a convertir

  • output – Define la ruta en la que se generará el archivo ASCII

  • lrecl – Especifica el tamaño en bytes de la longitud del registro lógico

  • transf – Muestra todos los campos y su tamaño en bytes

Para obtener más información sobre el archivo de diseño JSON, consulta el archivo README del GitHub repositorio.

AWS general, JSON

Cree el archivo ASCII.

Ejecute el script extract_ebcdic_to_ascii.py, que se incluye en el repositorio clonado GitHub . Este script lee el archivo EBCDIC y escribe un archivo ASCII convertido y legible.

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

A medida que el script procesa los datos del EBCDIC, imprime un mensaje por cada lote de 10 000 registros. Consulte el siguiente ejemplo.

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

Para obtener información sobre cómo cambiar la frecuencia de impresión, consulte el archivo README del GitHub repositorio.

AWS general

Examinar el archivo ASCII.

  1. Compruebe la hora de creación del archivo extract-ebcdic-to-ascii/cobpack.ascii.txt para comprobar que se ha creado recientemente.

  2. En la consola de Amazon EC2, ejecute el siguiente comando. Se abrirá el primer registro del archivo ASCII.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. Examine el contenido del primer registro. Ya que los archivos EBCDIC suelen ser binarios, no tienen caracteres especiales de retorno y alimentación de línea (CRLF). El script extract_ebcdic_to_ascii.py añade un carácter de barra vertical como separador de columnas, que se define en los parámetros del script.

Si ha usado el archivo EBCDIC proporcionado como ejemplo, el primer registro del archivo ASCII será este.

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 general, Linux

Evalúe el archivo EBCDIC.

En la consola de Amazon EC2, ejecute el siguiente comando. Esto abre el primer registro del archivo EBCDIC.

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

Si ha usado el archivo EBCDIC de ejemplo, el resultado es el siguiente.

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

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 de conversión de EBCDIC a ASCII, consulte EBCDIC a ASCII en el sitio web de IBM.

AWS general, Linux, EBCDIC

Recursos relacionados

Referencias

Tutoriales