使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署 - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署

Mason Cahill、Polaris Jhandi、Prachi Khanna、Sivasubramanian Ramani 和 Santosh Kumar Singh,Amazon Web Services

Summary

AWS Transform可以加速.NET、大型机和 VMware 工作负载的大规模现代化。它部署了专门的 AI 代理,可以自动执行评估、代码分析、重构、分解、依赖关系映射、验证、转型规划等复杂的任务。此模式演示了如何使用对大型机应用程序 AWS Transform 进行现代化改造,然后使用 Hashic orp Terraform 将其部署到 AWS 基础架构。这些 step-by-step说明可帮助您将开源大型机应用程序示例,从 COBOL 转换为CardDemo现代 Java 应用程序。

先决条件和限制

先决条件

限制

  • AWS Transform 仅在某些版本中可用 AWS 区域。有关支持区域的完整列表,请参阅 AWS Transform支持的区域

  • AWS Transform对大型机转换功能设有服务配额。有关更多信息,请参阅 AWS Transform配额

  • 要在共享工作区上进行协作,所有用户都必须是与您 AWS IAM Identity Center 的 AWS Transform Web 应用程序实例关联的相同实例的注册用户。

  • 亚马逊简单存储服务 (Amazon S3) Semple Storage Service 存储桶 AWS Transform 必须位于 AWS 账户 相同的区域中。

架构

下图显示了旧版应用程序的 end-to-end现代化以及部署到的过程 AWS 云。应用程序和数据库凭证存储在中 AWS Secrets Manager,Amazon CloudWatch 提供监控和记录功能。

AWS Transform 通过 Terraform 实现大型机应用程序和部署现代化。

下图显示了如下工作流:

  1. 通过 AWS IAM Identity Center,用户在中进行身份验证和访问 AWS Transform 。 AWS 账户

  2. 用户将 COBOL 大型机代码上传到 Amazon S3 存储桶,然后在 AWS Transform中启动转换。

  3. AWS Transform 将 COBOL 代码现代化为云原生 Java 代码,并将现代化的代码存储在 Amazon S3 存储桶中。

  4. Terraform 创建用于部署现代化应用程序 AWS 的基础设施,包括应用程序负载均衡器、亚马逊弹性计算云 (Amazon EC2) 实例和亚马逊关系数据库服务 (Amazon RDS) 数据库。Terraform 将现代化的代码部署到亚马逊实例。 EC2

  5. VSAM 文件已上传到亚马逊, EC2 然后从亚马逊迁移 EC2 到亚马逊 RDS 数据库。

工具

AWS 服务

  • 亚马逊弹性计算云 (Amazon EC2) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器,并快速纵向扩展或缩减这些服务器。在这种模式下,SQL Server 故障转移群集实例安装在亚马逊 EC2 实例上。

  • AWS IAM Identity Center帮助您集中管理对您的应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。

  • Amazon Relational Database Service(Amazon RDS)可帮助您在 AWS 云中设置、操作和扩展关系数据库。

  • AWS Secrets Manager 可帮助您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 进行的 API 调用,以便以编程方式检索此密钥。

  • Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

  • AWS Transform使用 agentic AI 来帮助您加快传统工作负载(例如.NET、大型机和工作负载)的现代化。 VMware

其他工具

  • Apache Maven 是一款适用于 Java 项目的开源软件项目管理和构建自动化工具。

  • Apache Tomcat 是一款开源 Servlet 容器和用于 Java 代码的 Web 服务器。

  • HashiCorp Terraform 是一款基础设施即代码(IaC)工具,可帮助您使用代码来预调配和管理云基础设施和资源。

  • Spring Boot 是一个开源框架,以 Java 的 Spring 框架为基础构建。

代码存储库

此模式的代码可在 GitHub 大型机转换 E2E 存储库中找到。此模式使用开源 AWS CardDemo大型机应用程序作为示例应用程序。

最佳实践

  • 分配要迁移的代码和资源的全部所有权。

  • 先开发并测试概念验证,再全面迁移。

  • 确保得到所有利益相关者的承诺。

  • 建立清晰的沟通渠道。

  • 定义并记录最简可行产品(MVP)要求。

  • 设定明确的成功标准。

操作说明

