Konversi file mainframe dari format EBCDIC ke format ASCII yang dibatasi karakter di Amazon S3 menggunakan AWS Lambda - AWS Prescriptive Guidance

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

Konversi file mainframe dari format EBCDIC ke format ASCII yang dibatasi karakter di Amazon S3 menggunakan AWS Lambda

Luis Gustavo Dantas, Amazon Web Services

Ringkasan

Pola ini menunjukkan kepada Anda cara meluncurkan AWS Lambda fungsi yang secara otomatis mengonversi file mainframe Extended Binary Coded Decimal Interchange Code (EBCDIC) ke file American Standard Code for Information Interchange (ASCII) yang dibatasi karakter. Fungsi Lambda berjalan setelah file ASCII diunggah ke bucket Amazon Simple Storage Service (Amazon S3). Setelah konversi file, Anda dapat membaca file ASCII pada beban kerja berbasis x86 atau memuat file ke dalam database modern.

Pendekatan konversi file yang ditunjukkan dalam pola ini dapat membantu Anda mengatasi tantangan bekerja dengan file EBCDIC di lingkungan modern. File yang dikodekan dalam EBCDIC sering berisi data yang direpresentasikan dalam format desimal biner atau dikemas, dan bidang memiliki panjang tetap. Karakteristik ini menciptakan hambatan karena beban kerja berbasis x86 modern atau lingkungan terdistribusi umumnya bekerja dengan data yang dikodekan ASCII dan tidak dapat memproses file EBCDIC.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS

  • Bucket Amazon S3

  • Pengguna AWS Identity and Access Management (IAM) dengan izin administratif

  • AWS CloudShell

  • Python 3.8.0 atau yang lebih baru

  • File datar yang dikodekan dalam EBCDIC dan struktur data yang sesuai dalam copybook bahasa berorientasi bisnis umum (COBOL)

Batasan

  • Copybook COBOL biasanya memiliki beberapa definisi tata letak. mainframe-data-utilitiesProyek ini dapat mengurai jenis copybook ini tetapi tidak dapat menyimpulkan tata letak mana yang harus dipertimbangkan pada konversi data. Ini karena copybook tidak memegang logika ini (yang tetap pada program COBOL sebagai gantinya). Akibatnya, Anda harus secara manual mengkonfigurasi aturan untuk memilih tata letak setelah Anda mengurai copybook.

  • Pola ini tunduk pada kuota Lambda.

Arsitektur

Tumpukan teknologi sumber

  • IBM z/OS, IBM i, dan sistem EBCDIC lainnya

  • File berurutan dengan data yang dikodekan dalam EBCDIC (seperti IBM Db2 unload)

  • Copybook COBOL

Tumpukan teknologi target

  • Amazon S3

  • Pemberitahuan acara Amazon S3

  • IAM

  • Fungsi Lambda

  • Python 3.8 atau yang lebih baru

  • Utilitas Data Mainframe

  • Metadata JSON

  • File ASCII yang dibatasi karakter

Arsitektur target

Diagram berikut menunjukkan arsitektur untuk mengkonversi file mainframe EBCDIC ke file ASCII.

Arsitektur untuk mengonversi file EBCDIC mainframe ke file ASCII

Diagram menunjukkan alur kerja berikut:

  1. Pengguna menjalankan skrip parser copybook, yang mengubah copybook COBOL menjadi file JSON.

  2. Pengguna mengunggah metadata JSON ke bucket Amazon S3. Ini membuat metadata dapat dibaca oleh fungsi Lambda konversi data.

  3. Pengguna atau proses otomatis mengunggah file EBCDIC ke bucket Amazon S3.

  4. Peristiwa notifikasi Amazon S3 memicu fungsi Lambda konversi data.

  5. AWS memverifikasi izin baca-tulis bucket Amazon S3 untuk fungsi Lambda.

  6. Lambda membaca file dari bucket Amazon S3 dan mengonversi file secara lokal dari EBCDIC ke ASCII.

  7. Lambda mencatat status proses di Amazon. CloudWatch

  8. Lambda menulis file ASCII kembali ke Amazon S3.

