教程:为 BankDemo 示例应用程序设置 Micro Focus 构建 - AWS Mainframe Modernization

教程:为 BankDemo 示例应用程序设置 Micro Focus 构建

AWS Mainframe Modernization 使您能够为迁移的应用程序设置构建和持续集成/持续交付 (CI/CD) 管道。这些构建和管道使用 AWS CodeBuild、AWS CodeCommit 和 AWS CodePipeline 来提供这些功能。CodeBuild 是一项完全托管的构建服务,可编译源代码、运行单元测试以及生成可供部署的构件。CodeCommit 是一项版本控制服务,可用于在 AWS 云中私密地存储和管理 Git 存储库。CodePipeline 是一项持续交付服务,可用于建模、可视化和自动执行发布软件所需的步骤。

本教程演示如何使用 AWS CodeBuild 编译 Amazon S3 中的 BankDemo 示例应用程序源代码,然后将编译后的代码导回 Amazon S3。

AWS CodeBuild 是一项完全托管式连续集成服务,可编译源代码、运行测试以及生成可供部署的软件包。借助 CodeBuild,您可以使用预先打包的构建环境,也可以创建使用您自己的构建工具的自定义构建环境。此演示场景使用后者,包括一个使用预打包的 Docker 映像的 CodeBuild 构建环境。

重要

在启动大型机现代化项目之前,我们建议您了解适用于大型机的 AWS 迁移加速计划 (MAP),或者联系 AWS大型机专家,了解实现大型机应用程序现代化所需的步骤。

先决条件

开始本教程之前,请满足以下先决条件:

  • 下载 BankDemo 示例应用程序并将其解压缩到一个文件夹。源文件夹中包含 COBOL 程序和 Copybook 以及定义。此外,它还包含一个供参考的 JCL 文件夹,尽管您不需要构建 JCL。该文件夹还包含构建所需的元文件。

  • 在 AWS Mainframe Modernization 控制台中,选择工具。在分析、开发和构建资产中,选择使用我的 AWS 账户共享资产

第 1 步:与 AWS 账户共享构建资产

在此步骤中,您需要确保与您的 AWS 账户共享构建资产,尤其是在使用资产的区域中。

  1. https://console.aws.amazon.com/m2/ 打开 AWS Mainframe Modernization 控制台。

  2. 在左侧导航中,选择工具

  3. 分析、开发和构建资产中,选择使用我的 AWS 账户共享资产

重要

您需要在打算进行构建的每个 AWS 区域中执行一次此步骤。

步骤 2:创建 Amazon S3 存储桶

在此步骤中,您将创建两个 Amazon S3 存储桶。一个是用于存放源代码的输入存储桶,另一个是用于存放构建输出的输出存储桶。有关更多信息,请参阅《Amazon S3 用户指南》中的创建、配置和使用 Amazon S3 存储桶

  1. 要创建输入存储桶,登录 Amazon S3 控制台并选择创建存储桶

  2. 常规配置中,为存储桶提供一个名称,并指定要在其中创建存储桶的 AWS 区域。示例名称为 codebuild-regionId-accountId-input-bucket,其中 regionId 是存储桶的 AWS 区域,accountId 是您的 AWS 账户 ID。

    注意

    如果您要在非美国东部(弗吉尼亚州北部)的 AWS 区域创建存储桶,请指定 LocationConstraint 参数。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的创建存储桶

  3. 保留所有其他设置并选择创建存储桶

  4. 重复步骤 1 – 3 来创建输出存储桶。示例名称为 codebuild-regionId-accountId-output-bucket,其中 regionId 是存储桶的 AWS 区域,accountId 是您的 AWS 账户 ID。

    无论您为这些存储桶选择的名称如何,请务必在本教程中保持统一。

步骤 3:创建构建规范文件