Task说明所需技能

创建存储桶。

在已启用的相同 AWS 账户 区域中创建 Amazon S3 存储桶。 AWS Transform 您可以使用此存储桶存储构建和运行应用程序所需的大型机应用程序代码、数据和其他脚本。 AWS Transform 使用此存储桶存储重构后的代码和其他与转换相关的文件。有关说明,请参阅 Amazon S3 文档中的创建存储桶

常规 AWS、AWS 管理员

设置存储桶的 CORS 权限。

在设置存储桶以进行 AWS Transform 访问时,您需要为存储桶配置跨源资源共享 (CORS)。如果设置不正确,可能无法使用 AWS Transform的内联查看或文件比较功能。有关如何为存储桶配置 CORS 的说明,请参阅 Amazon S3 存储桶中的使用跨域资源共享。有关策略,请参阅 AWS Transform 文档中的 S3 存储桶 CORS 权限

常规 AWS、AWS 管理员

准备大型机应用程序代码示例。

  1. 输入以下命令将CardDemo存储库克隆到本地工作站:

    git clone https://github.com/aws-samples/aws-mainframe-modernization-carddemo.git
  2. aws-mainframe-modernization-carddemo 文件夹压缩为 ZIP 文件。

  3. 将 ZIP 文件上传到您创建的 Amazon S3 存储桶。有关说明,请参阅 Amazon S3 文档中的上传对象

常规 AWS,应用程序开发人员
Task说明所需技能

设置作 AWS Transform 业。

  1. 使用您的凭据登录即可访问 AWS Transform Web 应用程序。

  2. 按照 AWS Transform 文档中设置工作区中的说明创建新的工作区

  3. 在您的工作空间登录页面上,选择询问 AWS Transform 以创建作业

  4. 接下来,选择大型机现代化作为作业类型。

  5. 在聊天窗口中,输入将代码转换为 Java

  6. 查看建议的作业类型、名称和目标。按 Enter 键以确认。

  7. 请选择创建任务。 

应用程序开发人员、应用程序所有者

设置连接器。

  1. 使用您创建的 Amazon S3 存储桶设置连接器。有关说明,请参阅 AWS Transform 文档中的设置连接器。出现提示时,输入 Amazon S3 存储桶中 aws-mainframe-modernization-carddemo zip 文件的路径。

  2. 等待分析完成。

应用程序开发人员、应用程序所有者

转换代码。

  1. 根据 AWS Transform 文档中分析代码中的说明查看代码分析的结果。

  2. 根据文档中重构代码中的说明重构大型机代码。 AWS Transform 对于示例 CardDemo 大型机应用程序,您可以接受默认设置。

  3. 等待重构完成。

  4. 选择查看结果以查看 Amazon S3 存储桶中重构代码的路径。记下此文件路径。您将在以后需要它。

应用程序开发人员、应用程序所有者
Task说明所需技能

更新模板。

  1. 输入以下命令将大型机转换 E2E 存储库克隆到您的本地工作站:

    git clone https://github.com/aws-samples/sample-mainframe-transformation-e2e.git
  2. 输入以下命令检索您当前的公共 IP 地址:

    curl checkip.amazonaws.com
  3. 输入以下命令导航到 infra 目录:

    cd mainframe-transformation-e2e/infra
  4. 打开 variables.tf 文件。

  5. YOUR_IP_ADDRESS_HERE 替换为您的 IP 地址。

  6. 如果有公共托管区,请执行以下操作:

    1. hosted_zone_name 替换为您的托管区名称。

    2. hosted_zone_enabled 设置为 true

    如果没有公共托管区,请执行以下操作:

    1. 输入以下命令生成自签名证书。

      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
    2. 输入以下命令将证书导入 AWS Certificate Manager (ACM):

      aws acm import-certificate \ --certificate fileb://my-certificate.pem \ --private-key fileb://my-private-key.pem

      此命令的输出包含导入证书的 Amazon 资源名称(ARN)。

    3. self_signed_cert_arn 替换为证书的 ARN。

    4. hosted_zone_enabled 设置为 false

  7. aws_region 更改为目标区域。默认值为 us-east-1

  8. 保存并关闭 variables.tf 文件。

注意

