翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Mainframe Modernization と を使用して COBOL Db2 プログラムを構築する AWS CodeBuild
Amazon Web Services、Luis Gustavo Dantas、Eduardo Zimelewicz
概要
注記
AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization サービス (マネージドランタイム環境エクスペリエンス) に似た機能については、 AWS Mainframe Modernization サービス (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、「AWS Mainframe Modernization 可用性の変更」を参照してください。
このパターンでは、 AWS Mainframe Modernization Replatform ツールを使用して COBOL Db2 プログラムをプリコンパイルしてバインドするシンプルな AWS CodeBuild プロジェクトを作成する方法について説明します。これにより、 AWS Mainframe Modernization Replatform ランタイム環境でこれらのプログラムのデプロイと実行が可能になります。
ビジネス指向のプログラミング言語である COBOL は、その信頼性と読みやすさにより、多くの重要なアプリケーションを強化します。リレーショナルデータベース管理システムである IBM Db2 は、大量のデータを効率的に管理し、SQL を介して COBOL プログラムと統合されます。COBOL と Db2 は、今後いくつもの新しいテクノロジーが出現するとしても、金融や政府機関などの業界でミッションクリティカルな運用のバックボーンを形成します。
COBOL コンポーネントと Db2 コンポーネントをメインフレーム環境から他のプラットフォームに移行する場合、プラットフォームの互換性、統合の複雑さ、データ移行、パフォーマンスの最適化などの課題が生じます。これらの重要なコンポーネントを移動するには、信頼性と機能性を維持しながらスムーズに移行できるように、慎重な計画、技術的専門知識、リソースが必要です。
この AWS Mainframe Modernization サービスは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスなどの AWS インフラストラクチャで実行するメインフレームアプリケーションとデータベースをリプラットフォームするためのツールとリソースを提供します。これには、大規模なコード変更を伴わずにメインフレームワークロードをクラウドに移行する機能も含まれます。
Db2 プリコンパイルとバインドプロセスは、データベースアプリケーションのパフォーマンスと信頼性を最適化するために不可欠です。プリコンパイルにより、埋め込み SQL ステートメントが実行可能コードに変換されるため、ランタイムのオーバーヘッドが軽減され、効率が向上します。バインドプロセスは、プリコンパイルされたコードをデータベース構造にリンクするため、アクセスパスとクエリを容易に最適化できます。このプロセスにより、データの整合性が確保され、アプリケーションの応答性が向上し、セキュリティの脆弱性から保護されます。適切にプリコンパイルおよびバインドされたアプリケーションは、リソースの消費を最小限に抑え、スケーラビリティを強化し、SQL インジェクション攻撃のリスクを軽減します。
前提条件と制限事項
前提条件
AWS アカウント と管理レベルのコンソールアクセス。
IBM Db2 for z/OS や Db2 for Linux、Unix、Windows (LUW) などの IBM Db2 データベースシステム。
IBM Data Server Client ソフトウェア。IBM のウェブサイト
からダウンロードできます。詳細は、「IBM Data Server Client and Data Server Driver types 」を参照してください。 コンパイルおよびバインドする COBOL Db2 プログラム。このパターンには、代わりに使用できる基本的なサンプルプログラムも用意されています。
プライベートネットワーク AWS を持つ 上の仮想プライベートクラウド (VPC)。VPC の作成については、Amazon Virtual Private Cloud (Amazon VPC) ドキュメントを参照してください。
GitHub や GitLab などのソースコントロールリポジトリ。
制限事項
クォータについては、 AWS CodeBuild 「 のクォータ AWS CodeBuild」を参照してください。
一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照して、サービスのリンクを選択します。
アーキテクチャ
ソーステクノロジースタック
ソーススタックには以下が含まれます。
Db2 データベースを使用してデータを保存する COBOL プログラム
IBM COBOL コンパイラと Db2 for z/OS プリコンパイラ
ファイルシステム、トランザクションマネージャー、スプールなど、メインフレーム設定の他の部分
ターゲットテクノロジースタック
このパターンのアプローチには、Db2 for z/OS のデータを Db2 for LUW に移行するか、データを Db2 for z/OS 上にそのまま維持するかの 2 つのオプションがあります。ターゲットアーキテクチャには以下が含まれます。
Db2 データベースを使用してデータを保存する COBOL プログラム
AWS Mainframe Modernization リプラットフォームコンパイルツール
AWS CodeBuild アプリケーションを構築するためのインフラストラクチャとしての
Amazon Linux などのその他の AWS クラウド リソース
ターゲットアーキテクチャ

この図表は、以下を示すものです。
ユーザーは、GitHub や GitLab などのソースコントロールリポジトリにコードをアップロードします。
AWS CodePipeline は変更に気づき、リポジトリからコードを取得します。
CodePipeline はコードを起動 AWS CodeBuild して送信します。
CodeBuild は
buildspec.ymlテンプレート (「追加情報」セクションで提供) の指示に従い、以下を行います。Amazon Simple Storage Service (Amazon S3) バケットから IBM Data Server Client を取得します。
IBM Data Server Client をインストールしてセットアップします。
から Db2 認証情報を取得します AWS Secrets Manager。
Db2 サーバーに接続します。
COBOL プログラムをプリコンパイル、コンパイル、バインドします。
が使用するために、完成した製品を S3 バケット AWS CodeDeploy に保存します。
CodePipeline が CodeDeploy を開始します。
CodeDeploy は、ランタイム環境に既にインストールされているエージェントを調整します。エージェントは Amazon S3 からアプリケーションを取得し、
appspec.ymlの指示に従ってインストールします。
ビルドに焦点を当て、説明を簡潔にするため、このパターンの手順ではステップ 1 から 4 までを説明しますが、COBOL Db2 プログラムのデプロイについては説明しません。
自動化とスケール
わかりやすくするために、このパターンではリソースを手動でプロビジョニングする方法を説明します。ただし、 CloudFormation AWS Cloud Development Kit (AWS CDK)や HashiCorp Terraform など、これらのタスクを自動化する自動化オプションは多数あります。詳細については、CloudFormation ドキュメントおよび AWS CDK ドキュメントを参照してください。
ツール
AWS のサービス
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
AWS CodeDeploy は、Amazon EC2、オンプレミスインスタンス、 AWS Lambda 関数、または Amazon Elastic Container Service (Amazon ECS) サービスへのデプロイを自動化します。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
AWS Mainframe Modernization には、メインフレームから AWS マネージドランタイム環境への移行とモダナイゼーションの計画と実装に役立つツールとリソースが用意されています。
その他のツール
リプラットフォームツール用の Amazon ECR AWS Mainframe Modernization イメージ。COBOL アプリケーションをコンパイルするには、 AWS Mainframe Modernization Replatform ツールを含む Amazon Elastic Container Registry (Amazon ECR) イメージを使用して CodeBuild を開始する必要があります。
673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1利用可能な ECR イメージの詳細については、AWS Mainframe Modernization ユーザーガイドの「チュートリアル」を参照してください。
IBM Data Server Client
ソフトウェアは、CodeBuild で COBOL Db2 プログラムをプリコンパイルおよびバインドするために不可欠です。これは、COBOL コンパイラと Db2 間のブリッジとして機能します。
ベストプラクティス
すべての COBOL プログラムがデータ永続化レイヤーとして Db2 に依存しているわけではありません。Db2 にアクセスするためのコンパイルディレクティブが、Db2 とのやり取り専用に設計された COBOL プログラムにのみ適用されることを確認してください。COBOL Db2 プログラムと、Db2 を使用しない COBOL プログラムとを区別するロジックを実装します。
変更されていないプログラムはコンパイルしないことをお勧めします。コンパイルが必要なプログラムを特定するプロセスを実装します。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
IBM Data Server Client とパイプラインアーティファクトをホストする S3 バケットを作成する | (a) IBM Data Server Client をアップロードし、(b) リポジトリからコードを保存し、(c) ビルドプロセスの結果を保存するように、S3 バケットを設定する必要があります。
S3 バケットの作成手順については、Amazon S3 ドキュメントを参照してください。 | AWS 全般 |
IBM Data Server Client を S3 バケットにアップロードする |
| AWS 全般 |
Db2 認証情報の AWS Secrets Manager シークレットを作成します。 | DB2 認証情報を安全に保存するためのシークレットを作成するには、次の手順を実行します。
シークレットの作成の詳細は、Secrets Manager ドキュメントを参照してください。 | AWS 全般 |
VPC サブネットから Db2 にアクセスできることを確認 | AWS CodeBuild では、データサーバークライアントがプリコンパイルおよびバインド操作を実行できるように、Db2 サーバーへの接続が必要です。CodeBuild が安全な接続を介して Db2 サーバーに到達できることを確認します。
| ネットワーク管理者、AWS 全般 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
COBOL Db2 アセットの作成 |
| アプリ開発者 |
|
| AWS DevOps |
リポジトリを CodePipeline に接続する |
後のステップで CodePipeline の (IAM) ポリシーを作成するときに、接続に Amazon リソースネーム AWS Identity and Access Management (ARN) が必要になります。 | AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
CodeBuild 用の IAM ポリシーの作成 | CodeBuild プロジェクトでは、Secrets Manager や Amazon S3 などのいくつかのリソースにアクセスする必要があります。 必要なアクセス権限を設定するには:
IAM ポリシーの作成の詳細は、IAM ドキュメントを参照してください。 | AWS 全般 |
CodeDeploy 用の IAM ロールの作成 | CodeBuild でセキュリティポリシーを使用できるようにするには、IAM ロールを設定する必要があります。 このロールを作成するには以下の手順に従ってください。 1. IAM コンソール 3. [信頼されたエンティティタイプ] は、デフォルトの AWS のサービスのままにします。 4. [ユースケース] で CodeBuild サービスを選択し、[次へ] を選択します。 4. 使用可能な IAM ポリシーのリストで、CodeBuild 用に作成したポリシーを見つけ、[次へ] を選択して、このポリシーをロールにアタッチします。 5. ロールの名前を指定し、[ロールを作成] を選択して、今後 CodeBuild で参照できるように保存します。 の IAM ロールの作成の詳細については AWS のサービス、IAM ドキュメントを参照してください。 | AWS 全般 |
CodePipeline の IAM ポリシーの作成 | AWS CodePipeline パイプラインでは、コードリポジトリや Amazon S3 など、一部のリソースにアクセスする必要があります。 CodeBuild 用に説明した前述のステップを繰り返して、CodePipeline の IAM ポリシーを作成します (ステップ 2 では CodeBuild ではなく CodePipeline を選択)。 | AWS DevOps |
CodePipeline 用の IAM ロールの作成 | CodePipeline でセキュリティポリシーを使用できるようにするには、IAM ロールを設定する必要があります。 このロールを作成するには以下の手順に従ってください。
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
CodePipeline パイプラインと CodeBuild プロジェクトの作成 | COBOL Db2 プログラムをコンパイルしてバインドする CodePipeline パイプラインと CodeBuild プロジェクトを作成するには、以下の手順に従います。
| AWS DevOps |
出力の確認 | CodePipeline ビルドログを確認して、ビルドが成功したかどうかを確認します。 | AWS DevOps |
Db2 で結果を確認 | SYSPLAN テーブルでパッケージバージョンを確認します。
このバージョンは、CodeBuild ビルド ID と一致する必要があります (この例では「
|
トラブルシューティング
| 問題 | ソリューション |
|---|---|
サービス間を移動すると、 AWS コンソールでリージョンが切り替わることがあります。 | サービスを切り替える AWS リージョン ときは、必ず選択した を確認してください。 AWS リージョン セレクターは、コンソールウィンドウの右上隅にあります。 |
CodeBuild から Db2 接続の問題を特定するのが難しい場合がある | 接続の問題をトラブルシューティングするには、次の DB2 connect コマンドを
|
IAM コンソールのロールペインに、作成した IAM ポリシーがすぐに表示されない場合がある | 遅延が発生した場合は、画面を更新して最新情報を表示します。 |
関連リソース
IBM ドキュメント
AWS ドキュメント
追加情報
CodeBuild ポリシー
プレースホルダの <RegionID>、<AccountID>、<SubnetARN>、<BucketARN>、<DB2CredSecretARN> は、それぞれ必要な値に置き換えてください。
{"Version": "2012-10-17", "Statement": [ {"Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Resource": "*" }, {"Action": ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability"], "Effect": "Allow", "Resource": "arn:aws:ecr:*:673918848628:repository/m2-enterprise-build-tools"}, {"Action": "s3:PutObject", "Effect": "Allow", "Resource": "arn:aws:s3:::aws-m2-repo-*/*"}, {"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"], "Effect": "Allow", "Resource": "arn:aws:logs:<RegionId>:<AccountId>:*"}, {"Action": ["ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DescribeDhcpOptions", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterface"], "Effect": "Allow", "Resource": "*"}, {"Action": "ec2:CreateNetworkInterfacePermission", "Effect": "Allow", "Resource": ["<SubnetARN>"]}, {"Action": "s3:*", "Effect": "Allow", "Resource": ["<BucketARN>/*","<BucketARN>"]}, {"Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Resource": "<DB2CredSecretARN>"} ] }
CodePipeline ポリシー
プレースホルダの <BucketARN> および <ConnectionARN> は、それぞれ必要な値に置き換えてください。
{ "Version": "2012-10-17", "Statement": [ {"Action": ["s3:List*", "s3:GetObjectVersion", "s3:GetObject", "s3:GetBucketVersioning" ], "Effect": "Allow", "Resource": ["<BucketARN>/*", "<BucketARN>"]}, {"Action": ["codebuild:StartBuild", "codebuild:BatchGetBuilds"], "Effect": "Allow", "Resource": "*"}, {"Action": ["codestar-connections:UseConnection"], "Effect": "Allow", "Resource": "<ConnectionARN>"} ] }
buildspec.yml
プレースホルダの <your-bucket-name> は、実際の S3 バケット名に置き換えてください。
version: 0.2 phases: pre_build: commands: - /var/microfocuslicensing/bin/mfcesd -no > /var/microfocuslicensing/logs/mfcesd_startup.log 2>&1 & - | mkdir $CODEBUILD_SRC_DIR/db2client aws s3 cp s3://<your-bucket-name>/v11.5.8_linuxx64_client.tar.gz $CODEBUILD_SRC_DIR/db2client/ >> /dev/null 2>&1 tar -xf $CODEBUILD_SRC_DIR/db2client/v11.5.8_linuxx64_client.tar.gz -C $CODEBUILD_SRC_DIR/db2client/ cd $CODEBUILD_SRC_DIR/db2client/ ./client/db2_install -f sysreq -y -b /opt/ibm/db2/V11.5 >> /dev/null 2>&1 useradd db2cli /opt/ibm/db2/V11.5/instance/db2icrt -s client -u db2cli db2cli DB2CRED=$(aws secretsmanager get-secret-value --secret-id dev-db2-cred | jq -r '.SecretString | fromjson') read -r DB2USER DB2PASS DB_NODE DB_HOST DB_PORT DB_NAME DB_QUAL <<<$(echo $DB2CRED | jq -r '.username, .password, .db2node, .db2host, .db2port, .db2name, .qualifier') . /home/db2cli/sqllib/db2profile db2 catalog tcpip node $DB_NODE remote $DB_HOST server $DB_PORT db2 catalog db $DB_NAME as $DB_NAME at node $DB_NODE authentication server build: commands: - | revision=$CODEBUILD_SRC_DIR/loadlib mkdir -p $revision; cd $revision . /opt/microfocus/EnterpriseDeveloper/bin/cobsetenv cob -zU $CODEBUILD_SRC_DIR/CDB2SMP.cbl -C "DB2(DB==${DB_NAME} PASS==${DB2USER}.${DB2PASS} VERSION==${CODEBUILD_BUILD_NUMBER} COLLECTION==DB2AWSDB" artifacts: files: - "**/*" base-directory: $revision