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

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

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

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

摘要

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 Cloud。应用程序和数据库凭证存储在中 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 到 Amazon RDS 数据库。

工具

AWS 服务

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

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

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

  • 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 Framework 之上的开源框架。

代码存储库

此模式的代码可在 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. 查看建议的工作类型、名称和目标。要进行确认,请输入 “”。

  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文件。

注意

对于生产环境或类似生产的环境,请配置其他安全组件。例如,为您的 Application Load Balancer 启用AWS WAF 保护

常规 AWS、AWS 管理员

部署基础设施。

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

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

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

  4. 输入以下命令部署基础架构:

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

  6. 等到部署完成。

Terraform
Task描述所需技能

安装所需的软件。

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

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

    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. 通过检查是否没有错误以及本地 Maven 存储库中是否安装了所需的 WAR 依赖关系来验证是否成功执行。

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

构建现代化的应用程序。

  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_NAME、和PATH_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. 打开 Amazon EC2 控制台

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

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

  4. 找到 Application Load Balancer 的域名系统 (DNS) 名称,例如application-load-balancer-<id>.<region>.elb.amazonaws.com

  5. 在浏览器中,导航到 http://<dns_name>/gapwalk-application/scripts/data-load Applicat <dns_name> ion Load Balancer 的 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 实例本地目录中平面文件的路径

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

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

    有关参考,请参阅代码存储库中的 d usrsecj.jcl.Gr oovy 脚本示例。

  3. 保存并关闭文件。

应用程序开发人员
Task描述所需技能

测试现代化的应用程序。

  1. 通过 Application Load Balancer (http://<your-load-balancer-dns>) 或托管区域 (https://myhostedzone.dev/) 访问在线应用程序。

  2. 对于交易 ID,请输入CC00

  3. 对于用户名,请输入USER0001

  4. 要输入密码,请输入PASSWORD

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

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

验证批处理脚本。

  1. 通过 Application Load Balancer (http://<your-load-balancer-dns>/gapwalk-application/scripts) 或托管区域 (https://myhostedzone.dev/gapwalk-application/scripts) 访问脚本接口。

  2. 选择要运行的脚本,例如 d usrsecj.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. 输入以下命令从 Application Load Balancer 中移除删除保护:

    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. 请查看 c atalina.out 中是否存在任何例外/opt/tomcat/apache-tomcat-10.0.23/logs情况。

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

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

网址名称未加载

确保 Application Load Balancer 安全组在入站规则中将你的 IP 地址作为来源。

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

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

相关资源

AWS 规范性指导

AWS 服务文档

AWS 博客文章