对于生产或类似于生产的环境,请配置其他安全组件。例如,启用针对应用程序负载均衡器的AWS WAF 保护

常规 AWS、AWS 管理员

部署基础设施。

  1. 输入以下命令初始化 Terraform:

    terraform init
  2. 输入以下命令生成执行计划:

    terraform plan
  3. 审查计划,并验证将要创建的资源和基础设施组件。

  4. 输入以下命令部署基础设施:

    terraform apply
  5. 出现提示时,输入确认部署。

  6. 请等待部署完成。

Terraform
Task说明所需技能

安装所需软件:

  1. 使用连接到您的 Amazon EC2 实例AWS Systems Manager Session Manager

  2. 输入以下命令切换到根用户:

    sudo su -
  3. 输入以下命令导航到 scripts 目录:

    cd /opt/scripts
  4. 查看 install_software.sh 脚本。此脚本安装 Java 17、Apache Maven 和 Apache Tomcat 10.0.23。

  5. 根据使用案例需要更新脚本。

  6. 输入以下命令将脚本设置为可执行:

    chmod +x install_software.sh
  7. 输入以下命令运行脚本:

    ./install_software.sh
应用程序开发人员、迁移工程师

验证软件安装。

  1. 输入以下命令启动 Tomcat 服务器:

    /opt/tomcat/apache-tomcat-10.0.23/bin/startup.sh
  2. 输入以下命令验证 Web 服务器响应:

    curl http://localhost:8080

    输出应确认 Tomcat 正在提供 HTML 页面。

应用程序开发人员、迁移工程师
Task说明所需技能

下载并解压生成的代码。

  1. 输入以下命令将 download_and_extract.sh 脚本设置为可执行。此脚本下载存储在 Amazon S3 存储桶中的重构代码和 Gapwalk 运行时库:

    chmod +x /opt/scripts/download_and_extract.sh
  2. 输入以下命令运行 脚本。将 <file_path> 替换为 Amazon S3 存储桶中 generated.zip 文件的路径:

    ./download_and_extract.sh <file_path>
    注意

    文件路径通常为 s3://<bucket-name>/transform_output/<aws_transform_job_id>/codetransformation/generated.zip

  3. 输入以下命令导航至 shared 文件夹:

    cd /opt/runtime/velocity/shared
  4. 输入以下命令复制 deploy-velocity-runtime.sh 脚本:

    cp /opt/scripts/deploy-velocity-runtime.sh .
  5. 输入以下命令将复制的脚本设置为可执行:

    chmod +x deploy-velocity-runtime.sh
  6. 输入以下命令运行 脚本。此脚本将项目对象模型(POM)文件中的所有必要 Web 应用程序存档(WAR)依赖项复制到存储库文件夹中:

    ./deploy-velocity-runtime.sh
  7. 检查是否不存在错误,且所需的 WAR 依赖项是否已安装在本地 Maven 存储库中,从而验证执行是否成功。

应用程序开发人员、迁移工程师

构建现代化的应用程序。

  1. 输入以下命令导航到 app-pom 项目目录:

    cd /opt/codebase/app-pom/
  2. 输入以下命令安装 Maven:

    mvn clean install
  3. 等待软件安装和构建完成。

    注意

    为 CardDemo 应用程序运行此命令时,您可能会遇到该app-web项目的警告消息。可以安心地忽略这些警告。

  4. 构建成功完成后,确认存在 app-service/target/app-service-1.0.0.warapp-web/target/app-web-1.0.0.war

    重要

    请勿在此阶段重新启动 Tomcat 服务器。由于缺少必要的数据库,会导致错误。必须先设置数据库,然后才能重新启动服务器。

应用程序开发人员、迁移工程师
Task说明所需技能

