Converta e descompacte dados EBCDIC em ASCII na AWS usando Python - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Converta e descompacte dados EBCDIC em ASCII na AWS usando Python

Criado por Luis Gustavo Dantas (AWS)

Repositório de código: Mainframe Data Utilities

Ambiente: PoC ou piloto

Origem: dados do mainframe EBCDIC

Destino: dados ASCII distribuídos ou modernizados na nuvem

Tipo R: redefinir a plataforma

Workload: IBM

Tecnologias: mainframe; bancos de dados; armazenamento e backup; modernização

Serviços da AWS: Amazon EBS; Amazon EC2

Resumo

Como os mainframes normalmente hospedam dados comerciais críticos, a modernização dos dados é uma das tarefas mais importantes ao migrar dados para a nuvem da Amazon Web Services (AWS) ou outro ambiente do American Standard Code for Information Interchange (ASCII). Em mainframes, os dados geralmente são codificados no formato EBCDIC (código de intercâmbio decimal codificado por código binário estendido). A exportação de banco de dados, VSAM (Virtual Storage Access Method) ou arquivos simples geralmente produz arquivos EBCDIC binários compactados, que são mais complexos de migrar. A solução de migração de banco de dados mais usada é a captura de dados de alteração (CDC), que, na maioria dos casos, converte automaticamente a codificação de dados. No entanto, os mecanismos do CDC podem não estar disponíveis para esses bancos de dados, VSAM ou arquivos simples. Para esses arquivos, é necessária uma abordagem alternativa para modernizar os dados.

Esse padrão descreve como modernizar os dados EBCDIC convertendo-os para o formato ASCII. Após a conversão, você pode carregar os dados em bancos de dados distribuídos ou fazer com que aplicativos na nuvem processem os dados diretamente. O padrão usa o script de conversão e os arquivos de amostra no mainframe-data-utilities GitHub repositório.

Pré-requisitos e limitações

Pré-requisitos

Limitações

  • Os layouts de arquivo definidos nos programas COBOL não são suportados. Eles devem ser disponibilizados separadamente.

Versões do produto

  • Python, versão 3.8 ou superior

Arquitetura

Pilha de tecnologia de origem

  • Dados EBCDIC em um mainframe

  • Copybook de COBOL

Pilha de tecnologias de destino

  • Uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em uma nuvem privada virtual (VPC)

  • Amazon Elastic Block Store (Amazon EBS)

  • Python e seus pacotes necessários, JavaScript Object Notation (JSON), sys e datetime

  • Arquivo plano ASCII pronto para ser lido por um aplicativo moderno ou carregado em uma tabela de banco de dados relacional

Arquitetura de destino

Dados EBCDIC convertidos em ASCII em uma instância do EC2 usando scripts Python e um caderno COBOL

O diagrama da arquitetura mostra o processo de conversão de um arquivo EBCDIC em um arquivo ASCII em uma instância do EC2:

  1. Usando o script parse_copybook_to_json.py, você converte o copybook de COBOL em um arquivo JSON.

  2. Usando o arquivo JSON e o script extract_ebcdic_to_ascii.py, você converte os dados EBCDIC em um arquivo ASCII.

Automação e escala

Depois que os recursos necessários para as primeiras conversões manuais de arquivos estiverem disponíveis, você poderá automatizar a conversão de arquivos. Esse padrão não inclui instruções para automação. Há várias maneiras de automatizar a conversão. Veja abaixo uma visão geral de uma possível abordagem:

  1. Encapsular os comandos do AWS Command Line Interface (AWS CLI) e os comandos de script do Python em um script de shell.

  2. Crie uma função do AWS Lambda que envie de forma assíncrona o trabalho de script de shell em uma instância do EC2. Para obter mais informações, consulte Agendamento de trabalhos de SSH usando o AWS Lambda.

  3. Crie um acionador do Amazon Simple Storage Service (Amazon S3) que invoque a função do Lambda toda vez que um arquivo legado for carregado. Para obter mais informações, consulte Como usar um trigger do Amazon S3 para invocar uma função do Lambda.

Ferramentas

Serviços da AWS

Outras ferramentas

  • GitHubé um serviço de hospedagem de código que fornece ferramentas de colaboração e controle de versão.

  • O Python é uma linguagem de programação de alto nível.

Repositório de código

O código desse padrão está disponível no mainframe-data-utilities GitHub repositório.

Épicos

TarefaDescriçãoHabilidades necessárias

Inicie uma instância do EC2.

A instância do EC2 deve ter acesso de saída à internet. Isso permite que a instância acesse o código-fonte do Python disponível em. GitHub Para criar a instância:

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2.

  2. Execute uma instância do EC2 do Linux. Use um endereço IP público e permita o acesso de entrada pela porta 22. Certifique-se de que o tamanho de armazenamento da instância seja pelo menos o dobro do tamanho do arquivo de dados EBCDIC. Para obter instruções, consulte a Documentação do Amazon EC2.

AWS geral

