Mengonversi dan membongkar data EBCDIC ke ASCII di AWS dengan menggunakan Python - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengonversi dan membongkar data EBCDIC ke ASCII di AWS dengan menggunakan Python

Luis Gustavo Dantas, Amazon Web Services

Ringkasan

Karena mainframe biasanya meng-host data bisnis penting, memodernisasi data adalah salah satu tugas terpenting saat memigrasikan data ke Amazon Web Services (AWS) Cloud atau lingkungan American Standard Code for Information Interchange (ASCII) lainnya. Pada mainframe, data biasanya dikodekan dalam format Extended Binary-Coded Decimal Interchange Code (EBCDIC). Mengekspor database, Metode Akses Penyimpanan Virtual (VSAM), atau file datar umumnya menghasilkan file EBCDIC biner yang dikemas, yang lebih kompleks untuk dimigrasi. Solusi migrasi database yang paling umum digunakan adalah change data capture (CDC), yang, dalam banyak kasus, secara otomatis mengubah pengkodean data. Namun, mekanisme CDC mungkin tidak tersedia untuk database, VSAM, atau file datar ini. Untuk file-file ini, pendekatan alternatif diperlukan untuk memodernisasi data.

Pola ini menjelaskan cara memodernisasi data EBCDIC dengan mengubahnya menjadi format ASCII. Setelah konversi, Anda dapat memuat data ke database terdistribusi atau memiliki aplikasi di cloud memproses data secara langsung. Pola menggunakan skrip konversi dan file sampel dalam mainframe-data-utilities GitHub repositori.

Prasyarat dan batasan

Prasyarat

Batasan

  • Layout file yang didefinisikan di dalam program COBOL tidak didukung. Mereka harus tersedia secara terpisah.

Versi produk

  • Python versi 3.8 atau yang lebih baru

Arsitektur

Tumpukan teknologi sumber

  • Data EBCDIC pada mainframe

  • Copybook COBOL

Tumpukan teknologi target

  • Instans Amazon Elastic Compute Cloud (Amazon EC2) di cloud pribadi virtual (VPC)

  • Amazon Elastic Block Store (Amazon EBS)

  • Python dan paket yang diperlukan, JavaScript Object Notation (JSON), sys, dan datetime

  • File datar ASCII siap dibaca oleh aplikasi modern atau dimuat dalam tabel database relasional

Arsitektur target

Data EBCDIC dikonversi ke ASCII pada sebuah instance EC2 dengan menggunakan skrip Python dan copybook COBOL

Diagram arsitektur menunjukkan proses konversi file EBCDIC ke file ASCII pada sebuah instance: EC2

  1. Menggunakan skrip parse_copybook_to_json.py, Anda mengonversi copybook COBOL ke file JSON.

  2. Menggunakan file JSON dan skrip extract_ebcdic_to_ascii.py, Anda mengonversi data EBCDIC ke file ASCII.

Otomatisasi dan skala

Setelah sumber daya yang diperlukan untuk konversi file manual pertama tersedia, Anda dapat mengotomatiskan konversi file. Pola ini tidak termasuk instruksi untuk otomatisasi. Ada beberapa cara untuk mengotomatiskan konversi. Berikut ini adalah ikhtisar dari satu pendekatan yang mungkin:

  1. Merangkum perintah AWS Command Line Interface (AWS CLI) dan perintah skrip Python ke dalam skrip shell.

  2. Buat fungsi AWS Lambda yang secara asinkron mengirimkan tugas skrip shell ke dalam sebuah instance. EC2 Untuk informasi selengkapnya, lihat Menjadwalkan lowongan SSH menggunakan AWS Lambda.

  3. Buat pemicu Amazon Simple Storage Service (Amazon S3) yang memanggil fungsi Lambda setiap kali file lama diunggah. Untuk informasi selengkapnya, lihat Menggunakan pemicu Amazon S3 untuk menjalankan fungsi Lambda.

Alat

Layanan AWS

Alat lainnya

  • GitHubadalah layanan hosting kode yang menyediakan alat kolaborasi dan kontrol versi.

  • Python adalah bahasa pemrograman tingkat tinggi.

Repositori kode

Kode untuk pola ini tersedia di mainframe-data-utilities GitHub repositori.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Luncurkan sebuah EC2 instance.

EC2 Instans harus memiliki akses internet keluar. Hal ini memungkinkan instance untuk mengakses kode sumber Python yang tersedia di. GitHub Untuk membuat instance:

  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2.

  2. Luncurkan instance EC2 Linux. Gunakan alamat IP publik dan izinkan akses masuk melalui port 22. Pastikan bahwa ukuran penyimpanan instance setidaknya dua kali ukuran file data EBCDIC. Untuk petunjuk, lihat EC2 dokumentasi Amazon.

AWS Umum

Instal Git.

  1. Menggunakan klien shell aman (SSH), sambungkan ke EC2 instance yang baru saja Anda luncurkan. Untuk informasi selengkapnya, lihat Connect ke instans Linux Anda.

  2. Di EC2 konsol Amazon, jalankan perintah berikut. Ini menginstal Git pada EC2 instance.

    sudo yum install git
  3. Jalankan perintah berikut dan konfirmasikan bahwa Git telah berhasil diinstal.

    git --version