创建数据库和 JICS 架构。

  1. 输入以下命令将 csd commands 文件夹重命名为 csd_commands。这将移除文件夹名称中的空格:

    mv /opt/codebase/extra/csd\ commands/ /opt/codebase/extra/csd_commands
  2. 输入以下命令导航到 scripts 目录:

    cd /opt/scripts
  3. 输入以下命令将数据库迁移脚本设置为可执行:

    chmod +x database_migration_setup.sh
  4. 输入以下命令配置下述变量作为参数:

    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_endpoint> 是您通过 Terraform 部署的 Amazon RDS 数据库的端点。

    • <secret_name>是你通过 Terraform 部署的 AWS Secrets Manager 密钥的名称。

  5. 输入以下命令运行数据库迁移脚本:

    ./database_migration_setup.sh $RDS_ENDPOINT $SECRET_NAME $JICS_SQL_SCRIPT_DIR $INIT_JICS_SQL_SCRIPT_DIR
  6. 输入以下命令以从您的 Amazon EC2 实例连接到数据库:

    psql -h <Your Amazon RDS Endpoint> -U foo -p 5432 postgres
  7. 出现提示时,输入您的数据库凭证。

应用程序开发人员、迁移工程师

验证数据库创建。

  1. 输入以下命令查看所有数据库:

    \l
  2. 输入以下命令切换至 jics 数据库:

    \c jics
  3. 输入以下命令查看所创建表的列表:

    \dt
应用程序开发人员、迁移工程师

将数据迁移到 JICS 数据库。

  1. 输入以下命令将 execute_listcat_sql.sh 脚本设置为可执行:

    chmod +x execute_listcat_sql.sh
  2. 输入以下命令配置 PATH_TO_LISTCAT_SQL_FILES 变量(包含 LISTCAT SQL 文件的目录):

    PATH_TO_LISTCAT_SQL_FILES=/opt/codebase/extra/listcat/sql/cluster/aws-mainframe-modernization-carddemo-main/app/catlg
  3. 确保按照前面的说明正确设置 RDS_ENDPOINTSECRET_NAMEPATH_TO_LISTCAT_SQL_FILES 变量。

  4. 输入以下命令运行 execute_listcat_sql.sh 脚本:

    ./execute_listcat_sql.sh $RDS_ENDPOINT $SECRET_NAME $PATH_TO_LISTCAT_SQL_FILES

    此脚本更新 JICS 数据库中的 VSAM 文件属性,并运行必要的查询来修改数据库。

应用程序开发人员、迁移工程师
Task说明所需技能

在 Amazon EC2 实例上安装现代化的应用程序。

  1. 输入以下命令将 application_installer.sh 脚本设置为可执行:

    chmod +x /opt/scripts/application_installer.sh
  2. 输入以下命令配置下述变量作为参数:

    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。

  3. 输入以下命令运行 application_installer.sh 脚本:

    ./application_installer.sh $RDS_ENDPOINT $SECRET_NAME $AIX_JSON_FILE_PATH $LISTCAT_JSON_FILES_DIR $S3_PATH_FOR_EBCDIC_DATA_FILES
  4. /opt/tomcat/apache-tomcat-10.0.23/workingdir/config文件夹中的 application-utility-pgm.yml 文件中,将编码参数更改为以下内容:

    encoding : CP1047
    注意

    使用 AWS Blu Ag AWS Transform e 自动重构应用程序时,您可以通过 YAML 文件配置应用程序及其运行时环境。例如,您可以在应用程序的 application-main.yml 文件中配置日志记录。有关可用属性的更多信息,请参阅启用 AWS Blu Age Runtime 的属性

应用程序开发人员、云架构师

重新启动 Tomcat 服务器。

  1. 输入以下命令导航到工作目录:

    cd /opt/tomcat/apache-tomcat-10.0.23/workingdir
  2. 输入以下命令停止并启动 Tomcat 服务器:

    /opt/tomcat/apache-tomcat-10.0.23/bin/shutdown.sh /opt/tomcat/apache-tomcat-10.0.23/bin/startup.sh
  3. 输入以下命令监控 Tomcat 服务启动日志:

    tail -f /opt/tomcat/apache-tomcat-10.0.23/logs/catalina.out
应用程序开发人员、云架构师