在此步骤中,创建一个构建规范文件。此文件提供编译命令和相关设置并采用 YAML 格式,以便 CodeBuild 运行构建。有关更多信息,请参阅《AWS CodeBuild 用户指南》中的 CodeBuild 的构建规范参考

  1. 在您在先决条件中解压缩的目录中创建一个名为 buildspec.yml 的文件。

  2. 将以下内容添加到该文件并保存。无需对该文件进行任何更改。

    version: 0.2 env: exported-variables: - CODEBUILD_BUILD_ID - CODEBUILD_BUILD_ARN phases: install: runtime-versions: python: 3.7 pre_build: commands: - echo Installing source dependencies... - ls -lR $CODEBUILD_SRC_DIR/source build: commands: - echo Build started on `date` - /start-build.sh -Dbasedir=$CODEBUILD_SRC_DIR/source -Dloaddir=$CODEBUILD_SRC_DIR/target post_build: commands: - ls -lR $CODEBUILD_SRC_DIR/target - echo Build completed on `date` artifacts: files: - $CODEBUILD_SRC_DIR/target/**

    此处的 CODEBUILD_BUILD_IDCODEBUILD_BUILD_ARN$CODEBUILD_SRC_DIR/source$CODEBUILD_SRC_DIR/target 是 CodeBuild 中可用的环境变量。有关更多信息,请参阅构建环境中的环境变量

    此时,您的目录结构应如下所示。

    (root directory name) |-- build.xml |-- buildspec.yml |-- LICENSE.txt |-- source |... etc.
  3. 将文件夹的内容压缩到名为 BankDemo.zip 的文件中。在本教程中,您无法压缩文件夹。因此,将文件夹的内容压缩到文件 BankDemo.zip 中。

步骤 4:上传源文件

在此步骤中,将 BankDemo 示例应用程序的源代码上传到您的 Amazon S3 输入存储桶。

  1. 登录到 Amazon S3 控制台,并在左侧导航窗格中,选择存储桶。然后选择您之前创建的输入存储桶。

  2. 对象下,选择上传

  3. 文件和文件夹部分,选择添加文件

  4. 导航到并选择 BankDemo.zip 文件。

  5. 选择上传

步骤 5:创建 IAM 策略

在此步骤中,创建两个 IAM 策略。一个策略授予 AWS Mainframe Modernization 访问和使用 Docker 映像(包含 Micro Focus 构建工具)的权限。此策略不是为客户自定义的。另一个策略授予 AWS Mainframe Modernization 与输入和输出存储桶以及与 CodeBuild 生成的 Amazon CloudWatch 日志进行交互的权限。

要了解有关创建 IAM 策略的信息,请参阅《IAM 用户指南》中的编辑 IAM 策略

创建允许访问 Docker 映像的策略
  1. 在 IAM 控制台中,将以下策略文档复制并粘贴到策略编辑器中。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:*:673918848628:repository/m2-enterprise-build-tools" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::aws-m2-repo-*-<region>-prod" } ] }
  2. 提供策略名称,例如 m2CodeBuildPolicy

创建允许 AWS Mainframe Modernization 与存储桶和日志交互的策略
  1. 在 IAM 控制台中,将以下策略文档复制并粘贴到策略编辑器中。请务必将 regionId 更新为 AWS 区域,并将 accountId 更新为您的 AWS 账户。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:regionId:accountId:log-group:/aws/codebuild/codebuild-bankdemo-project", "arn:aws:logs:regionId:accountId:log-group:/aws/codebuild/codebuild-bankdemo-project:*" ], "Effect": "Allow" }, { "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:List*" ], "Resource": [ "arn:aws:s3:::codebuild-regionId-accountId-input-bucket", "arn:aws:s3:::codebuild-regionId-accountId-input-bucket/*", "arn:aws:s3:::codebuild-regionId-accountId-output-bucket", "arn:aws:s3:::codebuild-regionId-accountId-output-bucket/*" ], "Effect": "Allow" } ] }
  2. 为策略提供一个名称,例如 BankdemoCodeBuildRolePolicy

步骤 6:创建 IAM 角色

在此步骤中,您将创建一个新的 IAM 角色。在您将之前创建的 IAM 策略与该新 IAM 角色关联后,该角色允许 CodeBuild 与您的 AWS 资源交互。

有关创建服务角色的信息,请参阅《IAM 用户指南》中的创建向 AWS 服务委派权限的角色

  1. 登录 IAM 控制台,然后在左侧导航窗格中选择角色

  2. 选择创建角色

  3. 可信实体类型下,选择 AWS 服务

  4. 其他 AWS 服务的用例下,选择 CodeBuild,然后再次选择 CodeBuild

  5. 选择下一步

  6. 添加权限页面上,选择下一步。您稍后给该角色分配策略。

  7. 角色详细信息下,提供角色的名称,例如 BankdemoCodeBuildServiceRole

  8. 选择可信实体下,验证策略文档是否如下所示:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  9. 选择创建角色

步骤 7:将 IAM 策略附加到 IAM 角色

在此步骤中,将您之前创建的两个 IAM 策略附加到 BankdemoCodeBuildServiceRole IAM 角色。

  1. 登录 IAM 控制台,然后在左侧导航窗格中选择角色

  2. 角色中,选择您之前创建的角色,例如 BankdemoCodeBuildServiceRole

  3. 权限策略中,依次选择添加权限附加策略

  4. 其他权限策略中,选择您之前创建的策略,例如 m2CodeBuildPolicyBankdemoCodeBuildRolePolicy

  5. 选择附加策略

步骤 8:创建 CodeBuild 项目

在此步骤中,创建 CodeBuild 项目。

  1. 登录到 CodeBuild 控制台并选择创建构建项目

  2. 项目配置部分中,提供项目的名称,例如 codebuild-bankdemo-project

  3. 部分中,对于源提供商,选择 Amazon S3,然后选择您之前创建的输入存储桶,例如codebuild-regionId-accountId-input-bucket

  4. S3 对象密钥或 S3 文件夹字段中,输入您上传到 S3 存储桶的 zip 文件的名称。在本例中,此文件名为 bankdemo.zip

  5. 环境部分中,选择自定义映像

  6. 环境类型字段中,选择 Linux

  7. 映像注册表中,选择其他注册表

  8. 外部注册表 URL 字段中,

    • 对于 Micro Focus v9:输入 673918848628.dkr.ecr.us-west-1.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1。如果在 Micro Focus v9 中使用其他 AWS 区域,则也可以指定 673918848628.dkr.ecr.<m2-region>.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1,其中 <m2-region> 是提供 AWS Mainframe Modernization 服务的 AWS 区域(例如,eu-west-3)。

    • 对于 Micro Focus v8:输入 673918848628.dkr.ecr.us-west-2.amazonaws.com/m2-enterprise-build-tools:8.0.9.R1

    • 对于 Micro Focus v7:输入 673918848628.dkr.ecr.us-west-2.amazonaws.com/m2-enterprise-build-tools:7.0.R10

  9. 服务角色下,选择现有服务角色,然后在角色 ARN 字段中,选择您之前创建的服务角色,例如 BankdemoCodeBuildServiceRole

  10. 构建规范部分中,选择使用构建规范文件

  11. 构件部分的类型下,选择 Amazon S3,然后选择您的输出存储桶,例如 codebuild-regionId-accountId-output-bucket

  12. 名称字段中,输入存储桶中要包含构建输出构件的文件夹的名称,例如 bankdemo-output.zip

  13. 构件打包下,选择 Zip

  14. 选择创建构建项目

步骤 9:启动构建

在此步骤中,启动构建。

  1. 登录到 CodeBuild 控制台。

  2. 在左侧导航窗格中,选择构建项目

  3. 选择您之前创建的构建项目,例如 codebuild-bankdemo-project

  4. 选择启动构建

此命令开始构建。构建以异步方式运行。此命令的输出是一个包含属性 ID 的 JSON。此属性 ID 是对刚刚启动的构建的 CodeBuild 构建 ID 的引用。您可以在 CodeBuild 控制台中查看构建的状态。您还可以在控制台中查看有关构建执行的详细日志。有关更多信息,请参阅《AWS CodeBuild 用户指南》中的查看详细构建信息

当前阶段完成后,即表示您的构建已成功完成,并且编译的构件已在 Amazon S3 上准备就绪。

步骤 10:下载输出构件

在此步骤中,从 Amazon S3 下载输出构件。Micro Focus 构建工具可以创建几种不同的可执行文件类型。在本教程中,它将生成共享对象。

  1. 登录 Amazon S3 控制台。

  2. 存储桶 role="bold"> 部分中,选择您的输出存储桶的名称,例如 codebuild-regionId-accountId-output-bucket

  3. 选择下载 role="bold">。

  4. 解压下载的文件。导航到目标文件夹以查看构建构件。其中包括 .so Linux 共享对象。

清理资源

如果您不再需要为本教程创建的资源,请将其删除,以免产生额外费用。为此,请完成以下步骤:

  • 删除您为本教程创建的 S3 存储桶。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的删除存储桶

  • 删除您为本教程创建的 IAM 策略。有关更多信息,请参阅《IAM 用户指南》中的删除 IAM 策略

  • 删除您为本教程创建的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的删除角色或实例配置文件

  • 删除您为本教程创建的 CodeBuild 项目。有关详细信息,请参阅《AWS CodeBuild 用户指南》中的 在 CodeBuild 中删除构建项目