翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda を使用して Amazon S3 のメインフレームファイルを EBCDIC 形式から文字区切りの ASCII 形式に変換します
作成:ルイス・グスタボ・ダンタス (AWS)
概要
このパターンは、メインフレームの EBCDIC (拡張バイナリコード 10 進交換コード) ファイルを文字区切りの ASCII (米国情報交換標準コード) ファイルに自動的に変換する AWS Lambda 関数を起動する方法を示しています。Lambda 関数は、ASCII ファイルが Amazon Simple Storage Service (Amazon S3) バケットにアップロードされた後に実行されます。ファイル変換後、x86 ベースのワークロードで ASCII ファイルを読み取ったり、最新のデータベースにファイルをロードしたりできます。
このパターンで示されているファイル変換方法は、現代の環境で EBCDIC ファイルを扱う際の課題を克服するのに役立ちます。EBCDIC でエンコードされたファイルには、バイナリ形式またはパックド 10 進形式で表されるデータが含まれていることが多く、フィールドは固定長です。最近の x86 ベースのワークロードや分散環境は通常 ASCII でエンコードされたデータを処理し、EBCDIC ファイルを処理できないため、これらの特性は障害となります。
前提条件と制限
前提条件
アクティブな AWS アカウント。
S3 バケット
管理者のアクセス許可を持つ AWS Identity and Access Management (IAM) ユーザー
AWS CloudShell
Python 3.8.0
以降。 EBCDIC でエンコードされたフラットファイルと、それに対応するデータ構造を共通ビジネス指向言語 (COBOL) のコピーブックでエンコードしたもの
注記
このパターンでは、サンプルの EBCDIC ファイル (CLIENT.EBCDIC.txt
制約事項
COBOL コピーブックには通常、複数のレイアウト定義があります。「mainframe-data-utilities
」プロジェクトは、この種のコピーブックを解析することはできますが、データ変換時にどのレイアウトを検討すべきかを推測することはできません。これは、コピーブックにはこのロジックがないからです (代わりに COBOL プログラムに残っています)。そのため、コピーブックを解析した後は、レイアウトを選択するルールを手動で設定する必要があります。 このパターンには「Lambda クォータ」が適用されます。
アーキテクチャ
ソーステクノロジースタック
IBM z/OS、IBM i、およびその他の EBCDIC システム
EBCDIC でエンコードされたデータを含むシーケンシャル・ファイル (IBM Db2 アンロードなど)
COBOL コピーブック
ターゲットテクノロジースタック
Amazon S3
Amazon S3イベント通知
IAM
Lambda function
Python 3.8 以降
メインフレームデータユーティリティ
JSON メタデータ
文字区切りの ASCII ファイル
ターゲットアーキテクチャ
次の図は、メインフレームの EBCDIC ファイルを ASCII ファイルに変換するアーキテクチャを示しています。

この図表は、次のワークフローを示しています:
ユーザーはコピーブックパーサースクリプトを実行して COBOL コピーブックを JSON ファイルに変換します。
ユーザーは JSON メタデータを S3 バケットにアップロードします。これにより、データ変換 Lambda 関数でメタデータを読み取ることができます。
ユーザーまたは自動プロセスが、EBCDIC ファイルを S3 バケットにアップロードします。
S3 通知イベントは、データ変換 Lambda 関数をトリガーします。
AWS は Lambda 関数の S3 バケットの読み取り/書き込み権限を検証します。
Lambda は S3 バケットからファイルを読み取り、ファイルを EBCDIC から ASCII にローカルに変換します。
Lambda はプロセスのステータスを Amazon CloudWatch に記録します。
Lambda は、ASCII ファイルを Amazon S3 に書き込みます。
注記
コピーブックパーサースクリプトは、メタデータを JSON に変換し、そのデータを S3 バケットにアップロードした後、1 回だけ実行されます。最初の変換後、S3 バケットにアップロードされた同じ JSON ファイルを使用する EBCDIC ファイルはすべて、同じメタデータを使用します。
ツール
AWS ツール
Amazon CloudWatch は、AWS のリソースや、AWS で実行されるアプリケーションをリアルタイムに監視します。
Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。
「AWS CloudShell」はブラウザベースのシェルで、AWS コマンドラインインターフェイス (AWS CLI) とプリインストールされたさまざまな開発ツールを使用して、AWS のサービスを管理できます。
「AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、自動的にスケーリングします。
その他のツール
コード
このパターンのコードは、GitHub 内の「mainframe-data-utilities
ベストプラクティス
以下のベストプラクティスを考慮します。
Amazon リソースネーム (ARN) レベルで設定します。
IAM ポリシーには、常に最小権限のアクセス権限を付与してください。詳細については、IAM ドキュメントの「IAM のセキュリティのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
環境変数を作成します。 | 以下の環境変数をテキストエディターにコピーし、<placeholder>次の例の値を自分のリソースの値に置き換えます。
注記S3 バケット、AWS アカウント、AWS リージョンへの参照は後で作成します。 環境変数を定義するには、「CloudShell コンソール 注記CloudShell セッションが再起動するたびに、このステップを繰り返す必要があります。 | AWS 全般 |
作業フォルダを作成します。 | 後でリソースをクリーンアップするプロセスを簡略化するには、次のコマンドを実行して CloudShell に作業フォルダを作成します。
注記CloudShell セッションへの接続が失われるたびに、ディレクトリを作業ディレクトリ ( | AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
トリガーのための Lambda 関数を作成します。 | Lambda 関数で EBCDIC コンバーターが実行されます。関数には IAM ロールが必要です。IAM ロールを作成する前に、リソースがそのポリシーを引き継ぐことを可能にする信頼ポリシードキュメントを定義する必要があります。 CloudShell 作業フォルダから、次のコマンドを実行してポリシードキュメントを作成します。
| AWS 全般 |
Lambda 変換用に IAM ロールを作成する | IAM ロールを作成するには、CloudShell 作業フォルダから以下の AWS CLI コマンドを実行します。
| AWS 全般 |
Lambda 関数の IAM ポリシードキュメントを作成します。 | Lambda 関数には S3 バケットへの読み取り/書き込みアクセス権限と Amazon CloudWatch Logs の書き込み権限が必要です。 IAM ポリシーを作成するには、CloudShell 作業フォルダから次のコマンドを実行します。
| AWS 全般 |
IAM ポリシーを IAM ロールにアタッチします。 | IAM ポリシーを IAM ロールにアタッチするには、CloudShell 作業フォルダから次のコマンドを実行します。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
EBCDIC 変換ソースコードをダウンロードしてください。 | CloudShell 作業フォルダから次のコマンドを実行して、メインフレームデータユーティリティのソースコードを GitHub からダウンロードします。
| AWS 全般 |
ZIP パッケージを作成します。 | CloudShell 作業フォルダから次のコマンドを実行して、EBCDIC 変換用の Lambda 関数を作成する ZIP パッケージを作成します。
| AWS 全般 |
Lambda 関数を作成します。 | CloudShell 作業フォルダから次のコマンドを実行して、EBCDIC 変換用の Lambda 関数を作成します。
注記環境変数レイアウトは、JSON メタデータが存在する場所を Lambda 関数に指示します。 | AWS 全般 |
Lambda 関数のリソースベースのポリシーを作成します。 | CloudShell 作業フォルダから次のコマンドを実行して、Amazon S3 イベント通知が EBCDIC 変換のための Lambda 関数をトリガーできるようにします。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
Amazon S3 イベント通知の設定ドキュメントを作成します。 | Amazon S3 イベント通知は、ファイルが入力フォルダに配置されると EBCDIC 変換 Lambda 関数を開始します。 CloudShell 作業フォルダから、次のコマンドを実行して Amazon S3 イベント通知用の JSON ドキュメントを作成します。
| AWS 全般 |
Amazon S3イベント通知を作成します。 | CloudShell 作業フォルダから次のコマンドを実行して、Amazon S3 イベント通知を作成します。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
COBOL コピーブックを解析します。 | CloudShell 作業フォルダーから以下のコマンドを実行して、サンプル COBOL コピーブックを JSON ファイルに解析します (これにより、データファイルを正しく読み取り、スライスする方法が定義される)。
| AWS 全般 |
変換ルールを追加します。 | サンプルデータファイルとそれに対応する COBOL コピーブックはマルチレイアウトファイルです。つまり、変換では特定のルールに基づいてデータをスライスする必要があります。この場合、各行の 3 番目と 4 番目にあるバイトがレイアウトを定義します。 CloudShell 作業フォルダから
| AWS 全般、IBMメインフレーム、コボル |
JSON メタデータを S3 バケットにアップロードします。 | CloudShell 作業フォルダから次の AWS CLI コマンドを実行して JSON メタデータを S3 バケットにアップロードします。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
EBCDIC ファイルを S3 バケットに送信します。 | CloudShell 作業フォルダから次のコマンドを実行して EBCDIC ファイルを S3 バケットに送信します。
注記ASCII ファイルが S3 バケットにアップロードされたときに Lambda 変換関数が再度呼び出されないように、入力 (EBCDIC) ファイルと出力 (ASCII) ファイルに異なるフォルダを設定することをお勧めします。 | AWS 全般 |
出力を確認してください。 | CloudShell 作業フォルダから次のコマンドを実行して、ASCII ファイルが S3 バケットに生成されているかどうかを確認します。
注記データ変換には数秒かかる場合があります。ASCII ファイルを確認することをお勧めします。 ASCII ファイルが使用可能になったら、次のコマンドを実行して S3 バケットから現在のフォルダーにファイルをダウンロードします。
ASCII ファイルの内容を確認します。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
(オプション) 変数とフォルダを準備します。 | CloudShell との接続が失われた場合は、再接続してから次のコマンドを実行して、ディレクトリを作業フォルダーに変更します。
環境変数が定義されていることを確認します。
| AWS 全般 |
バケットの通知設定を削除します。 | CloudShell 作業フォルダから次のコマンドを実行して、Amazon S3 イベント通知設定を削除します。
| AWS 全般 |
Lambda 関数を削除する | CloudShell 作業フォルダから次のコマンドを実行して、EBCDIC コンバーターの Lambda 関数を削除します。
| AWS 全般 |
IAM ポリシーと IAM ロールを削除します。 | CloudShell 作業フォルダから次のコマンドを実行して、EBCDIC コンバータロールとポリシーを削除します。
| AWS 全般 |
S3 バケットで生成されたファイルを削除します。 | CloudShell 作業フォルダから次のコマンドを実行して、S3 バケットで生成されたファイルを削除します。
| AWS 全般 |
作業フォルダを削除します。 | CloudShell 作業フォルダから次のコマンドを実行して、
| AWS 全般 |
関連リソース
メインフレームデータユーティリティのREADME
(GitHub) EBCDIC 文字セット
(IBM ドキュメント) EBCDIC から ASCII への変換
(IBM ドキュメント) COBOL
(IBM ドキュメント) Amazon S3 トリガーを使用して Lambda 関数を呼び出す (AWS Lambda ドキュメント)