迁移 VSAM 数据集。

  1. 打开亚马逊 EC2 控制台

  2. 在导航窗格中,选择 Load Balancers (负载均衡器)

  3. 选择通过 Terraform 创建的负载均衡器。

  4. 找到应用程序负载均衡器的域名系统(DNS)名称,例如 application-load-balancer-<id>.<region>.elb.amazonaws.com

  5. 在浏览器中,导航到 http://<dns_name>/gapwalk-application/scripts/data-load,其中 <dns_name> 是应用程序负载均衡器的 DSN 名称。这将启动数据加载脚本。

  6. 等待脚本完成。完成后,浏览器将显示完成

  7. 在 Amazon EC2 实例上,打开一个新的终端。

  8. 输入以下命令连接到 Amazon RDS 数据库,并将 <database_endpoint> 替换为您的值:

    psql -h <database_endpoint> -U foo -p 5432 postgres
  9. 出现提示时,输入您的凭证以连接至数据库。

  10. 输入以下命令查看所有数据库:

    \l
  11. 输入以下命令切换至 bluesam 数据库:

    \c bluesam
  12. 输入以下命令查看所创建表的列表:

    \dt
  13. 输入以下命令验证数据加载:

    SELECT * FROM public.aws_m2_carddemo_usrsec_vsam_ksds;

    输出应显示返回的 10 条记录。

应用程序开发人员、迁移工程师

更新 Groovy 脚本中的参数。

  1. 输入以下命令导航到脚本目录:

    cd /opt/tomcat/apache-tomcat-10.0.23/webapps/workingdir/scripts
  2. 在所有包含对平面文件引用内容的 Groovy 文件中,更新以下文件配置:

    • 本地文件路径 — Amazon EC2 实例本地目录中平面文件的路径

    • 文件系统类型 – 包含平面文件的文件系统

    • 记录大小 – 平面文件的大小

    有关参考,请参阅代码存储库中的 DUSRSECJ.jcl.groovy 脚本示例。

  3. 保存并关闭文件。

应用程序开发人员
Task说明所需技能

测试现代化的应用程序。

  1. 通过应用程序负载均衡器(http://<your-load-balancer-dns>)或托管区(https://myhostedzone.dev/)访问在线应用程序。

  2. 对于事务 ID,输入 CC00

  3. 对于用户名,输入 USER0001

  4. 对于密码,输入 PASSWORD

    成功登录后,主菜单将显示。

应用程序开发人员、测试工程师

验证批处理脚本。

  1. 通过应用程序负载均衡器(http://<your-load-balancer-dns>/gapwalk-application/scripts)或托管区(https://myhostedzone.dev/gapwalk-application/scripts)访问脚本界面。

  2. 选择要运行的脚本,例如 DUSRSECJ.jcl.groovy 脚本。

  3. 验证脚本是否运行成功。以下为成功执行后的输出示例。

    { "exitCode": 0, "stepName": "STEP03", "program": "IDCAMS", "status": "Succeeded" }
应用程序开发人员、测试工程师
Task说明所需技能

准备删除基础设施。

  1. 输入以下命令从 Amazon RDS 实例中移除删除保护:

    aws rds modify-db-instance \ --db-instance-identifier <your-db-instance-name> \ --no-deletion-protection \ --apply-immediately
  2. 输入以下命令从应用程序负载均衡器中移除删除保护:

    aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn <your-load-balancer-arn> \ --attributes Key=deletion_protection.enabled,Value=false
  3. 输入以下命令删除 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

删除基础设施。

重要

这些步骤将永久删除您的资源。在继续之前,请确保您已备份所有重要数据。

  1. 输入以下命令导航至 infra 文件夹:

    cd /mainframe-transformation-e2e/infra
  2. 输入以下命令删除基础设施:

    terraform destroy --auto-approve    
常规 AWS

问题排查

问题解决方案

Terraform 身份验证

  1. 确保正确配置了 AWS 凭据。

  2. 确认您选择了正确的 AWS 配置文件。

  3. 确认您拥有必要的权限。

Tomcat 相关错误

  1. 检查 /opt/tomcat/apache-tomcat-10.0.23/logs 中的 catalina.out,查看是否有任何异常。

  2. 输入以下命令将 Tomcat 文件夹的所有权更改为 Tomcat 用户:

    chown -R tomcat:tomcat /opt/tomcat/*

URL 名称未加载

确保在入站规则中,应用程序负载均衡器安全组将您的 IP 地址作为源。

Tomcat 日志中存在身份验证问题

确认中的数据库密钥密码 AWS Secrets Manager 和 server.xml 中的密码匹配。

相关资源

AWS 规范性指导

AWS 服务文档

AWS 博客文章