翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
と Terraform を使用してメインフレームアプリケーションをモダナイズ AWS Transform およびデプロイする
Mason Cahill、Polaris Jhandi、Prachi Khanna、Sivasubramanian Ramani、Santosh Kumar Singh、Amazon Web Services
概要
AWS Transform は、.NET、メインフレーム、VMware ワークロードの大規模なモダナイゼーションを加速できます。評価、コード分析、リファクタリング、分解、依存関係マッピング、検証、変換計画などの複雑なタスクを自動化する特殊な AI エージェントをデプロイします。このパターンは、 AWS Transform を使用してメインフレームアプリケーションをモダナイズし、Hashicorp Terraform を使用して AWS インフラストラクチャにデプロイする方法を示しています。これらのstep-by-stepの手順は、オープンソースのメインフレームアプリケーションのサンプルである CardDemo を COBOL から最新の Java アプリケーションに変換するのに役立ちます。
前提条件と制限
前提条件
アクティブな AWS アカウント
AWS リソースを作成してアプリケーションをデプロイするための管理アクセス許可
Terraform バージョン 1.5.7 以降、設定済み
AWS Terraform のプロバイダー、設定済み
AWS IAM Identity Center、有効
AWS Transform、有効
変換ジョブを実行できるコントリビューターロールを持つ AWS Transform ワークスペースにオンボードされたユーザー
制約事項
AWS Transform は一部の でのみ使用できます AWS リージョン。サポートされているリージョンの完全なリストについては、「Supported Regions for AWS Transform」を参照してください。
のメインフレーム変換機能にはサービスクォータがあります AWS Transform。詳細については、「AWS Transformのクォータ」を参照してください。
共有ワークスペースでコラボレーションするには、すべてのユーザーが、 AWS Transform ウェブアプリケーションのインスタンス AWS IAM Identity Center に関連付けられている の同じインスタンスの登録済みユーザーである必要があります。
Amazon Simple Storage Service (Amazon S3) バケット および は、同じ AWS アカウント および リージョンにある AWS Transform 必要があります。
アーキテクチャ
次の図は、レガシーアプリケーションのend-to-endのモダナイゼーションと へのデプロイを示しています AWS クラウド。アプリケーションとデータベースの認証情報は に保存され AWS Secrets Manager、Amazon CloudWatch はモニタリングおよびログ記録機能を提供します。
この図表は、次のワークフローを示しています:
を通じて AWS IAM Identity Center、ユーザーは AWS Transform で認証とアクセスを行います AWS アカウント。
ユーザーは COBOL メインフレームコードを Amazon S3 バケットにアップロードし、変換を開始します AWS Transform。
AWS Transform は COBOL コードをクラウドネイティブの Java コードにモダナイズし、モダナイズされたコードを Amazon S3 バケットに保存します。
Terraform は、Application Load Balancer、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、Amazon Relational Database Service (Amazon RDS) データベースなど、モダナイズされたアプリケーションをデプロイするための AWS インフラストラクチャを作成します。Terraform は、モダナイズされたコードを Amazon EC2 インスタンスにデプロイします。
VSAM ファイルは Amazon EC2 にアップロードされ、Amazon EC2 から Amazon RDS データベースに移行されます。
ツール
AWS のサービス
その他のツール
Apache Maven は、Java プロジェクト用のオープンソースのソフトウェアプロジェクト管理およびビルド自動化ツールです。
Apache Tomcat は、Java コード用のオープンソースの Servlet コンテナおよびウェブサーバーです。
HashiCorp Terraform は、コードを使用してクラウドインフラストラクチャとリソースをプロビジョニングおよび管理するためのInfrastructure as Code (IaC) ツールです。
Spring Boot は、Java の Spring Framework 上に構築されたオープンソースフレームワークです。
コードリポジトリ
このパターンのコードは、GitHub Mainframe Transformation E2E リポジトリで入手できます。このパターンでは、オープンソースの AWS CardDemo メインフレームアプリケーションをサンプルアプリケーションとして使用します。
ベストプラクティス
移行の対象となるコードとリソースの完全な所有権を割り当てます。
完全な移行にスケールする前に、概念実証を開発してテストします。
すべてのステークホルダーからのコミットメントを確保します。
明確なコミュニケーションチャネルを確立します。
最小実行可能製品 (MVP) 要件を定義して文書化します。
明確な成功基準を設定します。
エピック
| タスク | 説明 | 必要なスキル |
|---|
バケットを作成します。 | AWS Transform が有効になっているのと同じ AWS アカウント およびリージョンに Amazon S3 バケットを作成します。このバケットを使用して、アプリケーションのビルドと実行に必要なメインフレームアプリケーションコード、データ、その他のスクリプトを保存します。 は、このバケット AWS Transform を使用して、リファクタリングされたコードと、変換に関連するその他のファイルを保存します。手順については、Amazon S3 ドキュメントの「バケットの作成」を参照してください。 | 一般的な AWS、AWS 管理者 |
バケットの CORS アクセス許可を設定します。 | アクセス用にバケットを設定するときは AWS Transform 、バケットの Cross-Origin Resource Sharing (CORS) を設定する必要があります。正しく設定されていない場合、 のインライン表示またはファイル比較機能を使用できない可能性があります AWS Transform。バケットの CORS を設定する方法については、Amazon S3 S3 バケットでのクロスオリジンリソース共有の使用」を参照してください。ポリシーについては、 AWS Transform ドキュメントのS3 バケット CORS アクセス許可」を参照してください。 | 一般的な AWS、AWS 管理者 |
サンプルメインフレームアプリケーションコードを準備します。 | 次のコマンドを入力して、CardDemo リポジトリをローカルワークステーションにクローンします。 git clone https://github.com/aws-samples/aws-mainframe-modernization-carddemo.git
aws-mainframe-modernization-carddemo フォルダを ZIP ファイルに圧縮します。
作成した Amazon S3 バケットに ZIP ファイルをアップロードします。手順については、Amazon S3 ドキュメントの「オブジェクトのアップロード」を参照してください。
| AWS 全般、アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|
AWS Transform ジョブをセットアップします。 | 認証情報を使用してログインして、 AWS Transform ウェブアプリケーションにアクセスします。 AWS Transform ドキュメントの「ワークスペースのセットアップ」の手順に従って、新しいワークスペースを作成します。 ワークスペースのランディングページで、ジョブの作成 AWS Transform を依頼を選択します。 次に、ジョブのタイプとして Mainframe Modernization を選択します。 チャットウィンドウで、「コードを Java に変換する」と入力します。 推奨されるジョブタイプ、名前、目標を確認します。確認するには、「はい」と入力します。 [ジョブの作成] を選択します。
| アプリ開発者、アプリオーナー |
コネクタをセットアップします。 | 作成した Amazon S3 バケットを使用してコネクタを設定します。手順については、 AWS Transform ドキュメントの「コネクタのセットアップ」を参照してください。プロンプトが表示されたら、Amazon S3 バケットの aws-mainframe-modernization-carddemo zip ファイルのパスを入力します。 Amazon S3 分析が完了するまで待ちます。
| アプリ開発者、アプリオーナー |
コードを変換します。 | AWS Transform ドキュメントの「コードの分析」の指示に従って、コード分析の結果を確認します。 AWS Transform ドキュメントの「リファクタリングコード」の指示に従ってメインフレームコードをリファクタリングします。サンプル CardDemo メインフレームアプリケーションでは、デフォルト設定を受け入れることができます。 リファクタリングが完了するまで待ちます。 結果の表示を選択して、Amazon S3 バケット内のリファクタリングされたコードのパスを表示します。このファイルパスを書き留めます。後で必要になります。
| アプリ開発者、アプリオーナー |
| タスク | 説明 | 必要なスキル |
|---|
テンプレートを更新します。 | 次のコマンドを入力して、メインフレーム変換 E2E リポジトリをローカルワークステーションにクローンします。 git clone https://github.com/aws-samples/sample-mainframe-transformation-e2e.git
現在のパブリック IP アドレスを取得するには、次のコマンドを入力します。 curl checkip.amazonaws.com
次のコマンドを入力して、infra ディレクトリに移動します。 cd mainframe-transformation-e2e/infra
variables.tf ファイルを開きます。
を IP アドレスYOUR_IP_ADDRESS_HEREに置き換えます。 パブリックホストゾーンがある場合は、次の操作を行います。 をホストゾーン名hosted_zone_nameに置き換えます。 hosted_zone_enabled を true に設定します。
パブリックホストゾーンがない場合は、次の操作を行います。 次のコマンドを入力して、自己署名証明書を生成します。 openssl genrsa 2048 > my-private-key.pem
openssl req -new -x509 -nodes -sha256 -days 365 -key my-private-key.pem -outform PEM -out my-certificate.pem
次のコマンドを入力して、証明書を AWS Certificate Manager (ACM) にインポートします。 aws acm import-certificate \
--certificate fileb://my-certificate.pem \
--private-key fileb://my-private-key.pem
このコマンドの出力には、インポートされた証明書の Amazon リソースネーム (ARN) が含まれます。 を証明書の ARN self_signed_cert_arnに置き換えます。 hosted_zone_enabled を false に設定します。
をターゲットリージョンaws_regionに変更します。デフォルトは us-east-1 です。 variables.tf ファイルを保存して閉じます。
| 一般的な AWS、AWS 管理者 |
インフラストラクチャを準備します。 | Terraform を初期化するには、次のコマンドを入力します。 terraform init
実行プランを生成するには、次のコマンドを入力します。 terraform plan
計画を確認し、作成されるリソースとインフラストラクチャコンポーネントを検証します。 インフラストラクチャをデプロイするには、次のコマンドを入力します。 terraform apply
プロンプトが表示されたら、はいと入力してデプロイを確認します。 デプロイが完了するまで待ちます。
| Terraform |
| タスク | 説明 | 必要なスキル |
|---|
必要なソフトウェアをインストールします。 | を使用して Amazon EC2 インスタンスに接続しますAWS Systems Manager Session Manager。 ルートユーザーに切り替えるには、次のコマンドを入力します。 sudo su -
以下のコマンドを入力して、scripts ディレクトリに移動します。 cd /opt/scripts
install_software.sh スクリプトを確認します。このスクリプトは、Java 17、Apache Maven、および Apache Tomcat 10.0.23 をインストールします。 ユースケースに応じてスクリプトを更新します。 スクリプトを実行可能にするには、次のコマンドを入力します。 chmod +x install_software.sh
スクリプトを実行するには、次のコマンドを入力します。 ./install_software.sh
| アプリ開発者、移行エンジニア |
ソフトウェアのインストールを確認します。 | 次のコマンドを入力して Tomcat サーバーを起動します。 /opt/tomcat/apache-tomcat-10.0.23/bin/startup.sh
次のコマンドを入力して、ウェブサーバーのレスポンスを確認します。 curl http://localhost:8080
出力により、Tomcat が HTML ページを提供していることが確認されます。
| アプリ開発者、移行エンジニア |
| タスク | 説明 | 必要なスキル |
|---|
生成されたコードをダウンロードして抽出します。 | download_and_extract.sh スクリプトを実行可能にするには、次のコマンドを入力します。このスクリプトは、Amazon S3 バケットに保存されているリファクタリングされたコードと Gapwalk ランタイムライブラリをダウンロードします。 chmod +x /opt/scripts/download_and_extract.sh
次のコマンドを入力して スクリプトを実行します。を Amazon S3 バケット内の generated.zip ファイルへのパス<file_path>に置き換えます。 ./download_and_extract.sh <file_path>
ファイルパスは通常 ですs3://<bucket-name>/transform_output/<aws_transform_job_id>/codetransformation/generated.zip。 次のコマンドを入力して、 sharedフォルダに移動します。 cd /opt/runtime/velocity/shared
deploy-velocity-runtime.sh スクリプトをコピーするには、次のコマンドを入力します。 cp /opt/scripts/deploy-velocity-runtime.sh .
コピーしたスクリプトを実行可能にするには、次のコマンドを入力します。 chmod +x deploy-velocity-runtime.sh
次のコマンドを入力して スクリプトを実行します。このスクリプトは、プロジェクトオブジェクトモデル (POM) ファイルに存在するすべての必要な Web Application Archive (WAR) 依存関係をリポジトリフォルダにコピーします。 ./deploy-velocity-runtime.sh
エラーがなく、必要な WAR 依存関係がローカル Maven リポジトリにインストールされていることを確認します。
| アプリ開発者、移行エンジニア |
モダナイズされたアプリケーションを構築します。 | 次のコマンドを入力して、app-pomプロジェクトディレクトリに移動します。 cd /opt/codebase/app-pom/
Maven をインストールするには、次のコマンドを入力します。 mvn clean install
インストールとビルドが完了するまで待ちます。 CardDemo アプリケーションでこのコマンドを実行すると、app-webプロジェクトの警告メッセージが表示されることがあります。これらの警告は無視してもかまいません。 ビルドが正常に完了したら、 app-service/target/app-service-1.0.0.warと が存在することを確認しますapp-web/target/app-web-1.0.0.war。 この段階で Tomcat サーバーを再起動しないでください。必要なデータベースがないため、エラーが発生します。サーバーを再起動する前に、データベースを設定する必要があります。
| アプリ開発者、移行エンジニア |
| タスク | 説明 | 必要なスキル |
|---|
データベースと JICS スキーマを作成します。 | 次のコマンドを入力して、csd commandsフォルダの名前を に変更しますcsd_commands。これにより、フォルダ名からスペースが削除されます。 mv /opt/codebase/extra/csd\ commands/ /opt/codebase/extra/csd_commands
次のコマンドを入力して、 scripts ディレクトリに移動します。 cd /opt/scripts
次のコマンドを入力して、データベース移行スクリプトを実行可能にします。 chmod +x database_migration_setup.sh
次のコマンドを入力して、次の変数をパラメータとして設定します。 RDS_ENDPOINT=<database_endpoint>
SECRET_NAME=<secret_name>
JICS_SQL_SCRIPT_DIR=/opt/runtime/velocity/jics/sql/jics.sql
INIT_JICS_SQL_SCRIPT_DIR=/opt/codebase/extra/csd_commands/sql/aws-mainframe-modernization-carddemo-main/app/csd/initJics.sql
コードの説明は以下のとおりです。 次のコマンドを入力して、データベース移行スクリプトを実行します。 ./database_migration_setup.sh $RDS_ENDPOINT $SECRET_NAME $JICS_SQL_SCRIPT_DIR $INIT_JICS_SQL_SCRIPT_DIR
次のコマンドを入力して、Amazon EC2 インスタンスからデータベースに接続します。 psql -h <Your Amazon RDS Endpoint> -U foo -p 5432 postgres
プロンプトが表示されたら、データベース認証情報を入力します。
| アプリ開発者、移行エンジニア |
データベースの作成を検証します。 | 次のコマンドを入力して、すべてのデータベースを表示します。 \l
データベースに切り替えるには、次のコマンドを入力しますjics。 \c jics
次のコマンドを入力して、作成されたテーブルのリストを確認します。 \dt
| アプリ開発者、移行エンジニア |
データを JICS データベースに移行します。 | execute_listcat_sql.sh スクリプトを実行可能にするには、次のコマンドを入力します。 chmod +x execute_listcat_sql.sh
次のコマンドを入力して、LISTCAT SQL ファイルを含むディレクトリである PATH_TO_LISTCAT_SQL_FILES変数を設定します。 PATH_TO_LISTCAT_SQL_FILES=/opt/codebase/extra/listcat/sql/cluster/aws-mainframe-modernization-carddemo-main/app/catlg
RDS_ENDPOINT、、SECRET_NAMEおよび PATH_TO_LISTCAT_SQL_FILES変数が前の手順に従って正しく設定されていることを確認します。
execute_listcat_sql.sh スクリプトを実行するには、次のコマンドを入力します。 ./execute_listcat_sql.sh $RDS_ENDPOINT $SECRET_NAME $PATH_TO_LISTCAT_SQL_FILES
このスクリプトは、JICS データベースの VSAM ファイルプロパティを更新し、データベースを変更するために必要なクエリを実行します。
| アプリ開発者、移行エンジニア |
| タスク | 説明 | 必要なスキル |
|---|
Amazon EC2 インスタンスにモダナイズされたアプリケーションをインストールします。 | 次のコマンドを入力して、application_installer.sh スクリプトを実行可能にします。 chmod +x /opt/scripts/application_installer.sh
次のコマンドを入力して、次の変数をパラメータとして設定します。 RDS_ENDPOINT=<database_endpoint>
SECRET_NAME=<secret_name>
AIX_JSON_FILE_PATH=/opt/codebase/extra/csd_commands/json/aws-mainframe-modernization-carddemo-main/jicsFileAix.json
LISTCAT_JSON_FILES_DIR=/opt/codebase/extra/listcat/json/cluster/default/aws-mainframe-modernization-carddemo-main/app/catlg
S3_PATH_FOR_EBCDIC_DATA_FILES=s3://<bucket_name>/transform-output/<job_id>/inputs/aws-mainframe-modernization-carddemo-main/app/data/EBCDIC
コードの説明は以下のとおりです。 <database_endpoint> は、Terraform を通じてデプロイした Amazon RDS データベースのエンドポイントです。
<secret_name> は、Terraform を通じてデプロイした AWS Secrets Manager シークレットの名前です。
<bucket_name> は、モダナイズされたアプリケーションを含む Amazon S3 バケットの名前です。
<job_id> は AWS Transform ジョブの ID です。
application_installer.sh スクリプトを実行するには、次のコマンドを入力します。 ./application_installer.sh $RDS_ENDPOINT $SECRET_NAME $AIX_JSON_FILE_PATH $LISTCAT_JSON_FILES_DIR $S3_PATH_FOR_EBCDIC_DATA_FILES
/opt/tomcat/apache-tomcat-10.0.23/workingdir/config フォルダの application-utility-pgm.yml ファイルで、エンコードパラメータを次のように変更します。
encoding : CP1047
AWS Blu Age を使用して でアプリケーション AWS Transform を自動的にリファクタリングする場合は、YAML ファイルを使用してアプリケーションとそのランタイム環境を設定します。たとえば、アプリケーションの application-main.yml ファイルでログ記録を設定できます。使用可能なプロパティの詳細については、AWS 「Blu Age ランタイムのプロパティを有効にする」を参照してください。
| アプリ開発者、クラウドアーキテクト |
Tomcat サーバーを再起動します。 | 次のコマンドを入力して、作業ディレクトリに移動します。 cd /opt/tomcat/apache-tomcat-10.0.23/workingdir
Tomcat サーバーを停止および起動するには、次のコマンドを入力します。 /opt/tomcat/apache-tomcat-10.0.23/bin/shutdown.sh
/opt/tomcat/apache-tomcat-10.0.23/bin/startup.sh
次のコマンドを入力して、Tomcat サービス起動ログをモニタリングします。 tail -f /opt/tomcat/apache-tomcat-10.0.23/logs/catalina.out
| アプリ開発者、クラウドアーキテクト |
VSAM データセットを移行します。 | Amazon EC2 コンソールを開きます。 ナビゲーションペインで、[Load Balancers] (ロードバランサー) を選択します。 Terraform で作成されたロードバランサーを選択します。 などの Application Load Balancer のドメインネームシステム (DNS) 名を見つけますapplication-load-balancer-<id>.<region>.elb.amazonaws.com。 ブラウザで、 に移動します。ここでhttp://<dns_name>/gapwalk-application/scripts/data-load、 <dns_name>は Application Load Balancer の DSN 名です。これにより、データロードスクリプトが開始されます。 スクリプトが完了するまで待ちます。完了すると、ブラウザに DONE が表示されます。 Amazon EC2 インスタンスで、新しいターミナルを開きます。 次のコマンドを入力して Amazon RDS データベースに接続し、 を の値<database_endpoint>に置き換えます。 psql -h <database_endpoint> -U foo -p 5432 postgres
プロンプトが表示されたら、認証情報を入力してデータベースに接続します。 次のコマンドを入力して、すべてのデータベースを表示します。 \l
データベースに切り替えるには、次のコマンドを入力しますbluesam。 \c bluesam
次のコマンドを入力して、作成されたテーブルのリストを確認します。 \dt
次のコマンドを入力して、データロードを検証します。 SELECT * FROM public.aws_m2_carddemo_usrsec_vsam_ksds;
出力には、返された 10 個のレコードが表示されます。
| アプリ開発者、移行エンジニア |
Groovy スクリプトのパラメータを更新します。 | スクリプトディレクトリに移動するには、次のコマンドを入力します。 cd /opt/tomcat/apache-tomcat-10.0.23/webapps/workingdir/scripts
フラットファイルへの参照を含むすべての Groovy ファイルで、次のファイル設定を更新します。 リファレンスについては、コードリポジトリのサンプル DUSRSECJ.jcl.groovy スクリプトを参照してください。 ファイルを保存して閉じます。
| アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|
モダナイズされたアプリケーションをテストします。 | Application Load Balancer (http://<your-load-balancer-dns>) またはホストゾーン () からオンラインアプリケーションにアクセスしますhttps://myhostedzone.dev/。 トランザクション ID には、 と入力しますCC00。 ユーザー名には、 と入力しますUSER0001。 パスワードには、 と入力しますPASSWORD。 ログインに成功すると、メインメニューが表示されます。
| アプリ開発者、テストエンジニア |
バッチスクリプトを確認します。 | Application Load Balancer (http://<your-load-balancer-dns>/gapwalk-application/scripts) またはホストゾーン () からスクリプトインターフェイスにアクセスしますhttps://myhostedzone.dev/gapwalk-application/scripts。 DUSRSECJ.jcl.groovy スクリプトなど、実行するスクリプトを選択します。 スクリプトが正常に実行されることを確認します。以下は、正常に実行された後の出力例です。 { "exitCode": 0, "stepName": "STEP03", "program": "IDCAMS", "status": "Succeeded" }
| アプリ開発者、テストエンジニア |
| タスク | 説明 | 必要なスキル |
|---|
インフラストラクチャを削除する準備をします。 | 次のコマンドを入力して、Amazon RDS インスタンスから削除保護を削除します。 aws rds modify-db-instance \
--db-instance-identifier <your-db-instance-name> \
--no-deletion-protection \
--apply-immediately
次のコマンドを入力して、Application Load Balancer から削除保護を削除します。 aws elbv2 modify-load-balancer-attributes \
--load-balancer-arn <your-load-balancer-arn> \
--attributes Key=deletion_protection.enabled,Value=false
次のコマンドを入力して、Amazon S3 バケットの内容を削除します。 ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)
aws s3 rm s3://mf-carddemo-$ACCOUNT_NUMBER --recursive
aws s3 rm s3://mf-carddemo-logs-$ACCOUNT_NUMBER --recursive
| AWS 全般 |
インフラストラクチャを削除します。 | これらのステップにより、リソースは完全に削除されます。先に進む前に、重要なデータをバックアップしていることを確認してください。 次のコマンドを入力して、 infraフォルダに移動します。 cd /mainframe-transformation-e2e/infra
インフラストラクチャを削除するには、次のコマンドを入力します。 terraform destroy --auto-approve
| AWS 全般 |
トラブルシューティング
| 問題 | ソリューション |
|---|
Terraform 認証 | AWS 認証情報が正しく設定されていることを確認します。 正しい AWS プロファイルが選択されていることを確認します。 必要なアクセス許可があることを確認します。
|
Tomcat 関連のエラー | 例外/opt/tomcat/apache-tomcat-10.0.23/logsについては、 の catalina.out を確認してください。 次のコマンドを入力して、Tomcat フォルダの所有権を Tomcat ユーザーに変更します。 chown -R tomcat:tomcat /opt/tomcat/*
|
URL 名がロードされない | Application Load Balancer セキュリティグループに、ソースとしてインバウンドルールに IP アドレスがあることを確認します。 |
Tomcat ログの認証の問題 | のデータベースシークレットパスワード AWS Secrets Manager と server.xml のパスワードが一致していることを確認します。 |
関連リソース
AWS 規範ガイダンス
AWS サービスドキュメント
AWS ブログ投稿