catatan

Skrip parser copybook berjalan satu kali untuk melakukan konversi metadata ke format JSON, yang kemudian disimpan dalam bucket Amazon S3. Setelah konversi awal, semua file EBCDIC berikutnya yang mereferensikan file JSON yang sama di bucket Amazon S3 akan menggunakan konfigurasi metadata yang ada.

Alat

Layanan AWS

  • Amazon CloudWatch membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.

  • Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

  • AWS CloudShelladalah shell berbasis browser yang dapat Anda gunakan untuk mengelola Layanan AWS dengan menggunakan AWS Command Line Interface (AWS CLI) dan berbagai alat pengembangan yang sudah diinstal sebelumnya.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya bila diperlukan dan menskalakan secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

Alat-alat lainnya

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

  • Python adalah bahasa pemrograman tingkat tinggi.

Kode

Kode untuk pola ini tersedia di GitHub mainframe-data-utilitiesrepositori.

Praktik terbaik

Pertimbangkan praktik terbaik berikut:

  • Tetapkan izin yang diperlukan di tingkat Amazon Resource Name (ARN).

  • Selalu berikan izin hak istimewa paling sedikit untuk kebijakan IAM. Untuk informasi selengkapnya, lihat Praktik terbaik keamanan di IAM dalam dokumentasi IAM.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat variabel lingkungan.

Salin variabel lingkungan berikut ke editor teks, lalu ganti <placeholder> nilai dalam contoh berikut dengan nilai sumber daya Anda:

bucket=<your_bucket_name> account=<your_account_number> region=<your_region_code>
catatan

Anda akan membuat referensi ke bucket Amazon S3 Anda, Akun AWS, dan Wilayah AWS yang lebih baru.

Untuk menentukan variabel lingkungan, buka CloudShell konsol, lalu salin dan tempel variabel lingkungan Anda yang diperbarui ke baris perintah.

catatan

Anda harus mengulangi langkah ini setiap kali CloudShell sesi dimulai ulang.

AWS Umum

Buat folder yang berfungsi.

Untuk menyederhanakan proses pembersihan sumber daya nanti, buat folder kerja CloudShell dengan menjalankan perintah berikut:

mkdir workdir; cd workdir
catatan

Anda harus mengubah direktori ke direktori kerja (workdir) setiap kali Anda kehilangan koneksi ke CloudShell sesi Anda.

AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat kebijakan kepercayaan untuk fungsi Lambda.

Konverter EBCDIC berjalan dalam fungsi Lambda. Fungsi tersebut harus memiliki peran IAM. Sebelum Anda membuat peran IAM, Anda harus menentukan dokumen kebijakan kepercayaan yang memungkinkan sumber daya untuk mengambil kebijakan tersebut.

Dari folder CloudShell kerja, buat dokumen kebijakan dengan menjalankan perintah berikut:

E2ATrustPol=$(cat <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF ) printf "$E2ATrustPol" > E2ATrustPol.json
AWS Umum

Buat peran IAM untuk konversi Lambda.

Untuk membuat peran IAM, jalankan AWS CLI perintah berikut dari folder CloudShell kerja:

aws iam create-role --role-name E2AConvLambdaRole --assume-role-policy-document file://E2ATrustPol.json
AWS Umum

Buat dokumen kebijakan IAM untuk fungsi Lambda.

Fungsi Lambda harus memiliki akses baca-tulis ke bucket Amazon S3 dan izin tulis untuk Amazon Log. CloudWatch

Untuk membuat kebijakan IAM, jalankan perintah berikut dari folder CloudShell kerja:

