本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 IAM Identity Center,用户在中进行身份验证和访问 AWS Transform 。 AWS 账户
用户将 COBOL 大型机代码上传到 Amazon S3 存储桶,然后在中启动转换。 AWS Transform
AWS Transform 将 COBOL 代码现代化为云原生 Java 代码,并将现代化的代码存储在 Amazon S3 存储桶中。
Terraform 创建用于部署现代化应用程序 AWS 的基础设施,包括应用程序负载均衡器、亚马逊弹性计算云 (Amazon EC2) 实例和亚马逊关系数据库服务 (Amazon RDS) 数据库。Terraform 将现代化的代码部署到亚马逊实例。 EC2
VSAM 文件已上传到亚马逊, EC2 然后从亚马逊迁移 EC2 到 Amazon RDS 数据库。
工具
AWS 服务
其他工具
代码存储库
此模式的代码可在 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 管理员 |
准备大型机应用程序代码示例。 | 输入以下命令将CardDemo存储库克隆到您的本地工作站: git clone https://github.com/aws-samples/aws-mainframe-modernization-carddemo.git
将该aws-mainframe-modernization-carddemo 文件夹压缩为 ZIP 文件。 将 ZIP 文件上传到您创建的 Amazon S3 存储桶。有关说明,请参阅 Amazon S3 文档中的上传对象。
| 常规 AWS,应用程序开发人员 |
Task | 描述 | 所需技能 |
---|
设置作 AWS Transform 业。 | 使用您的凭据登录即可访问 AWS Transform Web 应用程序。 按照 AWS Transform 文档中设置工作区中的说明创建新的工作区。 在您的工作空间登录页面上,选择询问 AWS Transform 以创建作业。 接下来,选择大型机现代化作为工作类型。 在聊天窗口中,输入将代码转换为 Java。 查看建议的工作类型、名称和目标。要进行确认,请输入 “是”。 请选择创建任务。
| 应用程序开发人员、应用程序所有者 |
设置连接器。 | 使用您创建的 Amazon S3 存储桶设置连接器。有关说明,请参阅 AWS Transform 文档中的设置连接器。出现提示时,在 Amazon S3 存储桶中输入 aws-mainframe-modernization-carddemo zip 文件的路径。 等待分析完成。
| 应用程序开发人员、应用程序所有者 |
转换代码。 | 根据 AWS Transform 文档中分析代码中的说明查看代码分析的结果。 根据文档中重构代码中的说明重构大型机代码。 AWS Transform 对于示例 CardDemo 大型机应用程序,您可以接受默认设置。 等待重构完成。 选择 “查看结果” 以查看 Amazon S3 存储桶中重构代码的路径。记下这个文件路径。您将在以后需要它。
| 应用程序开发人员、应用程序所有者 |
Task | 描述 | 所需技能 |
---|
更新模板。 | 输入以下命令将大型机转换 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 文件。 YOUR_IP_ADDRESS_HERE 替换为您的 IP 地址。
如果您有公共托管区域,请执行以下操作: 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)。 self_signed_cert_arn 替换为证书的 ARN。
将 hosted_zone_enabled 设置为 false 。
切换aws_region 到目标区域。默认值为 us-east-1 。 保存并关闭 variables.tf 文件。
| 常规 AWS、AWS 管理员 |
部署基础设施。 | 输入以下命令来初始化 Terraform: terraform init
输入以下命令以生成执行计划: terraform plan
审查计划,并验证将要创建的资源和基础架构组件。 输入以下命令部署基础架构: terraform apply
出现提示时,输入 yes 以确认部署。 等到部署完成。
| Terraform |
Task | 描述 | 所需技能 |
---|
安装所需的软件。 | 使用连接到您的 Amazon EC2 实例AWS Systems Manager Session Manager。 输入以下命令切换到 root 用户: 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
输入以下命令以验证 Web 服务器的响应: curl http://localhost:8080
输出应确认 Tomcat 正在提供一个 HTML 页面。
| 应用程序开发人员、迁移工程师 |
Task | 描述 | 所需技能 |
---|
下载并解压缩生成的代码。 | 输入以下命令使 download_and_extract.sh 脚本可执行。此脚本下载存储在 Amazon S3 存储桶中的重构代码和 Gapwalk 运行时库: chmod +x /opt/scripts/download_and_extract.sh
输入以下命令运行 脚本。<file_path> 替换为您的 Amazon S3 存储桶中 generated.zip 文件的路径: ./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 应用程序存档 (WAR) 依赖项复制到存储库文件夹中: ./deploy-velocity-runtime.sh
通过检查是否没有错误以及本地 Maven 存储库中是否安装了所需的 WAR 依赖关系来验证是否成功执行。
| 应用程序开发人员、迁移工程师 |
构建现代化的应用程序。 | 输入以下命令以导航到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 服务器。由于缺少所需的数据库,这会导致错误。必须先设置数据库,然后才能重新启动服务器。
| 应用程序开发人员、迁移工程师 |
Task | 描述 | 所需技能 |
---|
创建数据库和 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
输入以下命令来配置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
确保按照前面的说明正确设置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 文件属性并运行必要的查询来修改数据库。
| 应用程序开发人员、迁移工程师 |
Task | 描述 | 所需技能 |
---|
在 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
| 应用程序开发人员、云架构师 |
重新启动 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 Applicat <dns_name> ion Load Balancer 的 DSN 名称在哪里。这将启动数据加载脚本。 等待脚本完成。完成后,浏览器将显示 “完成”。 在 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 文件中,更新以下文件配置: 有关参考,请参阅代码存储库中的 d usrsecj.jcl.Gr oovy 脚本示例。 保存并关闭文件。
| 应用程序开发人员 |
Task | 描述 | 所需技能 |
---|
测试现代化的应用程序。 | 通过 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 ) 访问脚本接口。 选择要运行的脚本,例如 d usrsecj.jcl.Groovy 脚本。 验证脚本是否成功运行。以下是成功执行后的输出示例。 { "exitCode": 0, "stepName": "STEP03", "program": "IDCAMS", "status": "Succeeded" }
| 应用程序开发人员、测试工程师 |
Task | 描述 | 所需技能 |
---|
准备删除基础架构。 | 输入以下命令来移除 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 相关的错误 | 请查看 c atalina.out 中是否存在任何例外/opt/tomcat/apache-tomcat-10.0.23/logs 情况。 输入以下命令将 Tomcat 文件夹的所有权更改为 Tomcat 用户: chown -R tomcat:tomcat /opt/tomcat/*
|
网址名称未加载 | 确保 Application Load Balancer 安全组在入站规则中将你的 IP 地址作为来源。 |
Tomcat 日志中存在身份验证问题 | 确认中的数据库密钥密码 AWS Secrets Manager 和 server.xml 中的密码匹配。 |
相关资源
AWS 规范性指导
AWS 服务文档
AWS 博客文章