Instale o Git.

  1. Usando um cliente secure shell (SSH), conecte-se à instância do EC2 que você acabou de iniciar. Para obter mais informações, consulte Conectar-se à instância do Linux.

  2. No console do Amazon EC2, execute o comando a seguir. Isso instala o Git na instância do EC2.

    sudo yum install git
  3. Execute o seguinte comando e confirme que o Git foi instalado com êxito.

    git --version
AWS geral, Linux

Instalar o Python.

  1. No console do Amazon EC2, execute o comando a seguir. Isso instala o Python na instância do EC2.

    sudo yum install python3
  2. No console do Amazon EC2, execute o comando a seguir. Isso instala o Pip3 na instância do EC2.

    sudo yum install python3-pip
  3. No console do Amazon EC2, execute o comando a seguir. Isso instala o AWS SDK para Python (Boto3) na instância do EC2.

    sudo pip3 install boto3
  4. No console do Amazon EC2, execute o comando a seguir, onde <us-east-1> é o código da sua região da AWS. Para obter uma lista completa de códigos de Região, consulte Regiões disponíveis na Documentação do Amazon EC2.

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

Clone o GitHub repositório.

  1. No console do Amazon EC2, execute o comando a seguir. Isso clona o mainframe-data-utilitiesrepositório GitHub e abre o local de cópia padrão, a home pasta.

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. Na pasta home, confirme se a pasta mainframe-data-utilities está presente.

AWS geral, GitHub
TarefaDescriçãoHabilidades necessárias

Analise o copybook de COBOL no arquivo de layout JSON.

Dentro da pasta mainframe-data-utilities, execute o script parse_copybook_to_json.py. Esse módulo de automação lê o layout do arquivo de um copybook de COBOL e cria um arquivo JSON. O arquivo JSON contém as informações necessárias para interpretar e extrair os dados do arquivo de origem. Isso cria os metadados JSON do copybook de COBOL.

O comando a seguir converte o copybook de COBOL em um arquivo 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

O script imprime os argumentos recebidos.

----------------------------------------------------------------------- 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 obter mais informações sobre os argumentos, consulte o arquivo README no GitHub repositório.

AWS geral, Linux

Inspecione o arquivo de layout JSON.

  1. Navegue até o caminho de saída definido no script parse_copybook_to_json.py.

  2. Verifique o horário de criação do arquivo sample-data/cobpack2-list.json para confirmar se você selecionou o arquivo de layout JSON apropriado.

  3. Examine o arquivo JSON e confirme se o conteúdo é semelhante ao seguinte.

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

Os atributos mais importantes do arquivo de layout JSON são:

  • input: contém o caminho do arquivo EBCDIC a ser convertido

  • output: define o caminho em que o arquivo ASCII será gerado

  • lrecl: especifica o tamanho em bytes do tamanho do registro lógico

  • transf: lista todos os campos e seu tamanho em bytes

Para obter mais informações sobre o arquivo de layout JSON, consulte o arquivo README no GitHub repositório.

AWS geral, JSON

Criar o arquivo ASCII.

Execute o script extract_ebcdic_to_ascii.py, que está incluído no GitHub repositório clonado. Esse script lê o arquivo EBCDIC e grava um arquivo ASCII convertido e legível.

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

Conforme o script processa os dados do EBCDIC, ele imprime uma mensagem para cada lote de 10.000 registros. Veja o exemplo a seguir.

------------------------------------------------------------------ 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 obter informações sobre como alterar a frequência de impressão, consulte o arquivo README no GitHub repositório.

AWS geral

Examinar o arquivo ASCII.

  1. Verifique a hora de criação do arquivo extract-ebcdic-to-ascii/COBPACK.ASCII.txt para verificar se ele foi criado recentemente.

  2. No console do Amazon EC2, insira o comando a seguir. Isso abre o primeiro registro do arquivo ASCII.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. Examine o conteúdo do primeiro registro. Como os arquivos EBCDIC geralmente são binários, eles não têm caracteres especiais de retorno de carro e alimentação de linha (CRLF). O script extract_ebcdic_to_ascii.py adiciona um caractere de barra vertical como separador de colunas, que é definido nos parâmetros do script.

Se você usou o arquivo EBCDIC de amostra fornecido, o seguinte é o primeiro registro no arquivo 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 geral, Linux

Avalie o arquivo EBCDIC.

No console do Amazon EC2, insira o comando a seguir. Isso abre o primeiro registro do arquivo EBCDIC.

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

Se você usou o arquivo EBCDIC de amostra, o resultado é o seguinte.

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 avaliar a equivalência entre os arquivos de origem e de destino, é necessário um conhecimento abrangente do EBCDIC. Por exemplo, o primeiro caractere do arquivo EBCDIC de amostra é um hífen (-). Na notação hexadecimal do arquivo EBCDIC, esse caractere é representado por 60, e na notação hexadecimal do arquivo ASCII, esse caractere é representado por 2D. Para obter uma tabela de conversão de EBCDIC para ASCII, consulte EBCDIC para ASCII no site da IBM.

AWS geral, Linux, EBCDIC

Recursos relacionados

Referências

Tutoriais