本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 和 Terraform 現代化 AWS Transform 和部署大型主機應用程式
Mason Cahill、Qandi Jhandi、Prachi Khanna、Sivasubramanian Ramani 和 Santosh Kumar Singh,Amazon Web Services
Summary
AWS Transform 可以加速 .NET、大型主機和 VMware 工作負載的大規模現代化。它部署專門的 AI 代理器,可自動化複雜的任務,例如評估、程式碼分析、重構、分解、相依性映射、驗證和轉型規劃。此模式示範如何使用 Hashicorp Terraform AWS Transform 來現代化大型主機應用程式,然後將其部署至 AWS 基礎設施。這些step-by-step說明可協助您將 CardDemo 轉換為從 COBOL 到現代 Java 應用程式的範例開放原始碼大型主機應用程式。
先決條件和限制
先決條件
作用中 AWS 帳戶
建立 AWS 資源和部署應用程式的管理許可
Terraform 1.5.7 版或更新版本,已設定
AWS Terraform 提供者,已設定
AWS IAM Identity Center,已啟用
AWS Transform,已啟用
加入 AWS Transform 工作區的使用者,具有可執行轉換任務的貢獻者角色
限制
AWS Transform 僅適用於某些 AWS 區域。如需支援區域的完整清單,請參閱支援的 區域 AWS Transform。
中有大型主機轉換功能的服務配額 AWS Transform。如需詳細資訊,請參閱Quotas for AWS Transform。
若要在共用工作區上協作,所有使用者都必須是與 AWS Transform Web 應用程式執行個體 AWS IAM Identity Center 相關聯的相同 執行個體的註冊使用者。
Amazon Simple Storage Service (Amazon S3) 儲存貯體和 AWS Transform 必須位於相同的 AWS 帳戶 和 區域。
架構
下圖顯示舊版應用程式和部署至 的end-to-end現代化 AWS 雲端。應用程式和資料庫登入資料存放在 中 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 基礎設施來部署現代化應用程式,包括 Application Load Balancer、Amazon Elastic Compute Cloud (Amazon EC2) 執行個體和 Amazon Relational Database Service (Amazon RDS) 資料庫。Terraform 會將現代化程式碼部署到 Amazon EC2 執行個體。
VSAM 檔案會上傳至 Amazon EC2,並從 Amazon EC2 遷移至 Amazon RDS 資料庫。
工具
AWS 服務
其他工具
程式碼儲存庫
此模式的程式碼可在 GitHub 大型主機轉換 E2E 儲存庫中使用。此模式使用開放原始碼 AWS CardDemo 大型主機應用程式做為範例應用程式。
最佳實務
指派遷移目標程式碼和資源的完整擁有權。
在擴展到完整遷移之前,開發並測試概念驗證。
保護所有利益相關者的承諾。
建立清晰的通訊管道。
定義並記錄可行產品 (MVP) 的最低需求。
設定明確的成功條件。
史詩
任務 | 描述 | 所需的技能 |
---|
建立儲存貯體。 | 在啟用 的相同 AWS 帳戶 和區域中建立 Amazon S3 AWS Transform 儲存貯體。您可以使用此儲存貯體來存放建置和執行應用程式所需的大型主機應用程式程式碼、資料和其他指令碼。 AWS Transform 使用此儲存貯體來存放重構程式碼和與轉換相關聯的其他檔案。如需說明,請參閱 Amazon S3 文件中的建立儲存貯體。 | 一般 AWS、AWS 管理員 |
設定儲存貯體的 CORS 許可。 | 設定儲存貯體進行 AWS Transform 存取時,您需要設定儲存貯體的跨來源資源共用 (CORS)。如果未正確設定,您可能無法使用 的內嵌檢視或檔案比較功能 AWS Transform。如需如何為儲存貯體設定 CORS 的說明,請參閱在 Amazon S3 儲存貯體中使用跨來源資源共用。 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 文件中的上傳物件。 Amazon S3
| General AWS,應用程式開發人員 |
任務 | 描述 | 所需的技能 |
---|
設定 AWS Transform 任務。 | 使用您的登入資料登入,以存取 AWS Transform Web 應用程式。 依照 AWS Transform 文件中設定工作區的指示建立新的工作區。 在工作區登陸頁面上,選擇請求 AWS Transform 以建立任務。 接著,選擇 Mainframe Modernization 做為任務類型。 在聊天視窗中,輸入轉換程式碼到 Java。 檢閱建議的任務類型、名稱和目標。若要確認,請輸入是。 選擇建立作業。
| 應用程式開發人員、應用程式擁有者 |
設定連接器。 | 使用您建立的 Amazon S3 儲存貯體設定連接器。如需說明,請參閱 AWS Transform 文件中的設定連接器。出現提示時,請在 Amazon S3 儲存貯體中輸入 aws-mainframe-modernization-carddemo zip 檔案的路徑。 等候分析完成。
| 應用程式開發人員、應用程式擁有者 |
轉換程式碼。 | 根據 AWS Transform 文件中分析程式碼中的指示,檢閱程式碼分析的結果。 根據 AWS Transform 文件中重構程式碼中的指示重構大型主機程式碼。對於範例 CardDemo 大型主機應用程式,您可以接受預設設定。 等待重構完成。 選擇檢視結果,以查看 Amazon S3 儲存貯體中重構程式碼的路徑。請記下此檔案路徑。以供稍後使用。
| 應用程式開發人員、應用程式擁有者 |
任務 | 描述 | 所需的技能 |
---|
更新 範本。 | 輸入下列命令,將大型主機轉換 E2E 儲存庫複製到本機工作站: git clone https://github.com/aws-samples/sample-mainframe-transformation-e2e.git
輸入下列命令以擷取您目前的公有 IP 地址: curl checkip.amazonaws.com
輸入下列命令以導覽至基礎設施目錄: 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 Resource Name (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 |
任務 | 描述 | 所需的技能 |
---|
安裝所需的軟體。 | 使用 連線至 Amazon EC2 執行個體AWS Systems Manager Session Manager。 輸入下列命令以切換到根使用者: 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 頁面。
| 應用程式開發人員、遷移工程師 |
任務 | 描述 | 所需的技能 |
---|
下載並擷取產生的程式碼。 | 輸入下列命令,讓 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 伺服器。由於缺少必要的資料庫,這將導致錯誤。您必須先設定資料庫,才能重新啟動伺服器。
| 應用程式開發人員、遷移工程師 |
任務 | 描述 | 所需的技能 |
---|
建立資料庫和 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 檔案屬性,並執行必要的查詢來修改資料庫。
| 應用程式開發人員、遷移工程師 |
任務 | 描述 | 所需的技能 |
---|
在 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 ,其中 <dns_name> 是 Application Load Balancer 的 DSN 名稱。這會啟動資料載入指令碼。 等待指令碼完成。完成後,瀏覽器會顯示 DONE。 在 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 檔案中,更新下列檔案組態: 如需參考,請參閱程式碼儲存庫中的範例 DUSRSECJ.jcl.groovy 指令碼。 儲存並關閉檔案。
| 應用程式開發人員 |
任務 | 描述 | 所需的技能 |
---|
測試現代化應用程式。 | 透過 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 。 選擇要執行的指令碼,例如 DUSRSECJ.jcl.groovy 指令碼。 確認指令碼已成功執行。以下是成功執行後的範例輸出。 { "exitCode": 0, "stepName": "STEP03", "program": "IDCAMS", "status": "Succeeded" }
| 應用程式開發人員、測試工程師 |
任務 | 描述 | 所需的技能 |
---|
準備刪除基礎設施。 | 輸入下列命令以從 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 相關錯誤 | 檢查 中的 catalina.out /opt/tomcat/apache-tomcat-10.0.23/logs 是否有任何例外狀況。 輸入下列命令,將 Tomcat 資料夾的擁有權變更為 Tomcat 使用者: chown -R tomcat:tomcat /opt/tomcat/*
|
URL 名稱未載入 | 請確定 Application Load Balancer 安全群組在傳入規則中具有您的 IP 地址做為來源。 |
Tomcat 日誌中的身分驗證問題 | 確認 中的資料庫秘密密碼 AWS Secrets Manager 和 server.xml 中的密碼相符。 |
相關資源
AWS 方案指引
AWS 服務文件
AWS 部落格文章