使用 Python 在 AWS 上將 EBCDIC 資料轉換並解壓縮為 ASCII - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Python 在 AWS 上將 EBCDIC 資料轉換並解壓縮為 ASCII

創建者:路易斯古斯塔沃丹達斯 (AWS)

程式碼儲存庫:大型主機資料公用程式

環境:PoC 或試點

資料來源:大型主機 EBCDIC 資料

目標:分散式或雲端現代化 ASCII 資料

R 類型:重新平台

工作負載:IBM

技術:大型主機、資料庫、儲存與備份、現代化

AWS 服務:Amazon EBS; Amazon EC2

Summary

由於大型主機通常託管關鍵業務資料,因此將資料移轉到 Amazon Web Services (AWS) 雲端或其他美國標準資訊交換代碼 (ASCII) 環境時,資料現代化是最重要的任務之一。在大型主機上,資料通常會以延伸的二進位編碼十進位交換碼 (EBCDIC) 格式編碼。匯出資料庫、虛擬儲存存取方法 (VSAM) 或平面檔案通常會產生封裝的二進位 EBCDIC 檔案,而這些檔案移轉較為複雜。最常用的資料庫遷移解決方案是變更資料擷取 (CDC),在大多數情況下,它會自動轉換資料編碼。不過,CDC 機制可能不適用於這些資料庫、VSAM 或平面檔案。對於這些文件,需要一種替代方法來實現數據現代化。

此模式描述了如何通過將 EBCDIC 數據轉換為 ASCII 格式來實現現代化。轉換後,您可以將數據加載到分佈式數據庫中,或者讓雲中的應用程序直接處理數據。該模式使用存mainframe-data-utilities GitHub 儲庫中的轉換腳本和示例文件。

先決條件和限制

先決條件

限制

  • 不支援 COBOL 程式內定義的檔案配置。它們必須單獨提供。

產品版本

  • Python 版本 3.8 或更新版本

架構

源, 技術, 堆棧

  • 在大型主機上的 EBCDIC 數據

  • 聯邦字帖

目標技術堆疊

  • 虛擬私有雲 (VPC) 中的亞馬遜彈性運算雲 (Amazon EC2) 執行個體

  • Amazon Elastic Block Store (Amazon EBS)

  • Python 及其所需的軟件包, JavaScript 對象符號(JSON),系統和日期時間

  • ASCII 平面檔案可供現代應用程式讀取或載入關聯式資料庫表格

目標架構

使用 Python 指令碼和 COBOL 字筆本,在 EC2 執行個體上將資料轉換為 ASCII 碼

架構圖顯示了在 EC2 實例上將 EBCDIC 文件轉換為 ASCII 文件的過程:

  1. 使用 parse_copybook_to_json.py 指令碼,您可以將 COBOL 字帖轉換為 JSON 檔案。

  2. 您可以使用 JSON 檔案和 extract_ebcdic_to_ascii.py 指令碼,將 EBCDIC 資料轉換為 ASCII 檔案。

自動化和規模

完成第一次手動檔案轉換所需的資源之後,您就可以自動化檔案轉換。此模式不包含自動化指示。有多種方法可以自動化轉換。以下是一種可能方法的概述:

  1. 將 AWS Command Line Interface (AWS CLI) (AWS CLI) 和 Python 指令碼命令封裝到殼層指令碼中。

  2. 建立 AWS Lambda 函數,以非同步方式將殼層指令碼任務提交至 EC2 執行個體。如需詳細資訊,請參閱使用 AWS Lambda 排定安全殼層任務。

  3. 建立 Amazon Simple Storage Service (Amazon S3) 觸發程序,以便在每次上傳舊版檔案時呼叫 Lambda 函數。如需詳細資訊,請參閱使用 Amazon S3 觸發器叫用 Lambda 函數

工具

AWS 服務

其他工具

  • GitHub是一種代碼託管服務,提供協作工具和版本控制。

  • Python 是一種高級別的編程語言。

代碼存儲庫

此模式的代碼可在mainframe-data-utilities GitHub 存儲庫中找到。

史诗

任務描述所需技能

啟動 EC2 執行個體。

EC2 執行個體必須具有輸出網際網路存取權。這可讓執行個體存取上可用的 Python 原始程式碼 GitHub。若要建立執行個體:

  1. 在以下位置打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2

  2. 啟動一個 EC2 執行個體。使用公用 IP 位址,並允許透過連接埠 22 進行輸入存取。請確定執行個體的儲存大小至少是 EBCDIC 資料檔案大小的兩倍。如需指示,請參閱 Amazon EC2 文件

一般 AWS