E2APolicy=$(cat <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "Logs", "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:*:*:log-group:*", "arn:aws:logs:*:*:log-group:*:log-stream:*" ] }, { "Sid": "S3", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::%s/*", "arn:aws:s3:::%s" ] } ] } EOF ) printf "$E2APolicy" "$bucket" "$bucket" > E2AConvLambdaPolicy.json
AWS Umum

Lampirkan dokumen kebijakan IAM ke peran IAM.

Untuk melampirkan kebijakan IAM ke peran IAM, masukkan perintah berikut dari folder CloudShell kerja Anda:

aws iam put-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy --policy-document file://E2AConvLambdaPolicy.json
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Unduh kode sumber konversi EBCDIC.

Dari folder CloudShell kerja, jalankan perintah berikut untuk mengunduh kode mainframe-data-utilities sumber dari GitHub:

git clone https://github.com/aws-samples/mainframe-data-utilities.git mdu
AWS Umum

Buat paket ZIP.

Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat paket ZIP yang membuat fungsi Lambda untuk konversi EBCDIC:

cd mdu; zip ../mdu.zip *.py; cd ..
AWS Umum

Buat fungsi Lambda.

Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat fungsi Lambda untuk konversi EBCDIC:

aws lambda create-function \ --function-name E2A \ --runtime python3.9 \ --zip-file fileb://mdu.zip \ --handler extract_ebcdic_to_ascii.lambda_handler \ --role arn:aws:iam::$account:role/E2AConvLambdaRole \ --timeout 10 \ --environment "Variables={layout=$bucket/layout/}"
catatan

 Tata letak variabel lingkungan memberi tahu fungsi Lambda tempat metadata JSON berada.

AWS Umum

Buat kebijakan berbasis sumber daya untuk fungsi Lambda.

Dari folder CloudShell kerja, masukkan perintah berikut untuk mengizinkan pemberitahuan peristiwa Amazon S3 Anda memicu fungsi Lambda untuk konversi EBCDIC:

aws lambda add-permission \ --function-name E2A \ --action lambda:InvokeFunction \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::$bucket \ --source-account $account \ --statement-id 1
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Buat dokumen konfigurasi untuk pemberitahuan acara Amazon S3.

Pemberitahuan peristiwa Amazon S3 memulai fungsi Lambda konversi EBCDIC saat file ditempatkan di folder input.

Dari folder CloudShell kerja, jalankan perintah berikut untuk membuat dokumen JSON untuk pemberitahuan acara Amazon S3:

S3E2AEvent=$(cat <<EOF { "LambdaFunctionConfigurations": [ { "Id": "E2A", "LambdaFunctionArn": "arn:aws:lambda:%s:%s:function:E2A", "Events": [ "s3:ObjectCreated:Put" ], "Filter": { "Key": { "FilterRules": [ { "Name": "prefix", "Value": "input/" } ] } } } ] } EOF ) printf "$S3E2AEvent" "$region" "$account" > S3E2AEvent.json
AWS Umum

Buat notifikasi acara Amazon S3.

Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat pemberitahuan acara Amazon S3:

aws s3api put-bucket-notification-configuration --bucket $bucket --notification-configuration file://S3E2AEvent.json
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Mengurai copybook COBOL.

Dari folder CloudShell kerja, masukkan perintah berikut untuk mengurai contoh copybook COBOL ke dalam file JSON (yang mendefinisikan cara membaca dan mengiris file data dengan benar):

python3 mdu/parse_copybook_to_json.py \ -copybook mdu/LegacyReference/COBKS05.cpy \ -output CLIENT.json \ -output-s3key CLIENT.ASCII.txt \ -output-s3bkt $bucket \ -output-type s3 \ -print 25
AWS Umum

Tambahkan aturan transformasi.

File data sampel dan copybook COBOL yang sesuai adalah file multi-tata letak. Ini berarti bahwa konversi harus mengiris data berdasarkan aturan tertentu. Dalam hal ini, byte pada posisi 3 dan 4 di setiap baris menentukan tata letak.

Dari folder CloudShell kerja, edit CLIENT.json file dan ubah konten dari "transf-rule": [], yang berikut:

"transf-rule": [ { "offset": 4, "size": 2, "hex": "0002", "transf": "transf1" }, { "offset": 4, "size": 2, "hex": "0000", "transf": "transf2" } ],
AWS Umum, IBM Mainframe, Cobol

Unggah metadata JSON ke bucket Amazon S3.

Dari folder CloudShell kerja, masukkan AWS CLI perintah berikut untuk mengunggah metadata JSON ke bucket Amazon S3 Anda:

aws s3 cp CLIENT.json s3://$bucket/layout/CLIENT.json
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Kirim file EBCDIC ke bucket Amazon S3.

Dari folder CloudShell kerja, masukkan perintah berikut untuk mengirim file EBCDIC ke bucket Amazon S3:

aws s3 cp mdu/sample-data/CLIENT.EBCDIC.txt s3://$bucket/input/
catatan

 Kami menyarankan Anda mengatur folder yang berbeda untuk file input (EBCDIC) dan output (ASCII) agar tidak memanggil fungsi konversi Lambda lagi saat file ASCII diunggah ke bucket Amazon S3.

AWS Umum

Periksa outputnya.

Dari folder CloudShell kerja, masukkan perintah berikut untuk memeriksa apakah file ASCII dihasilkan di bucket Amazon S3 Anda:

aws s3 ls s3://$bucket/
catatan

 Konversi data dapat memakan waktu beberapa detik untuk terjadi. Kami menyarankan Anda memeriksa file ASCII beberapa kali.

Setelah file ASCII tersedia, masukkan perintah berikut untuk melihat konten file yang dikonversi di bucket Amazon S3. Sesuai kebutuhan, Anda dapat mengunduhnya atau menggunakannya langsung dari bucket Amazon S3:

aws s3 cp s3://$bucket/CLIENT.ASCII.txt - | head

Periksa konten file ASCII:

0|0|220| 1|1|HERBERT MOHAMED|1958-08-31|BACHELOR|0010000.00| 1|2|36|THE ROE AVENUE| 2|1|JAYLEN GEORGE|1969-05-29|ELEMENTARY|0020000.00| 2|2|365|HEATHFIELD ESPLANADE| 3|1|MIKAEEL WEBER|1982-02-17|MASTER|0030000.00| 3|2|4555|MORRISON STRAND| 4|1|APRIL BARRERA|1967-01-12|DOCTOR|0030000.00| 4|2|1311|MARMION PARK| 5|1|ALEEZA PLANT|1985-03-01|BACHELOR|0008000.00|
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

(Opsional) Siapkan variabel dan folder.

Jika Anda kehilangan koneksi dengan CloudShell, sambungkan kembali dan kemudian masukkan perintah berikut untuk mengubah direktori ke folder kerja:

cd workdir

Pastikan bahwa variabel lingkungan didefinisikan:

bucket=<your_bucket_name> account=<your_account_number> region=<your_region_code>
AWS Umum

Hapus konfigurasi notifikasi untuk bucket.

Dari folder CloudShell kerja, jalankan perintah berikut untuk menghapus konfigurasi pemberitahuan acara Amazon S3:

aws s3api put-bucket-notification-configuration \ --bucket=$bucket \ --notification-configuration="{}"
AWS Umum

Hapus fungsi Lambda.

Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus fungsi Lambda untuk konverter EBCDIC:

aws lambda delete-function \ --function-name E2A
AWS Umum

Hapus peran dan kebijakan IAM.

Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus peran dan kebijakan konverter EBCDIC:

aws iam delete-role-policy \ --role-name E2AConvLambdaRole \ --policy-name E2AConvLambdaPolicy aws iam delete-role \ --role-name E2AConvLambdaRole
AWS Umum

Hapus file yang dihasilkan di bucket Amazon S3.

Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus file yang dihasilkan di bucket Amazon S3:

aws s3 rm s3://$bucket/layout --recursive aws s3 rm s3://$bucket/input --recursive aws s3 rm s3://$bucket/CLIENT.ASCII.txt
AWS Umum

Hapus folder kerja.

Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus workdir dan isinya:

cd ..; rm -Rf workdir
AWS Umum

Sumber daya terkait