Python を使用して EBCDIC データを AWS 上の ASCII に変換およびアンパックします - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Python を使用して EBCDIC データを AWS 上の ASCII に変換およびアンパックします

作成:ルイス・グスタボ・ダンタス (AWS)

コードリポジトリ:メインフレームデータユーティリティ

環境:PoC またはパイロット

ソース:メインフレーム EBCDIC データ

対象:分散型またはクラウド型の最新化された ASCII データ

Rタイプ:リプラットフォーム

ワークロード: IBM

テクノロジー:メインフレーム、データベース、ストレージとバックアップ、モダナイゼーション

AWS サービス:Amazon EBS; Amazon EC2

[概要]

メインフレームは通常、重要なビジネスデータをホストするため、Amazon Web Services(AWS)クラウドやその他の米国情報交換標準コード(ASCII)環境にデータを移行する場合、データを最新化することが最も重要なタスクの 1 つです。メインフレームでは、データは通常、拡張バイナリコード 10 進数交換コード (EBCDIC) 形式でエンコードされます。データベース、仮想ストレージアクセスメソッド (VSAM)、またはフラットファイルをエクスポートすると、通常、圧縮されたバイナリ EBCDIC ファイルが生成され、移行がより複雑になります。最も一般的に使用されるデータベース移行ソリューションはチェンジデータキャプチャ (CDC) で、ほとんどの場合、データエンコーディングを自動的に変換します。ただし、これらのデータベース、VSAM、またはフラットファイルには CDC メカニズムが使用できない場合があります。これらのファイルについては、データを最新化するための代替アプローチが必要です。

このパターンは、EBCDIC データを ASCII 形式に変換して最新化する方法を説明しています。変換後、データを分散データベースにロードしたり、クラウド内のアプリケーションにデータを直接処理させることができます。このパターンでは、リポジトリ内の変換スクリプトとサンプルファイルを使用します。mainframe-data-utilities GitHub

前提条件と制限

前提条件

制約事項

  • COBOL プログラム内で定義されたファイルレイアウトはサポートされていません。これらは別途利用できるようにする必要があります。

製品バージョン

  • Python バージョン 3.8 以降。

アーキテクチャ

ソーステクノロジースタック

  • メインフレーム上の EBCDIC データ

  • COBOL コピーブック

ターゲットテクノロジースタック

  • 仮想プライベートクラウド (VPC)のAmazon Elastic Compute Cloud (Amazon EC2) インスタンス

  • Amazon Elastic Block Store (Amazon EBS)

  • Python とそれに必要なパッケージ、 JavaScript オブジェクト表記法 (JSON)、システム、および日時

  • 最新のアプリケーションですぐに読み込んだり、リレーショナルデータベーステーブルに読み込んだりできる ASCII フラットファイル

ターゲットアーキテクチャ

Python スクリプトと COBOL コピーブックを使用して EC2 インスタンス上の EBCDIC データを ASCII に変換しました

アーキテクチャ図は、EC2 インスタンスで EBCDIC ファイルを ASCII ファイルに変換するプロセスを示しています。

  1. parse_copybook_to_json.py」スクリプトを使用して、COBOL コピーブックを JSON ファイルに変換します。

  2. JSON ファイルと「extract_ebcdic_to_ascii.py」スクリプトを使用して、EBCDIC データを ASCII ファイルに変換します。

自動化とスケール

最初の手動ファイル変換に必要なリソースが揃ったら、ファイル変換を自動化できます。このパターンには自動化の指示は含まれていません。変換を自動化する方法は複数あります。以下は、考えられるアプローチの概要です。

  1. AWS コマンドラインインターフェイス (AWS CLI) コマンドと Python スクリプトコマンドをシェルスクリプトにカプセル化します。

  2. シェルスクリプトジョブを EC2 インスタンスに非同期的に送信する AWS Lambda 関数を作成します。詳細については、「AWS Lambda を使用した SSH ジョブのスケジュール設定」を参照してください。

  3. レガシーファイルがアップロードされるたびに Lambda 関数を呼び出す Amazon Simple Storage Service (Amazon S3) トリガーを作成します。詳細については、チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出すを参照してください。

ツール

サービス

  • Amazon Elastic Compute Cloud (Amazon EC2)」は、AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。

  • Amazon Elastic Block Store (Amazon EBS) は、 Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで使用するブロックレベルストレージのボリュームを提供します。

  • AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

その他のツール

  • GitHubは、コラボレーションツールとバージョン管理を提供するコードホスティングサービスです。

  • Python」は高水準プログラミング言語です。

コードリポジトリ

このパターンのコードはリポジトリにあります。mainframe-data-utilities GitHub

エピック

タスク説明必要なスキル

EC2 インスタンスを起動します。

EC2 インスタンスにはアウトバウンドのインターネットアクセスが必要です。これにより、インスタンスはで使用可能な Python ソースコードにアクセスできるようになります GitHub。インスタンスを作成するには

  1. https://console.aws.amazon.com/ec2 で Amazon EC2 コンソールを開きます。

  2. EC2 Linux インスタンスを起動します。パブリック IP アドレスを使用し、ポート 22 経由のインバウンドアクセスを許可します。インスタンスのストレージサイズが EBCDIC データファイルのサイズの 2 倍以上であることを確認してください。手順については、Amazon EC2 ドキュメントを参照してください。

AWS 全般

Git をインストールする。

  1. Secure Shell (SSH) クライアントを使用して、起動した EC2 インスタンスに接続します。詳細については、「Linux インスタンスへの接続」を参照してください。

  2. Amazon EC2 コンソールで、次のコマンドを実行します。EC2 インスタンスに Git をインストールします。

    sudo yum install git
  3. 次のコマンドを実行して、Git が正常にインストールされていることを確認します。

    git --version
AWS 全般、Linux

Python をインストールします。

  1. Amazon EC2 コンソールで、次のコマンドを実行します。EC2 インスタンスに Python をインストールします。

    sudo yum install python3
  2. Amazon EC2 コンソールで、次のコマンドを実行します。これにより、EC2 インスタンスに Pip3 がインストールされます。

    sudo yum install python3-pip
  3. Amazon EC2 コンソールで、次のコマンドを実行します。これにより、AWS SDK for Python (Boto3) が EC2 インスタンスにインストールされます。

    sudo pip3 install boto3
  4. Amazon EC2 コンソールで、次のコマンドを実行します。ここで、<us-east-1>は AWS リージョンのコードです。リージョンコードの一覧については、Amazon EC2 ユーザーガイドの「使用可能なリージョン」を参照してください。

    export AWS_DEFAULT_REGION=<us-east-1>
AWS 全般、Linux

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 全般、Linux

JSON レイアウトファイルを調べてください。

  1. parse_copybook_to_json.py」スクリプトで定義されている出力パスに移動します。

  2. sample-data/cobpack2-list.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 レイアウトファイルの詳細については、リポジトリの README ファイルを参照してください。 GitHub

AWS 全般、JSON

ASCII ファイルを作成します。

GitHub クローニングされたリポジトリに含まれている extract_ebcdic_to_ascii.py スクリプトを実行します。このスクリプトは 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

印刷頻度を変更する方法については、リポジトリの README ファイルを参照してください。 GitHub

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 全般、Linux

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 ファイルの 16 進数表記ではこの文字は60で表され、ASCII ファイルの 16 進表記ではこの文字は2Dで表されます。EBCDIC から ASCII への変換表については、IBM ウェブサイトの「EBCDIC から ASCII へ」を参照してください。

AWS 全般、Linux、EBCDIC

関連リソース

リファレンス

チュートリアル