AWS Umum, Linux

Instal Python.

  1. Di EC2 konsol Amazon, jalankan perintah berikut. Ini menginstal Python pada EC2 instance.

    sudo yum install python3
  2. Di EC2 konsol Amazon, jalankan perintah berikut. Ini menginstal Pip3 pada instance. EC2

    sudo yum install python3-pip
  3. Di EC2 konsol Amazon, jalankan perintah berikut. Ini menginstal AWS SDK for Python (Boto3) pada instance. EC2

    sudo pip3 install boto3
  4. Di EC2 konsol Amazon, jalankan perintah berikut, di <us-east-1> mana kode untuk Wilayah AWS Anda. Untuk daftar lengkap kode Wilayah, lihat Wilayah yang Tersedia di EC2 dokumentasi Amazon.

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

Kloning GitHub repositori.

  1. Di EC2 konsol Amazon, jalankan perintah berikut. Ini mengkloning mainframe-data-utilitiesrepositori dari GitHub dan membuka lokasi salinan default, folder. home

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. Di home folder, konfirmasikan bahwa mainframe-data-utilities folder tersebut ada.

AWS Umum, GitHub
TugasDeskripsiKeterampilan yang dibutuhkan

Parse copybook COBOL ke dalam file layout JSON.

Di dalam mainframe-data-utilities folder, jalankan skrip parse_copybook_to_json.py. Modul otomatisasi ini membaca tata letak file dari copybook COBOL dan membuat file JSON. File JSON berisi informasi yang diperlukan untuk menafsirkan dan mengekstrak data dari file sumber. Ini menciptakan metadata JSON dari copybook COBOL.

Perintah berikut mengkonversi copybook COBOL ke file 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

Script mencetak argumen yang diterima.

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

Untuk informasi selengkapnya tentang argumen, lihat file README di GitHub repositori.

AWS Umum, Linux

Periksa file tata letak JSON.

  1. Arahkan ke jalur output yang ditentukan dalam skrip parse_copybook_to_json.py.

  2. Periksa waktu pembuatan file sample-data/cobpack2-list.json untuk mengonfirmasi bahwa Anda telah memilih file tata letak JSON yang sesuai.

  3. Periksa file JSON dan konfirmasikan bahwa isinya mirip dengan yang berikut ini.

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

Atribut yang paling penting dari file layout JSON adalah:

  • input— Berisi jalur file EBCDIC yang akan dikonversi

  • output— Mendefinisikan jalur di mana file ASCII akan dihasilkan

  • lrecl- Menentukan ukuran dalam byte panjang catatan logis

  • transf— Daftar semua bidang dan ukurannya dalam byte

Untuk informasi selengkapnya tentang file tata letak JSON, lihat file README di repositori. GitHub

AWS Umum, JSON

Buat file ASCII.

Jalankan skrip extract_ebcdic_to_ascii.py, yang termasuk dalam GitHub repositori kloning. Skrip ini membaca file EBCDIC dan menulis file ASCII yang dikonversi dan dapat dibaca.

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

Saat skrip memproses data EBCDIC, ia mencetak pesan untuk setiap batch 10.000 catatan. Lihat contoh berikut ini.

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

Untuk informasi tentang cara mengubah frekuensi cetak, lihat file README di GitHub repositori.

AWS Umum

Periksa file ASCII.

  1. Periksa waktu pembuatan file extract-ebcdic-to-ascii/cobpack.ascii.txt untuk memverifikasi bahwa itu baru saja dibuat.

  2. Di EC2 konsol Amazon, masukkan perintah berikut. Ini membuka catatan pertama dari file ASCII.

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. Periksa isi catatan pertama. Karena file EBCDIC biasanya biner, mereka tidak memiliki karakter khusus carriage return dan line feed (CRLF). Skrip extract_ebcdic_to_ascii.py menambahkan karakter pipa sebagai pemisah kolom, yang didefinisikan dalam parameter skrip.

Jika Anda menggunakan contoh file EBCDIC yang disediakan, berikut ini adalah catatan pertama dalam file 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 Umum, Linux

Evaluasi file EBCDIC.

Di EC2 konsol Amazon, masukkan perintah berikut. Ini membuka catatan pertama dari file EBCDIC.

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

Jika Anda menggunakan contoh file EBCDIC, berikut ini adalah hasilnya.

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

Untuk mengevaluasi kesetaraan antara sumber dan file target, diperlukan pengetahuan komprehensif tentang EBCDIC. Misalnya, karakter pertama dari contoh file EBCDIC adalah tanda hubung (). - Dalam notasi heksadesimal dari file EBCDIC, karakter ini diwakili oleh, dan dalam notasi heksadesimal dari file ASCII60, karakter ini diwakili oleh. 2D Untuk tabel EBCDIC-to-ASCII konversi, lihat EBCDIC ke ASCII di situs web IBM.

AWS Umum, Linux, EBCDIC

Sumber daya terkait

Referensi

Tutorial