

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
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda"></a>

*Luis Gustavo Dantas, Amazon Web Services*

## Ringkasan
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-summary"></a>

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
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Bucket Amazon S3
+ Pengguna AWS Identity and Access Management (IAM) dengan izin administratif
+ AWS CloudShell
+ [Python 3.8.0](https://www.python.org/downloads/release/python-380/) atau yang lebih baru
+ File datar yang dikodekan dalam EBCDIC dan struktur data yang sesuai dalam copybook bahasa berorientasi bisnis umum (COBOL)

**catatan**  
[Pola ini menggunakan contoh file EBCDIC ([Client.ebcdic.txt) dan copybook COBOL yang sesuai (COBKS05.cpy](https://github.com/aws-samples/mainframe-data-utilities/blob/main/sample-data/CLIENT.EBCDIC.txt)).](https://github.com/aws-samples/mainframe-data-utilities/blob/main/LegacyReference/COBKS05.cpy) Kedua file tersedia di GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)repositori.

**Batasan**
+ Copybook COBOL biasanya memiliki beberapa definisi tata letak. [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)Proyek 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](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html).

## Arsitektur
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-architecture"></a>

**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](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97ab4129-2639-4733-86cb-962d91526df4/images/3ca7ca44-373a-434f-8c40-09e7c2abf5ec.png)


Diagram menunjukkan alur kerja berikut:

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

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

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

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

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

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

1. Lambda mencatat status proses di Amazon. CloudWatch

1. 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
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-tools"></a>

**Layanan AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)adalah 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah 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**
+ [GitHub](https://github.com/)adalah layanan hosting kode yang menyediakan alat kolaborasi dan kontrol versi.
+ [Python adalah bahasa](https://www.python.org/) pemrograman tingkat tinggi.

**Kode**

Kode untuk pola ini tersedia di GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)repositori.

## Praktik terbaik
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-best-practices"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-epics"></a>

### Buat variabel lingkungan dan folder kerja
<a name="create-environment-variables-and-a-working-folder"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat variabel lingkungan. | Salin variabel lingkungan berikut ke editor teks, lalu ganti `<placeholder>` nilai dalam contoh berikut dengan nilai sumber daya Anda:<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre>Anda akan membuat referensi ke bucket Amazon S3 Anda, Akun AWS, dan Wilayah AWS yang lebih baru.<br />Untuk menentukan variabel lingkungan, buka [CloudShell konsol](https://console.aws.amazon.com/cloudshell/), lalu salin dan tempel variabel lingkungan Anda yang diperbarui ke baris perintah.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:<pre>mkdir workdir; cd workdir</pre>Anda harus mengubah direktori ke direktori kerja (`workdir`) setiap kali Anda kehilangan koneksi ke CloudShell sesi Anda. | AWS Umum | 

### Mendefinisikan peran dan kebijakan IAM
<a name="define-an-iam-role-and-policy"></a>


| Tugas | Deskripsi | Keterampilan 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.<br />Dari folder CloudShell kerja, buat dokumen kebijakan dengan menjalankan perintah berikut:<pre>E2ATrustPol=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "Service": "lambda.amazonaws.com"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2ATrustPol" > E2ATrustPol.json</pre> | AWS Umum | 
| Buat peran IAM untuk konversi Lambda. | Untuk membuat peran IAM, jalankan AWS CLI perintah berikut dari folder CloudShell kerja:<pre>aws iam create-role --role-name E2AConvLambdaRole --assume-role-policy-document file://E2ATrustPol.json</pre> | 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 <br />Untuk membuat kebijakan IAM, jalankan perintah berikut dari folder CloudShell kerja:<pre>E2APolicy=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Logs",<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:PutLogEvents",<br />                "logs:CreateLogStream",<br />                "logs:CreateLogGroup"<br />            ],<br />            "Resource": [<br />                "arn:aws:logs:*:*:log-group:*",<br />                "arn:aws:logs:*:*:log-group:*:log-stream:*"<br />            ]<br />        },<br />        {<br />            "Sid": "S3",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:PutObject",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::%s/*",<br />                "arn:aws:s3:::%s"<br />            ]<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2APolicy" "$bucket" "$bucket" > E2AConvLambdaPolicy.json</pre> | AWS Umum | 
| Lampirkan dokumen kebijakan IAM ke peran IAM. | Untuk melampirkan kebijakan IAM ke peran IAM, masukkan perintah berikut dari folder CloudShell kerja Anda:<pre>aws iam put-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy --policy-document file://E2AConvLambdaPolicy.json</pre> | AWS Umum | 

### Buat fungsi Lambda untuk konversi EBCDIC
<a name="create-the-lam-function-for-ebcdic-conversion"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh kode sumber konversi EBCDIC. | Dari folder CloudShell kerja, jalankan perintah berikut untuk mengunduh kode mainframe-data-utilities sumber dari GitHub:<pre>git clone https://github.com/aws-samples/mainframe-data-utilities.git mdu</pre> | AWS Umum | 
| Buat paket ZIP. | Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat paket ZIP yang membuat fungsi Lambda untuk konversi EBCDIC:<pre>cd mdu; zip ../mdu.zip *.py; cd ..</pre> | AWS Umum | 
| Buat fungsi Lambda. | Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat fungsi Lambda untuk konversi EBCDIC:<pre>aws lambda create-function \<br />--function-name E2A \<br />--runtime python3.9 \<br />--zip-file fileb://mdu.zip \<br />--handler extract_ebcdic_to_ascii.lambda_handler \<br />--role arn:aws:iam::$account:role/E2AConvLambdaRole \<br />--timeout 10 \<br />--environment "Variables={layout=$bucket/layout/}"</pre> 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:<pre>aws lambda add-permission \<br />--function-name E2A \<br />--action lambda:InvokeFunction \<br />--principal s3.amazonaws.com \<br />--source-arn arn:aws:s3:::$bucket \<br />--source-account $account \<br />--statement-id 1</pre> | AWS Umum | 

### Buat notifikasi acara Amazon S3
<a name="create-the-s3-event-notification"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat dokumen konfigurasi untuk notifikasi acara Amazon S3. | Pemberitahuan peristiwa Amazon S3 memulai fungsi Lambda konversi EBCDIC saat file ditempatkan di folder input.<br />Dari folder CloudShell kerja, jalankan perintah berikut untuk membuat dokumen JSON untuk pemberitahuan acara Amazon S3:<pre>S3E2AEvent=$(cat <<EOF<br />{<br />"LambdaFunctionConfigurations": [<br />    {<br />      "Id": "E2A",<br />      "LambdaFunctionArn": "arn:aws:lambda:%s:%s:function:E2A",<br />      "Events": [ "s3:ObjectCreated:Put" ],<br />      "Filter": {<br />        "Key": {<br />          "FilterRules": [<br />            {<br />              "Name": "prefix",<br />              "Value": "input/"<br />            }<br />          ]<br />        }<br />      }<br />    }<br />  ]<br />}<br />EOF<br />)<br />printf "$S3E2AEvent" "$region" "$account" > S3E2AEvent.json</pre> | AWS Umum | 
| Buat notifikasi acara Amazon S3. | Dari folder CloudShell kerja, masukkan perintah berikut untuk membuat pemberitahuan acara Amazon S3:<pre>aws s3api put-bucket-notification-configuration --bucket $bucket --notification-configuration file://S3E2AEvent.json</pre> | AWS Umum | 

### Buat dan unggah metadata JSON
<a name="create-and-upload-the-json-metadata"></a>


| Tugas | Deskripsi | Keterampilan 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):<pre>python3       mdu/parse_copybook_to_json.py \<br />-copybook     mdu/LegacyReference/COBKS05.cpy \<br />-output       CLIENT.json \<br />-output-s3key CLIENT.ASCII.txt \<br />-output-s3bkt $bucket \<br />-output-type  s3 \<br />-print        25</pre> | 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.<br />Dari folder CloudShell kerja, edit `CLIENT.json` file dan ubah konten dari `"transf-rule": [],` yang berikut:<pre>"transf-rule": [<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0002",<br />"transf": "transf1"<br />},<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0000",<br />"transf": "transf2"<br />}<br />],</pre> | 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:<pre>aws s3 cp CLIENT.json s3://$bucket/layout/CLIENT.json</pre> | AWS Umum | 

### Konversikan file EBCDIC
<a name="convert-the-ebcdic-file"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kirim file EBCDIC ke bucket Amazon S3. | Dari folder CloudShell kerja, masukkan perintah berikut untuk mengirim file EBCDIC ke bucket Amazon S3:<pre>aws s3 cp mdu/sample-data/CLIENT.EBCDIC.txt s3://$bucket/input/</pre> 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:<pre>aws s3 ls s3://$bucket/</pre> Konversi data dapat memakan waktu beberapa detik untuk terjadi. Kami menyarankan Anda memeriksa file ASCII beberapa kali.<br />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:<pre>aws s3 cp s3://$bucket/CLIENT.ASCII.txt - | head</pre><br />Periksa konten file ASCII:<pre>0|0|220|<br />1|1|HERBERT MOHAMED|1958-08-31|BACHELOR|0010000.00|<br />1|2|36|THE ROE AVENUE|<br />2|1|JAYLEN GEORGE|1969-05-29|ELEMENTARY|0020000.00|<br />2|2|365|HEATHFIELD ESPLANADE|<br />3|1|MIKAEEL WEBER|1982-02-17|MASTER|0030000.00|<br />3|2|4555|MORRISON STRAND|<br />4|1|APRIL BARRERA|1967-01-12|DOCTOR|0030000.00|<br />4|2|1311|MARMION PARK|<br />5|1|ALEEZA PLANT|1985-03-01|BACHELOR|0008000.00|</pre> | AWS Umum | 

### Bersihkan lingkungan
<a name="clean-the-environment"></a>


| Tugas | Deskripsi | Keterampilan 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:<pre>cd workdir</pre><br />Pastikan bahwa variabel lingkungan didefinisikan:<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre> | AWS Umum | 
| Hapus konfigurasi notifikasi untuk bucket. | Dari folder CloudShell kerja, jalankan perintah berikut untuk menghapus konfigurasi pemberitahuan acara Amazon S3:<pre>aws s3api put-bucket-notification-configuration \<br />--bucket=$bucket \<br />--notification-configuration="{}"</pre> | AWS Umum | 
| Hapus fungsi Lambda. | Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus fungsi Lambda untuk konverter EBCDIC:<pre>aws lambda delete-function \<br />--function-name E2A</pre> | AWS Umum | 
| Hapus peran dan kebijakan IAM. | Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus peran dan kebijakan konverter EBCDIC:<pre>aws iam delete-role-policy \<br />--role-name E2AConvLambdaRole \<br />--policy-name E2AConvLambdaPolicy<br /><br />aws iam delete-role \<br />--role-name E2AConvLambdaRole</pre> | 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:<pre>aws s3 rm s3://$bucket/layout --recursive<br />aws s3 rm s3://$bucket/input --recursive<br />aws s3 rm s3://$bucket/CLIENT.ASCII.txt</pre> | AWS Umum | 
| Hapus folder kerja. | Dari folder CloudShell kerja, masukkan perintah berikut untuk menghapus `workdir` dan isinya:<pre>cd ..; rm -Rf workdir</pre> | AWS Umum | 

## Sumber daya terkait
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-resources"></a>
+ [Utilitas Data Mainframe README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) () GitHub
+ [Set karakter EBCDIC (dokumentasi](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set) IBM)
+ [EBCDIC ke ASCII (dokumentasi IBM](https://www.ibm.com/docs/en/iis/11.7.0?topic=tables-ebcdic-ascii))
+ [COBOL](https://www.ibm.com/docs/en/i/7.6.0?topic=languages-cobol) (dokumentasi IBM)
+ [Menggunakan pemicu Amazon S3 untuk menjalankan fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) (dokumentasi)AWS Lambda 