安裝 Git。

  1. 使用安全殼層 (SSH) 用戶端,連接到剛啟動的 EC2 執行個體。如需詳細資訊,請參閱 Connect 到 Linux 執行個體

  2. 在 Amazon EC2 主控台中,執行下列命令。這會在 EC2 執行個體上安裝 Git。

    sudo yum install git
  3. 運行以下命令並確認 Git 已成功安裝。

    git --version
一般 AWS

安裝 Python。

  1. 在 Amazon EC2 主控台中,執行下列命令。這會在 EC2 執行個體上安裝 Python。

    sudo yum install python3
  2. 在 Amazon EC2 主控台中,執行下列命令。這會在 EC2 執行個體上安裝 Pipp3。

    sudo yum install python3-pip
  3. 在 Amazon EC2 主控台中,執行下列命令。這會在 EC2 執行個體上安裝適用於 Python 的 AWS 開發套件 (Boto3)。

    sudo pip3 install boto3
  4. 在 Amazon EC2 主控台中,執行下列命令,AWS 區域的程式碼在哪裡<us-east-1>。如需區域代碼的完整清單,請參閱 Amazon EC2 文件中的可用區域

    export AWS_DEFAULT_REGION=<us-east-1>
一般 AWS

克隆存 GitHub 儲庫。

  1. 在 Amazon EC2 主控台中,執行下列命令。這會複製mainframe-data-utilities儲存庫, GitHub 並開啟預設的複製位置,即home資料夾。

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. 在資home料夾中,確認資mainframe-data-utilities料夾存在。

一般 AWS、 GitHub
任務描述所需技能

將 COBOL 字帖解析為 JSON 佈局文件。

mainframe-data-utilities資料夾內,執行 parse_copybook_to_json.py 指令碼。該自動化模塊從 COBOL 字帖讀取文件佈局並創建一個 JSON 文件。JSON 文件包含解釋和從源文件中提取數據所需的信息。這將創建從 COBOL 字帖的 JSON 元數據。

下面的命令 COBOL 字帖轉換為 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

該腳本打印接收到的參數。

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

如需有關引數的詳細資訊,請參閱 GitHub 存放庫中的 README 檔案

一般 AWS

檢查 JSON 版面配置檔案。

  1. 導覽至 parse_copybook_to_json.py 指令碼中定義的輸出路徑。

  2. 檢查範例資料/cobpack 2-清單 .json 檔案的建立時間,以確認您已選取適當的 JSON 版面配置檔案。

  3. 檢查 JSON 檔案,並確認內容與下列內容類似。

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

JSON 佈局文件最重要的屬性是:

  • input— 包含要轉換的 EBCDIC 檔案的路徑

  • output— 定義要產生 ASCII 檔案的路徑

  • lrecl— 以位元組為單位指定邏輯記錄長度的大小

  • transf-列出所有字段及其大小(以字節為單位)

如需 JSON 版面配置檔案的詳細資訊,請參閱 GitHub 存放庫中的 README 檔案

一般 AWS、JSON

建立 ASCII 檔案。

執行 extract_ebcdic_to_ascii.py 指令碼,該指令碼包含在複製的 GitHub 儲存庫中。此指令碼會讀取 EBCDIC 檔案,並寫入已轉換且可讀的 ASCII 檔案。

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

當腳本處理 EBCDIC 數據時,它會為每批 10,000 條記錄打印一條消息。請參閱以下範例。

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

有關如何變更列印頻率的詳細資訊,請參閱 GitHub 存放庫中的 README 檔案

一般 AWS

檢查 ASCII 檔案。

  1. 檢查 extract-ebcdic-to-ascii/COBPack.ascii.txt 檔案的建立時間,以確認該檔案是否最近建立。

  2. 在 Amazon EC2 控制台中,輸入以下命令。這將打開 ASCII 文件的第一條記錄。

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. 檢查第一條記錄的內容。由於 EBCDIC 文件通常是二進制文件,因此它們沒有回車和換行符(CRLF)特殊字符。extract_ebcdic_to_ascii.py 指令碼會新增直線字元做為資料行分隔符號,這是在指令碼參數中定義的。

如果您使用提供的範例 EBCDIC 檔案,則以下是 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

評估 EBCDIC 檔案。

在 Amazon EC2 控制台中,輸入以下命令。這會開啟 EBCDIC 檔案的第一筆記錄。

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

如果您使用範例 EBCDIC 檔案,則結果如下。

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

要評估源文件和目標文件之間的等價性,需要有關 EBCDIC 的全面知識。例如,範例 EBCDIC 檔案的第一個字元是連字號 ()。-在 EBCDIC 文件的十六進制表示法中,此字符由 60 ASCII 文件的十六進制表示法表示,此字符由表示。2D如需電子碼轉換為 ASCII 的轉換表格,請參閱 IBM 網站上的 EBCDIC 轉換為 ASCII 碼。

一般 AWS, Linux, 電子證券

相關資源

參考

教學課程