

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

# 主机
<a name="mainframe-pattern-list"></a>

**Topics**
+ [z/OS 通过安装 AWS 服务 IBM 进行访问 AWS CLI](access-aws-services-from-ibm-z-os-by-installing-aws-cli.md)
+ [使用 BMC AMI Cloud Data 备份大型机数据并将其存档至 Amazon S3](back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.md)
+ [使用和构建 COBOL Db2 程序 AWS Mainframe Modernization AWS CodeBuild](build-cobol-db2-programs-mainframe-modernization-codebuild.md)
+ [使用 Amazon A EC2 uto Scaling 和 Systems Manager 构建 Micro Focus 企业服务器 PAC](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [在 Amazon Web Services Cloud 中构建高级大型机文件查看器](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [对经过 Blu Age 现代化改造的大型机工作负载进行容器化](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [使用 Python 在 AWS 上将 EBCDIC 数据转换并解压为 ASCII](convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.md)
+ [在 Amazon S3 中使用以下命令将大型机文件从 EBCDIC 格式转换为字符分隔的 ASCII 格式 AWS Lambda](convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda.md)
+ [使用 Micro Focus 转换具有复杂记录布局的大型机数据文件](convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.md)
+ [使用 Terraform 为容器化 Blu Age 应用程序部署环境](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成 Db2 z/OS 数据见解](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成数据见解](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [在 AWS Blu Age 的现代化大型机应用程序中实施基于 Microsoft Entra ID 的身份验证](implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.md)
+ [将 Stonebranch Universal Controller 与 AWS Mainframe Modernization 集成](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [使用 Connect from Precisely 将 VSAM 文件迁移和复制到 Amazon RDS 或 Amazon MSK](migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.md)
+ [使用实现 CardDemo 大型机应用程序的现代化 AWS Transform](modernize-carddemo-mainframe-app.md)
+ [使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署](modernize-mainframe-app-transform-terraform.md)
+ [使用 Rocket Enterprise Server 和 L PageCenter RS X 实现大型机输出管理的现代化 AWS](modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.md)
+ [使用 Rocket Enterprise Server 和 LRS V AWS PSX/MFI 实现大型机批量打印工作负载的现代化](modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.md)
+ [大型机现代化： AWS 使用 Rock DevOps et 软件企业套件开启](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [使用 Micro Focus 企业服务器和 LRS VPSX/MFI 在 AWS 上实现大型机在线打印工作负载的现代化](modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.md)
+ [使用 Transfer Family 将大型机文件直接移动到 Amazon S3](move-mainframe-files-directly-to-amazon-s3-using-transfer-family.md)
+ [优化 AWS Blu Age 现代化应用程序的性能](optimize-performance-aws-blu-age-modernized-application.md)
+ [使用可信上下文在 AWS 上的 Db2 联合身份验证数据库中保护和简化用户访问](secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.md)
+ [以 CSV 文件形式将大规模 Db2 z/OS 数据传输到亚马逊 S3](transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.md)
+ [使用自定义语言将 Easytrieve 转换为现代语言 AWS Transform](transform-easytrieve-modern-languages.md)
+ [更多模式](mainframe-more-patterns-pattern-list.md)

# z/OS 通过安装 AWS 服务 IBM 进行访问 AWS CLI
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli"></a>

*Souma Ghosh、Paulo Vitor Pereira 和 Phil de Valence，Amazon Web Services*

## Summary
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-summary"></a>

[AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 是一个开源工具，用于在命令行 shell 中使用命令来管理多个 AWS 服务。仅需最少的配置，即可从命令提示符、终端和 bash shell 之类命令行会话运行命令，以实现与基于浏览器的 AWS 管理控制台所提供的功能等同的功能。

中的所有 AWS 基础设施即服务 (IaaS) 管理、管理和访问功能 AWS 管理控制台 均在 AWS API 和中提供。 AWS CLI您可以将安装在 IBM z/OS 大型机 AWS CLI 上，以便直接 AWS 服务 从 z/OS 进行访问、管理和交互。使用 AWS CLI 户和应用程序可以执行各种任务，例如：
+ 在 z/OS 和亚马逊简单存储服务 (Amazon S3) Simple Service 对象存储之间传输文件或数据集并查看存储桶的内容
+ 启动和停止不同的 AWS 资源；例如，在 AWS Mainframe Modernization 环境中启动批处理作业
+ 调用 AWS Lambda 函数来实现常见的业务逻辑
+ 与人工智能和机器学习（AI/ML）以及分析服务集成

此模式描述了如何在用户或z/OS. You can install it globally, so it's available to all z/OS用户级别 AWS CLI 上安装、配置和使用。该模式还详细说明了如何 AWS CLI 在 z/OS Unix 系统服务 (USS) 的交互式命令行会话中使用或将其用作批处理作业。

## 先决条件和限制
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-prereqs"></a>

**先决条件**
+ **网络通信从 z/OS 到 AWS**

  默认情况下，在 TCP 端口 443 上使用 HTTPS AWS CLI 向发送请求。 AWS 服务 要 AWS CLI 成功使用，您必须能够在 TCP 端口 443 上建立出站连接。您可以使用以下任一 z/OS USS 命令（其中一些可能未安装在您的环境中）来测试从 z/OS 到的网络连接 AWS：

  ```
  ping amazonaws.com
  dig amazonaws.com
  traceroute amazonaws.com
  curl -k https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html
  ```
+ **AWS 凭证**

  为了与 z/OS 中的 AWS 云 服务进行通信， AWS CLI 需要您配置一些具有访问目标权限的凭据。 AWS 账户对于编程命令 AWS，您可以使用访问密钥，其中包括访问密钥 ID 和私有访问密钥。如果没有访问密钥，您可以使用进行创建 AWS 管理控制台。最佳做法是，除非需要 root 用户，否则不要将 AWS 账户 root 用户的访问密钥用于任何任务。正确的做法是[创建一个新管理员 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#create-an-admin)，并[准备好使用最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#LeastPrivilege)****为该用户设置访问密钥。创建用户后，您可以为该用户[创建访问密钥 ID 和秘密访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)
+ **IBM Python for z/OS**

   AWS CLI 需要 Python 3.8 或更高版本。IBM 已允许 Python z/OS 与[适用于 z/OS 的 IBM 开放企业 Python](https://www.ibm.com/products/open-enterprise-python-zos) 一起运行。IBM Open Enterprise Python 可通过 Shopz SMP/E 免费获得，也可以从 [IBM 网站](https://www.ibm.com/account/reg/signup?formid=urx-49465)下载 PAX 文件。有关说明，请参阅 IBM Open Enterprise Python for z/OS 的[安装和配置文档](https://www.ibm.com/docs/en/python-zos)。

**限制**
+ 此模式中提供的安装说明**仅适用于AWS CLI 版本 1**。的最新版本 AWS CLI 是版本 2。但是，这种模式使用的是旧版本，因为版本 2 的安装方法不同，而且版本 2 中可用的二进制可执行文件与 z/OS 系统不兼容。

**产品版本**
+ AWS CLI 第 1 版
+ Python 3.8 或更高版本

## 架构
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-architecture"></a>

**技术堆栈**
+ 运行 z/OS 的大型机
+ 大型机 z/OS UNIX 系统服务 (USS)
+ 大型机开放 MVS (OMVS) — z/OS UNIX 外壳环境命令接口
+ 大型机磁盘，例如直接访问存储设备 (DASD)
+ AWS CLI

**目标架构**

下图显示了 IBM z/OS 上的 AWS CLI 部署。您可以 AWS CLI 从交互式用户会话（例如 SSH）和 telnet 会话中调用。您也可以使用作业控制语言 (JCL) 从批处理作业中调用它，也可以从任何可以调用 z/OS Unix shell 命令的程序中调用它。

![\[访问 AWS 服务的 IBM z/OS 大型机上的 AWS CLI。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/c3883500-bd00-4c56-982a-26d5e0b8b093.png)


通过 TCP/IP 网络 AWS CLI 与 AWS 服务 端点通信。这种网络连接可以通过互联网进行，也可以通过从客户数据中心到 AWS 云 数据中心的私人 AWS Direct Connect 连接进行。通信使用 AWS 凭据进行身份验证并加密。

**自动化和扩展**

您可以使用探索的功能 AWS CLI 并开发 USS shell 脚本来管理 z/OS 中的 AWS 资源。 AWS 服务 您还可以从 z/OS 批处理环境中运行 AWS CLI 命令和 shell 脚本，还可以通过与大型机调度器集成，自动执行批处理作业，使其按特定的计划运行。 AWS CLI 命令或脚本可以在参数 (PARMs) 和过程 (PROCs) 中编码，也可以按照标准方法进行扩展，即使用不同的参数从不同的批处理作业调用 PARM 或 PROC。

## 工具
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。

## 最佳实践
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-best-practices"></a>
+ 出于安全考虑，请将访问权限限制为存储 AWS 访问密钥详细信息的 USS 目录。仅允许使用 AWS CLI的用户或程序进行访问。
+ 请勿将 AWS 账户 root 用户访问密钥用于任何任务。而是为自己[创建一个具有访问密钥的新管理员 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#create-an-admin)。


| 
| 
| IAM 用户具有长期凭证，这会带来安全风险。为帮助减轻这种风险，我们建议仅向这些用户提供执行任务所需的权限，并在不再需要这些用户时将其移除。 | 
| --- |

## 操作说明
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-epics"></a>

### 在 z/OS USS 上安装 AWS CLI 版本 1
<a name="install-cli-version-1-on-z-os-uss"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Python 3.8 或更高版本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机管理员 z/OS  | 
| 设置 USS 环境变量。 | 将环境变量添加到配置文件中。您可以将它们添加到单个用户 (`cliuser`) 的 `/u/cliuser/.profile` 文件，也可以将其添加到所有用户的 `/etc/profile` 文件。此模式假定 `/u/awscli/python` 目录中已安装 Python。如果您的安装目录不同，请相应地更新代码。<pre># Python configuration<br />export BPXKAUTOCVT='ON'<br />export CEERUNOPTS='FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)'<br />export TAGREDIR_ERR=txt<br />export TAGREDIR_IN=txt<br />export TAGREDIR_OUT=txt<br /><br /># AWS CLI configuration<br />export PATH=/u/cliuser/python/bin:$PATH<br />export PYTHONPATH=/u/cliuser/python:$PYTHONPATH</pre> | 大型机管理员 z/OS  | 
| 测试 Python 安装。 | 运行 **python** 命令：<pre>python --version</pre>输出应确认您已正确安装了 Python 3.8 或更高版本。 | 大型机管理员 z/OS  | 
| 验证或安装 **pip**。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机管理员 z/OS  | 
| 安装 AWS CLI 版本 1。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机管理员 z/OS  | 

### 配置来自 z/OS 的 AWS CLI 访问权限
<a name="configure-cli-access-from-z-os"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 AWS 访问密钥、默认区域和输出。 | 该[AWS CLI 文档](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html)描述了设置 AWS 访问权限的不同选项。您可以根据组织的标准选择配置。此示例使用短期凭证配置。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | AWS 管理员、大型机 z/OS 管理员、大型机 z/OS 开发人员 | 
| 测试 AWS CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机 z/OS 管理员、大型机 z/OS 开发人员 | 

### 选项 1 ‒ 从 USS 会话以交互方式将数据从 USS 传输到 Amazon S3
<a name="option-1-transfer-data-from-uss-to-s3-interactively-from-a-uss-session"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载并传输示例 CSV 文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 应用程序开发人员、大型机 z/OS 开发人员 | 
| 创建 S3 存储桶并上传 CSV 文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 应用程序开发人员、大型机 z/OS 开发人员 | 
| 查看 S3 存储桶和上传的文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)有关上传对象的更多信息，请参阅 Amazon S3 文档中的 [Amazon S3 入门](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)。 | 常规 AWS | 
| 对 Amazon Athena 表运行 SQL 查询。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)SQL 查询的输出将显示您的 CSV 文件的内容。 | 常规 AWS，应用程序开发人员 | 

### 选项 2 ‒ 使用批处理 JCL 将数据从 USS 传输到 Amazon S3
<a name="option-2-transfer-data-from-uss-to-s3-by-using-batch-jcl"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 上传示例文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机开发人员 z/OS  | 
| 创建批处理 JCL。 | 按下述方式对批处理 JCL 进行编码，以创建目标 S3 存储桶、上传数据集并列出存储桶内容。请务必将目录名称、文件名和存储桶名称替换为您自己的值。<pre>//AWSCLICP JOB ACTINFO1,'IBMUSER',CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1), <br />// NOTIFY=&SYSUID,TIME=1440 <br />//*---------------------------------------------------------<br />//* Sample job for AWS CLI <br />//*--------------------------------------------------------- <br />//USSCMD EXEC PGM=BPXBATCH<br />//STDERR  DD SYSOUT=*<br />//STDOUT  DD SYSOUT=*<br />//STDENV  DD *<br /> export PATH=/u/cliuser/python/bin:$PATH<br />//STDPARM DD *<br />SH<br /> export _BPXK_AUTOCVT=ON;<br /> aws s3 mb s3://DOC-EXAMPLE-BUCKET2;<br /> cp "//'USER.DATA.FIXED'" /tmp/tmpfile;<br /> aws s3 cp /tmp/tmpfile s3://DOC-EXAMPLE-BUCKET2/USER.DATA.FIXED; <br /> rm /tmp/tmpfile;<br /> aws s3 ls s3://DOC-EXAMPLE-BUCKET2;<br />/*</pre> | 大型机开发人员 z/OS  | 
| 提交批处理 JCL 作业。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 大型机开发人员 z/OS  | 
| 查看上传到 S3 存储桶的数据集。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 常规 AWS | 

## 相关资源
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-resources"></a>
+ [AWS CLI 版本 1 文档](https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html)
+ [AWS Mainframe Modernization CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/m2/)
+ [AWS Mainframe Modernization](https://aws.amazon.com/mainframe-modernization/)

## 附加信息
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-additional"></a>

**ISPF 选项 3.4（数据集列表实用程序）中的 USER.DATA.FIXED**

![\[查看 z/OS 中的数据集的内容。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/96c25145-3d4d-4007-99f6-5eeb9e88642d.png)


**已提交的批处理作业的 SYSOUT**

![\[作业日志中的标准输出。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/03fffbd2-7d2b-43b2-bf14-736b3d150e38.png)


## 附件
<a name="attachments-4e3188d8-287f-4ced-8c29-80a01cbbdf50"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/4e3188d8-287f-4ced-8c29-80a01cbbdf50/attachments/attachment.zip)

# 使用 BMC AMI Cloud Data 备份大型机数据并将其存档至 Amazon S3
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data"></a>

*Santosh Kumar Singh、Gilberto Biondo 和 Maggie Li，Amazon Web Services*

*Mikhael Liberman，Model9 大型机软件*

## Summary
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-summary"></a>

此模式向您展示了如何使用 BMC AMI Cloud Data（以前称为 Model9 Manager）将主机数据直接备份和存档至 Amazon Simple Storage Service（Amazon S3），然后将其调回并还原至大型机。如果正在寻找实现备份和存档解决方案现代化的方法，作为大型机进行现代化项目的一部分或用于满足合规性要求，此模式可以帮助您实现这些目标。

通常，在大型机上运行核心业务应用程序的组织使用虚拟磁带库（VTL）备份文件和日志等数据存储。这种方法可能代价高昂，因为它消耗可计费的 MIPS，而且存储在大型机之外的磁带上的数据无法访问。为避免此类问题，您可以使用 BMC AMI Cloud Data 快速且经济高效地将大型机的运营和历史数据直接传输至 Amazon S3。您可以使用 BMC AMI Cloud Data 备份和存档数据， AWS 同时利用 IBM z 集成信息处理器 (ZiIP) 引擎来降低成本、并行性和传输时间。 TCP/IP 

## 先决条件和限制
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 带有有效许可密钥的 BMC AMI Cloud Data
+ 大型机和 AWS 之间的 TCP/IP 连接
+ 用于 read/write 访问 S3 存储桶的 AWS Identity and Access Management (IAM) 角色
+ 大型机安全产品（RACF）访问权限已到位，可运行 BMC AMI Cloud 进程
+ 具有可用网络端口、允许访问 S3 存储桶的防火墙规则和专用文件系统的 BMC AMI 云 z/OS 代理（Java 版本 8、64 位 SR5 FP16 或更高版本） z/FS 
+ 已满足 BMC AMI Cloud 管理服务器的[要求](https://docs.bmc.com/docs/cdacv27/management-server-requirements-1245343255.html)

**限制**
+ BMC AMI Cloud Data 将其操作数据存储在 PostgreSQL 数据库中，该数据库作为 Docker 容器运行在与管理服务器相同的亚马逊弹性计算云 (Amazon) EC2 实例上。Amazon Relational Database Service（Amazon RDS）目前不支持作为 BMC AMI Cloud Data 的后端。有关最新产品更新的更多信息，请参阅 BMC 文档中的[新增功能](https://docs.bmc.com/docs/cdacv27/what-s-new-1245343246.html)。
+ 这种模式仅备份和存档 z/OS 大型机数据。BMC AMI Cloud Data 仅备份和存档大型机文件。
+ 此模式不会将数据转换为标准开放格式，例如 JSON 或 CSV。使用 [BMC AMI Cloud Analytics](https://www.bmc.com/it-solutions/bmc-ami-cloud-analytics.html)（以前称为 Model9 Gravity）之类的其他转换服务将数据转换为标准开放格式。云原生应用程序和数据分析工具可以在数据写入云后访问这些数据。

**产品版本**
+ BMC AMI Cloud Data 版本 2.x

## 架构
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-architecture"></a>

**源技术堆栈**
+ 运行 z/OS 的大型机
+ 大型机文件，例如数据集和 z/OS UNIX 系统服务 (USS) 文件
+ 大型机磁盘，例如直接访问存储设备 (DASD)
+ 大型机磁带（虚拟或物理磁带库）

**目标技术堆栈**
+ Amazon S3
+ 虚拟私有云 (VPC) 中的亚马逊 EC2 实例
+ AWS Direct Connect
+ Amazon Elastic File System (Amazon EFS)

**目标架构**

下图显示了一个参考架构，在该架构中，大型机上的 BMC AMI Cloud Data 软件代理驱动将数据存储在 Amazon S3 中的遗留数据备份和存档流程。

![\[大型机上的 BMC AMI Cloud Data 软件代理推动传统的数据备份和存档过程\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/bde3b029-184e-4eb0-933b-f8caf6cc40ab/images/a24cd6c1-b131-49ea-8238-f3aea5ab8134.png)


下图显示了如下工作流：

1. BMC AMI 云数据软件代理在大型机逻辑分区上运行 () LPARs。软件代理通过 TCP/IP 直接将 DASD 或磁带的大型机数据读取和写入 Amazon S3。

1. AWS Direct Connect 在本地网络和之间建立物理隔离连接 AWS。为了增强安全性，请在上面运行 site-to-site VPN Direct Connect 来加密传输中的数据。

1. S3 存储桶将大型机文件存储为对象存储数据，而 BMC AMI Cloud Data 代理直接与 S3 存储桶通信。证书用于对代理和 Amazon S3 之间的所有通信进行 HTTPS 加密。Amazon S3 数据加密功能用于加密和保护静态数据。

1. BMC AMI 云数据管理服务器在实例上 EC2 作为 Docker 容器运行。这些实例与在大型机 LPARs 和 S3 存储桶上运行的代理通信。

1. Amazon EFS 安装在主动和被动 EC2 实例上，用于共享网络文件系统 (NFS) 存储。这旨在确保与在管理服务器上创建的策略相关的元数据不会在失效转移时丢失。如果主动服务器发生失效转移，则可在不丢失任何数据的情况下访问被动服务器。如果被动服务器出现故障，可以在不丢失任何数据的情况下访问主动服务器。

## 工具
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Elastic File System（Amazon EFS）](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)可帮助您在 AWS 云中创建和配置共享文件系统。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索几乎任意数量的数据。
+ [Amazon Virtual Private Cloud（亚马逊 VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络，并具有使用 AWS的可扩展基础设施的优势。
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)通过标准的以太网光纤电缆将您的内部网络链接到某个 AWS Direct Connect 位置。通过此连接，您可以直接创建通往公共 AWS 服务的虚拟接口，同时绕过网络路径中的互联网服务提供商。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。

**BMC 工具**
+ [BMC AMI 云管理服务器](https://docs.bmc.com/docs/cdacv27/bmc-ami-cloud-overview-1245343249.html)是一个 GUI 应用程序，作为 Docker 容器在亚马逊的亚马逊 Linux 亚马逊系统映像 (AMI) 上运行。 EC2管理服务器可管理 BMC AMI Cloud 活动，例如报告、创建和管理策略、运行存档以及执行备份、召回和恢复。
+ [BMC AMI Cloud 代理](https://docs.bmc.com/docs/cdacv27/bmc-ami-cloud-overview-1245343249.html)在使用 TCP/IP 将文件直接读写至对象存储的本地大型机 LPAR 上运行。已启动的任务在大型机 LPAR 上运行，负责在 Amazon S3 中读取和写入备份和存档数据。
+ [BMC AMI Cloud 大型机命令行界面 (M9CLI)](https://docs.bmc.com/docs/cdacv27/command-line-interface-cli-reference-1245343519.html) 为您提供了一组命令，可直接 TSO/E 从或批量操作中执行 BMC AMI Cloud 操作，无需依赖管理服务器。

## 操作说明
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-epics"></a>

### 创建 S3 存储桶和 IAM policy
<a name="create-an-s3-bucket-and-iam-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | [创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)，以存储大型机环境中待备份和待存档的文件和卷。 | 常规 AWS | 
| 创建一个 IAM 策略。 | 所有 BMC AMI Cloud 管理服务器和代理都要访问您在上一步骤中所创建的 S3 存储桶。若要授予所需访问权限，请创建以下 IAM 策略：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Listfolder",<br />            "Action": [<br />                "s3:ListBucket",<br />                "s3:GetBucketLocation",<br />                "s3:ListBucketVersions"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": [<br />                "arn:aws:s3:::<Bucket Name>"<br />            ]<br />        },<br />        {<br />            "Sid": "Objectaccess",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",<br />                "s3:GetObjectAcl",<br />                "s3:GetObject",<br />                "s3:DeleteObjectVersion",<br />                "s3:DeleteObject",<br />                "s3:PutObjectAcl",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<Bucket Name>/*"<br />            ]<br />        }<br />    ]<br />}</pre> | 常规 AWS | 

### 获取 BMC AMI Cloud 软件许可并下载该软件
<a name="get-the-bmc-ami-cloud-software-license-and-download-the-software"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获取 BMC AMI Cloud 软件许可。 | 若要获取软件许可密钥，请联系 [BMC AMI Cloud 团队](https://www.bmc.com/it-solutions/bmc-ami-cloud.html?vd=model9-io)。 z/OS `D M=CPU`命令的输出是生成许可证所必需的。 | 构建 lead | 
| 下载 BMC AMI Cloud 软件和许可密钥。 | 按照 [BMC 文档](https://docs.bmc.com/docs/cdacv27/preparing-to-install-the-bmc-ami-cloud-agent-1245343285.html)中的说明获取安装文件和许可密钥。 | 大型机基础设施管理员 | 

### 在大型机上安装 BMC AMI Cloud 软件代理
<a name="install-the-bmc-ami-cloud-software-agent-on-the-mainframe"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 BMC AMI Cloud 软件代理 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 大型机基础设施管理员 | 

### 在实例上设置 BMC AMI 云管理服务器 EC2
<a name="set-up-a-bmc-ami-cloud-management-server-on-an-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon EC2 Linux 2 实例。 | 按照亚马逊 EC2 文档中的[步骤 1：启动实例中的说明，在不同的可用区域中启动两个 Amazon EC2 Linux 2 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)。该实例必须满足以下推荐的硬件和软件要求：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)有关更多信息，请参阅 [BMC 文档](https://docs.bmc.com/docs/cdacv27/preparing-to-install-the-management-server-on-linux-1245343268.html)。 | 云架构师、云管理员 | 
| 创建 Amazon EFS 文件系统。 | 按照 Amazon EFS 文档中的[步骤 1：创建 Amazon EFS 文件系统](https://docs.aws.amazon.com/efs/latest/ug/gs-step-two-create-efs-resources.html)中的说明创建 Amazon EFS 文件系统。创建文件系统时，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 云管理员、云架构师 | 
| 安装 Docker 并配置管理服务器。 | **Connect 连接到您的 EC2 实例：**按照亚马逊 EC2 文档中连接您 EC2 的 [Linux 实例中的说明连接到您的](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)实例。**配置您的 EC2 实例：**对于每个 EC2 实例，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 云架构师、云管理员 | 
| 安装管理服务器软件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)要排查问题，请转到存储在 `/data/model9/logs/`** **文件夹中的日志。有关更多信息，请参阅 [BMC 文档](https://docs.bmc.com/docs/cdacv27/performing-the-management-server-installation-on-linux-1245343272.html)。 | 云架构师、云管理员 | 

### 在 BMC AMI Cloud 管理服务器上添加代理和定义备份或存档策略
<a name="add-an-agent-and-define-a-backup-or-archive-policy-on-the-bmc-ami-cloud-management-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 添加新代理。 | 添加新代理前，请确认以下事项[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)您必须在管理服务器上创建代理，然后才能定义任何备份策略和存档策略。若要创建代理，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)创建代理后，您将在表中出现的新窗口中查看对象存储和大型机代理的**已连接**状态。 | 大型机存储管理员或开发人员 | 
| 创建备份或存档策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 大型机存储管理员或开发人员 | 

### 从管理服务器运行备份或存档策略
<a name="run-the-backup-or-archive-policy-from-the-management-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行备份或存档策略。 | 手动或自动（根据计划）运行之前在管理服务器上创建的数据备份或存档策略。要手动运行策略，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 大型机存储管理员或开发人员 | 
| 恢复备份或存档策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 大型机存储管理员或开发人员 | 

### 从大型机运行备份或存档策略
<a name="run-the-backup-or-archive-policy-from-the-mainframe"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 M9CLI 运行备份或存档策略。 | 使用 M9CLI 从 TSO/E、REXX 执行备份和还原过程， JCLs 无需在 BMC AMI Cloud 管理服务器上设置规则。**使用 TSO/E：**如果使用 TSO/E，请确保将 `M9CLI REXX` 连接至 `TSO`。若要通过 TSO/E 备份数据集，请使用 `TSO M9CLI BACKDSN <DSNAME>` 命令。有关 M9CLI 命令的更多信息，请参阅 BMC 文档中的 [CLI 参考](https://docs.bmc.com/docs/cdacv27/command-line-interface-cli-reference-1245343519.html)。**使用 JCLs：**要使用运行备份和存档策略 JCLs，请运行`M9CLI`命令。**使用批量操作**以下示例显示了如何在批处理中运行 `M9CLI` 命令以存档数据集：<pre>//JOBNAME JOB …<br />//M9CLI EXEC PGM=IKJEFT01<br />//STEPLIB DD DISP=SHR,DSN=<MODEL9 LOADLIB><br />//SYSEXEC DD DISP=SHR,DSN=<MODEL9 EXEC LIB><br />//SYSTSPRT DD SYSOUT=*<br />//SYSPRINT DD SYSOUT=*<br />//SYSTSIN DD TSO M9CLI ARCHIVE <br /> M9CLI ARCHIVE <DSNNAME OR DSN PATTERN>   <br />/</pre> | 大型机存储管理员或开发人员 | 
| 在 JCL 批处理中运行备份或存档策略。 | BMC AMI Cloud 提供了名为 **M9SAPIJ** 的 JCL 例程示例。您可以自定义 **M9SAPIJ**，以通过 JCL 运行管理服务器上所创建的特定策略。此任务亦可作为批处理计划程序的一部分，用于自动运行备份和还原过程。批处理任务需要提供以下必需值：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)您可以按照示例作业中的说明更改其他值。 | 大型机存储管理员或开发人员 | 

## 相关资源
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-resources"></a>
+ [使用 AWS 实现大型机现代化](https://aws.amazon.com/mainframe/)（AWS 文档）
+ [适用于大型机的 Cloud Backup 如何使用 Model9 和 AWS 降低成本](https://aws.amazon.com/blogs/apn/how-cloud-backup-for-mainframes-cuts-costs-with-model9-and-aws/)（Amazon Web Services Partner Network 博客）
+ [如何使用 Model9 在 AWS 上启用大型机数据分析](https://aws.amazon.com/blogs/apn/how-to-enable-mainframe-data-analytics-on-aws-using-model9/)（Amazon Web Services Partner Network 博客）
+ [AWS Direct Connect 弹性建议](https://aws.amazon.com/directconnect/resiliency-recommendation/?nc=sn&loc=4&dn=2)（AWS 文档）
+ [BMC AMI Cloud 文档](https://docs.bmc.com/docs/cdacv27/getting-started-1245343248.html)（BMC 网站）

# 使用和构建 COBOL Db2 程序 AWS Mainframe Modernization AWS CodeBuild
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild"></a>

*Luis Gustavo Dantas 和 Eduardo Zimelewicz，Amazon Web Services*

## Summary
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-summary"></a>

**注意**  
AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

此模式说明了如何使用 Replatform 工具创建一个用于预编译和绑定 COBOL Db2 程序的简单 AWS CodeBuild 项目。 AWS Mainframe Modernization 这允许在 AWS Mainframe Modernization Replatform 运行时环境中部署和执行这些程序。

COBOL 是一种业务导向的编程语言，得益于其可靠性和可读性，它可为许多关键应用程序提供支持。IBM Db2 是一种关系数据库管理系统，可高效管理大量数据，并通过 SQL 与 COBOL 程序集成。尽管出现了新技术，但 COBOL 和 Db2 共同构成了金融和政府等行业关键任务运营的支柱。

从大型机环境向其他平台迁移 COBOL 和 Db2 组件会带来一些挑战，例如平台兼容性、集成复杂性、数据迁移和性能优化等。移动这些关键组件需要仔细的规划、技术专业知识和资源，以确保顺利迁移，同时保持可靠性和功能性。

该 AWS Mainframe Modernization 服务提供工具和资源，用于将大型机应用程序和数据库改为在 AWS 基础设施（例如亚马逊弹性计算云 (Amazon) 实例 EC2）上运行。这涉及在不进行重大代码更改的情况下将大型机工作负载迁移到云端。

Db2 预编译和绑定过程对于优化数据库应用程序的性能和可靠性至关重要。预编译可将嵌入式 SQL 语句转换为可执行代码，从而减少运行时开销并提高效率。绑定过程将预编译的代码与数据库结构联系起来，便于访问路径和查询优化。此过程可确保数据完整性，提高应用程序响应能力并防范安全漏洞。正确预编译和绑定应用程序可最大限度地减少资源消耗、增强可扩展性，并降低 SQL 注入攻击的风险。

## 先决条件和限制
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-prereqs"></a>

**先决条件**
+  AWS 账户 和管理员级别的控制台访问权限。
+ 一个 IBM Db2 数据库系统，例如适用于 Linux、Unix 和 Windows 的 IBM Db2 z/OS 或适用于 Linux、Unix 和 Windows 的 Db2 (LUW)。
+ IBM 数据服务器客户端软件，可从 [IBM 网站](https://www.ibm.com/support/pages/download-initial-version-115-clients-and-drivers)下载。有关更多信息，请参阅 [IBM 数据服务器客户端和数据服务器驱动程序类型](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients)。
+ 要编译和绑定的 COBOL Db2 程序。或者，此模式还提供了一个基本示例程序供您使用。
+  AWS 带有私有网络的虚拟私有云 (VPC)。有关创建 VPC 的信息，请参阅 [Amazon Virtual Private Cloud（Amazon VPC）文档](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。
+ 源代码控制存储库，例如 GitHub 或 GitLab。

**限制**
+ 有关 AWS CodeBuild 配额，请参阅[配额 AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html)。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 架构
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-architecture"></a>

**源技术堆栈**

源堆栈包括：
+ 使用 Db2 数据库存储数据的 COBOL 程序
+ IBM COBOL 编译器和用于预编译器的 Db2 z/OS 
+ 大型机设置的其他部分，例如文件系统、事务管理器和缓冲池

**目标技术堆栈**

这种模式的方法适用于两个选项：将数据从 Db2 for 移动 z/OS 到 Db2 for LUW，或者停留在 Db2 上适用于 z/OS。目标架构包括：
+ 使用 Db2 数据库存储数据的 COBOL 程序
+ AWS Mainframe Modernization 平台重组编译工具
+ AWS CodeBuild 作为构建应用程序的基础架构
+ 其他 AWS 云 资源，例如亚马逊 Linux

**目标架构**

![\[在 AWS 上构建 COBOL Db2 程序的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/5895fa34-f05b-4cc3-a59f-a596f9116c66/images/0dda414a-21a7-41d1-b86b-7ff3b1c6fbda.png)


下图说明了以下内容：

1. 用户将其代码上传到源代码控制存储库，例如 GitHub 或 GitLab。

1. AWS CodePipeline 注意到更改并从存储库中获取代码。

1. CodePipeline 启动 AWS CodeBuild 并发送代码。

1. CodeBuild 按照`buildspec.yml`模板（在 “[其他信息](#build-cobol-db2-programs-mainframe-modernization-codebuild-additional)” 部分中提供）中的说明执行以下操作：

   1. 从 Amazon Simple Storage Service（Amazon S3）存储桶中获取 IBM Data Server Client。

   1. 安装并设置 IBM Data Server Client。

   1. 从中检索 Db2 凭证。 AWS Secrets Manager

   1. 连接到 Db2 服务器。

   1. 预编译、编译并绑定 COBOL 程序。

   1. 将成品保存在 S3 存储桶中 AWS CodeDeploy 以备使用。

1. CodePipeline 开始 CodeDeploy。

1. CodeDeploy 协调其代理，这些代理已经安装在运行时环境中。代理从 Amazon S3 获取应用程序，并根据 `appspec.yml` 中的说明进行安装。

为了使事情变得简单并专注于构建，此模式中的说明涵盖了步骤 1 到 4，但不包括 COBOL Db2 程序的部署。

**自动化和扩展**

为简单起见，此模式描述了如何手动预调配资源。但是，有许多自动化选项可用，例如 CloudFormation AWS Cloud Development Kit (AWS CDK)、和 HashiCorp Terraform，它们可以自动执行这些任务。有关更多信息，请参阅 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 和 [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) 文档。

## 工具
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-tools"></a>

**AWS 服务**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 是一项完全托管式构建服务，可编译源代码、运行单元测试和生成部署就绪的构件。
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)自动部署到亚马逊 EC2 或本地实例、 AWS Lambda 函数或亚马逊弹性容器服务 (Amazon ECS) Container Service 服务。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可帮助您快速对软件发布过程的不同阶段进行建模和配置，并自动执行持续发布软件变更所需步骤。
+ [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)提供工具和资源，帮助您规划和实施从大型机到 AWS 托管运行时环境的迁移和现代化。

**其他工具**
+ **适用于 AWS Mainframe Modernization 平台重构工具的 Amazon ECR 图片**。要编译 COBOL 应用程序，您需要使用包含重新平台工具的亚马逊弹性容器注册表 (Amazon ECR) Container Registr CodeBuild y 镜像启动： AWS Mainframe Modernization 

  `673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1`

  有关可用的 ECR 映像的更多信息，请参阅《*AWS Mainframe Modernization 用户指南*》中的[教程](https://docs.aws.amazon.com/m2/latest/userguide/tutorial-build-mf.html)。
+ [IBM 数据服务器客户机](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients)软件对于预编译和绑定 COBOL Db2 程序至关重要。 CodeBuild它充当 COBOL 编译器和 Db2 之间的桥梁。

## 最佳实践
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-best-practices"></a>
+ 并非每个 COBOL 程序都依赖 Db2 作为其数据持久层。确保用于访问 Db2 的编译指令仅应用于专为与 Db2 交互而设计的 COBOL 程序。实现一种逻辑来区分 COBOL Db2 程序与不使用 Db2 的 COBOL 程序。
+ 我们建议您避免编译未修改的程序。实施用来确定哪些程序需要编译的过程。

## 操作说明
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-epics"></a>

### 创建云基础设施
<a name="create-the-cloud-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶以托管 IBM Data Server Client 和管道构件。 | 您需要设置 S3 存储桶，以（a）上传 IBM Data Server Client，（b）存储来自存储库的代码，以及（c）存储构建过程的结果。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)有关创建 S3 存储桶的方法，请参阅 [Amazon S3 文档](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。 | 常规 AWS | 
| 将 IBM Data Server Client 上传至 S3 存储桶。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 常规 AWS | 
| 为您的 Db2 凭证创建一个 AWS Secrets Manager 密钥。 | 要创建用于安全存储您的 DB2 凭据的密钥，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)有关创建密钥的更多信息，请参阅 [Secrets Manager 文档](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。 | 常规 AWS | 
| 验证是否能够从 VPC 子网访问 Db2。 | AWS CodeBuild 需要连接到 Db2 服务器，以便数据服务器客户端可以执行预编译和绑定操作。确保它 CodeBuild 可以通过安全连接到 Db2 服务器。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 网络管理员、常规 AWS | 

### 创建应用程序构件
<a name="create-the-application-artifacts"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 COBOL Db2 资产。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 应用程序开发人员 | 
| 创建 `buildspec.yml` 文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | AWS DevOps | 
| 将您的存储库连接到 CodePipeline。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)在后续步骤中创建 (IAM) 策略时，您将需要连接的 Amazon 资源名称 AWS Identity and Access Management (ARN)。 CodePipeline  | AWS DevOps | 

### 配置 权限
<a name="configure-permissions"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为创建 IAM 策略 CodeBuild。 | 该 CodeBuild 项目需要访问某些资源，包括 Secrets Manager 和 Amazon S3。设置必要权限：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)有关创建 IAM 策略的更多信息，请参阅 [IAM 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。 | 常规 AWS | 
| 为创建 IAM 角色 CodeBuild。 | 要使安全策略可用 CodeBuild，您需要配置 IAM 角色。要创建此角色：1. 在 [IAM 控制台](https://console.aws.amazon.com/iam)的导航窗格中，选择**角色**、**创建角色**。3. 对于**可信实体类型**，请保留默认的 **AWS 服务** 设置。4. 在 “**用例**” 中，选择 CodeBuild 服务，然后选择 “**下一步**”。4. 在可用 IAM 策略列表中，找到您为其创建的策略 CodeBuild，然后选择**下一步**将其附加到该角色。5. 为角色指定名称，然后选择 “**创建角色**” 将其保存以备将来参考 CodeBuild。有关为创建 IAM 角色的更多信息 AWS 服务，请参阅 [IAM 文档](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。 | 常规 AWS | 
| 为创建 IAM 策略 CodePipeline。 | 该 AWS CodePipeline 管道需要访问某些资源，包括您的代码存储库和 Amazon S3。重复之前提供的步骤， CodeBuild 为创建 IAM 策略 CodePipeline （在步骤 2 中，选择**CodePipeline**而不是 **CodeBuild**）。 | AWS DevOps | 
| 为创建 IAM 角色 CodePipeline。 | 要使安全策略可用 CodePipeline，您需要配置 IAM 角色。要创建此角色：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | AWS DevOps | 

### 编译并绑定 COBOL Db2 程序
<a name="compile-and-bind-the-cobol-db2-program"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 CodePipeline 管道和 CodeBuild 项目。 | 要创建 CodePipeline 管道以及编译和绑定 COBOL Db2 程序的 CodeBuild 项目，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | AWS DevOps | 
| 检查输出。 | 通过查看构建日志来验证 CodePipeline 构建是否成功。 | AWS DevOps | 
| 在 Db2 中检查结果。 | 验证 SYSPLAN 表中的软件包版本。<pre>select CAST(NAME AS VARCHAR(10)) as name, VALIDATE, LAST_BIND_TIME, LASTUSED, CAST(PKGVERSION AS VARCHAR(10)) as PKGVERSION from SYSIBM.SYSPLAN where NAME = 'CDB2SMP' order by LAST_BIND_TIME desc<br /></pre>版本必须与 CodeBuild 构建 ID 相匹配，在我们的示例`CDB2SMP`中：<pre>NAME       VALIDATE LAST_BIND_TIME             LASTUSED   PKGVERSION<br />---------- -------- -------------------------- ---------- ----------<br />CDB2SMP    B        2024-05-18-11.53.11.503738 01/01/0001 19</pre> |  | 

## 问题排查
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 有时，当您在服务之间切换时， AWS 控制台会切换区域。 |  AWS 区域 每当您在服务之间切换时，请务必验证所选内容。 AWS 区域 选择器位于控制台窗口的右上角。 | 
| 可能很难从 CodeBuild中识别 Db2 连接问题。 | 要解决连接问题，请在`buildspec.yml`文件中添加以下 c DB2 onnect 命令。添加该命令可帮助您调试和解决连接问题。<pre>db2 connect to $DB_NAME user $DB2USER using $DB2PASS</pre> | 
| 有时，IAM 控制台中的角色窗格不会立即显示您创建的 IAM 策略。 | 如果遇到延迟，请刷新屏幕以显示最新信息。 | 

## 相关资源
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-resources"></a>

**IBM 文档**
+ [IBM Data Server Client 和驱动程序类型](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients)
+ [下载 IBM Data Server Client 和驱动程序类型](https://www.ibm.com/support/pages/download-initial-version-115-clients-and-drivers)

**AWS 文档**
+ [Amazon S3 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)
+ [AWS CodeBuild 用户指南](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)
+ [AWS Mainframe Modernization 用户指南](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)
+ [AWS Secrets Manager 用户指南](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [AWS CodePipeline 用户指南](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [AWS CodeDeploy 用户指南** **](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-codedeploy.html)

## 附加信息
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-additional"></a>

**CodeBuild 策略**

将占位符 `<RegionID>`、`<AccountID>`、`<SubnetARN>`、`<BucketARN>` 和 `<DB2CredSecretARN>` 替换为您的值。

```
{"Version": "2012-10-17",		 	 	 
    "Statement": [
        {"Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Resource": "*" },
        {"Action": ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", 
                    "ecr:BatchCheckLayerAvailability"],
         "Effect": "Allow", 
         "Resource": "arn:aws:ecr:*:673918848628:repository/m2-enterprise-build-tools"},
        {"Action": "s3:PutObject", "Effect": "Allow", "Resource": "arn:aws:s3:::aws-m2-repo-*/*"},
        {"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"],
         "Effect": "Allow", "Resource": "arn:aws:logs:<RegionId>:<AccountId>:*"},
        {"Action": ["ec2:DescribeVpcs", "ec2:DescribeSubnets", 
                    "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", 
                    "ec2:DescribeDhcpOptions", "ec2:DeleteNetworkInterface", 
                    "ec2:CreateNetworkInterface"],
         "Effect": "Allow", "Resource": "*"},
        {"Action": "ec2:CreateNetworkInterfacePermission", 
         "Effect": "Allow", "Resource": ["<SubnetARN>"]},
        {"Action": "s3:*", "Effect": "Allow", "Resource": ["<BucketARN>/*","<BucketARN>"]},
        {"Action": "secretsmanager:GetSecretValue", 
         "Effect": "Allow", "Resource": "<DB2CredSecretARN>"}
    ]
}
```

**CodePipeline 策略**

将占位符 `<BucketARN>` 和 `<ConnectionARN>` 替换为您的值。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {"Action": ["s3:List*", "s3:GetObjectVersion", "s3:GetObject", "s3:GetBucketVersioning" ], 
        "Effect": "Allow",
        "Resource": ["<BucketARN>/*", "<BucketARN>"]},
        {"Action": ["codebuild:StartBuild", "codebuild:BatchGetBuilds"], 
         "Effect": "Allow", "Resource": "*"},
        {"Action": ["codestar-connections:UseConnection"],
         "Effect": "Allow", "Resource": "<ConnectionARN>"}
        ]
}
```

**`buildspec.yml`**

将 `<your-bucket-name>` 占位符替换为实际 S3 存储桶名称。

```
version: 0.2
phases:
  pre_build:
    commands:
      - /var/microfocuslicensing/bin/mfcesd -no > /var/microfocuslicensing/logs/mfcesd_startup.log 2>&1 &
      - |
        mkdir $CODEBUILD_SRC_DIR/db2client
        aws s3 cp s3://<your-bucket-name>/v11.5.8_linuxx64_client.tar.gz $CODEBUILD_SRC_DIR/db2client/ >> /dev/null 2>&1
        tar -xf $CODEBUILD_SRC_DIR/db2client/v11.5.8_linuxx64_client.tar.gz -C $CODEBUILD_SRC_DIR/db2client/
        cd $CODEBUILD_SRC_DIR/db2client/
        ./client/db2_install -f sysreq -y -b /opt/ibm/db2/V11.5 >> /dev/null 2>&1        
        useradd db2cli
        /opt/ibm/db2/V11.5/instance/db2icrt -s client -u db2cli db2cli
        DB2CRED=$(aws secretsmanager get-secret-value --secret-id dev-db2-cred | jq -r '.SecretString | fromjson')
        read -r DB2USER DB2PASS DB_NODE DB_HOST DB_PORT DB_NAME DB_QUAL <<<$(echo $DB2CRED | jq -r '.username, .password, .db2node, .db2host, .db2port, .db2name, .qualifier')
        . /home/db2cli/sqllib/db2profile
        db2 catalog tcpip node $DB_NODE remote $DB_HOST server $DB_PORT
        db2 catalog db $DB_NAME as $DB_NAME at node $DB_NODE authentication server
  build:
    commands:
      - |
        revision=$CODEBUILD_SRC_DIR/loadlib
        mkdir -p $revision; cd $revision
        . /opt/microfocus/EnterpriseDeveloper/bin/cobsetenv
        cob -zU $CODEBUILD_SRC_DIR/CDB2SMP.cbl -C "DB2(DB==${DB_NAME} PASS==${DB2USER}.${DB2PASS} VERSION==${CODEBUILD_BUILD_NUMBER} COLLECTION==DB2AWSDB"
artifacts:
  files:
    - "**/*"
  base-directory: $revision
```

# 使用 Amazon A EC2 uto Scaling 和 Systems Manager 构建 Micro Focus 企业服务器 PAC
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager"></a>

*Kevin Yung 和 Krithika Palani Selvam，Amazon Web Services*

*Peter Woods，无*

*Abraham Rondon，Micro Focus*

## Summary
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-summary"></a>

这种模式为大型机应用程序引入了可扩展架构，在[横向扩展性能和可用性集群 (PAC) 中使用 Micro Focus 企业服务器，在亚马逊网络服务 ()](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-F6E1BBB7-AEC2-45B1-9E36-1D86B84D2B85.html) 上使用亚马逊弹性计算云 (Amazon) A EC2 uto Scaling 组 ()。AWS该解决方案通过 Amazon A EC2 uto Scaling 生命周期挂钩实现了全自动化。 AWS Systems Manager 通过使用这种模式，您可将大型机设置为在线和批处理应用程序，从而根据容量需求自动横向缩减和横向扩展，从而实现高弹性。

**注意**  
此模式已在 Micro Focus Enterprise Server 版本 6.0 中进行了测试。有关版本 8，请参阅[设置 Micro Focus 运行时（在亚马逊上 EC2）](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)。

## 先决条件和限制
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ Micro Focus Enterprise Server 软件和许可证。有关详细信息，请联系 [Micro Focus 销售](https://www.microfocus.com/en-us/contact/contactme)。
+ 了解重建和交付大型机应用程序以在 Micro Focus Enterprise Server 中运行。有关高级概述，请参阅 [Micro Focus Enterprise Server 数据表](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)。
+ 了解 Micro Focus Enterprise Server 横向扩展性能与可用性集群中的概念。有关更多信息，请参阅 [Micro Focus Enterprise Server 文档](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-F6E1BBB7-AEC2-45B1-9E36-1D86B84D2B85.html)。
+ 了解具有持续集成 (CI) 功能的大型机应用程序 DevOps 的总体概念。有关由 AWS and Micro Focus 开发的 AWS 规范性指导模式，请参阅[大型机现代化：开 DevOps 启 Micro Foc AWS u](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/mainframe-modernization-devops-on-aws-with-micro-focus.html) s。

**注意**  
此模式已在 Micro Focus Enterprise Server 版本 6 中进行了测试。有关版本 8，请参阅[设置 Micro Focus 运行时（在亚马逊上 EC2）](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)。

**限制**
+ 有关 Micro Focus Enterprise Server 支持的平台列表，请参阅 [Micro Focus Enterprise Server 数据表](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)。
+ 此模式中使用的脚本和测试基于亚马逊 EC2 Windows Server 2019；其他 Windows Server 版本和操作系统未针对此模式进行测试。
+ 该模式基于 Micro Focus Enterprise Server 6.0 for Windows；在此模式的开发中没有测试早期版本或更高版本。

**产品版本**
+ Micro Focus Enterprise Server 6.0
+ Windows Server 2019

## 架构
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-architecture"></a>

在传统大型机环境中，必须预调配硬件来托管应用程序和公司数据。为了满足和满足季节性、每月、每季度，甚至是前所未有的或意想不到的需求，大型机用户必须通过购买额外的存储和计算容量来*横向扩展*。增加存储和计算容量资源的数量可提高整体性能，但扩展不是线性的。

当您开始使用 Amazon A EC2 uto Scaling 和 Micro Focus 企业服务器在 AWS 上采用按需消费模式时，情况并非如此。以下各节详细介绍了如何使用 Micro Focus 企业服务器横向扩展性能和可用性集群 (PAC) 和 Amazon Auto Scaling 组构建全 EC2 自动、可扩展的大型机应用程序架构。 

**Micro Focus Enterprise Server 动缩放架构**

首先，了解 Micro Focus Enterprise Server 的基本概念很重要。该环境为传统上在 IBM 大型机上运行的应用程序提供了一个与大型机兼容的 x86 部署环境。它提供在线和批处理运行以及支持以下功能的事务环境：
+ IBM COBOL
+ IBM PL/I
+ IBM JCL 批处理作业
+ IBM CICS 和 IMS TM 事务
+ Web 服务
+ 常用批处理实用程序，包括 SORT

Micro Focus Enterprise Server 使大型机应用程序能够以最少的更改运行。现有的大型机工作负载可以转移到 x86 平台并进行现代化改造，以利用 Amazon Web Services Cloud 原生扩展快速扩展至新的市场或地区。 

AWS Prescriptive Guidence [模式大型机现代化：在 AWS DevOps 上使用 Micro Focus 引入了该架构，使用带有](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/mainframe-modernization-devops-on-aws-with-micro-focus.html) AWS 和 AWS 的 Micro Focus 企业开发人员和企业测试服务器在 AWS CodePipeline 上加速大型机应用程序的开发和测试。 CodeBuild此模式侧重于将大型机应用程序部署到 AWS 生产环境以实现高可用性和弹性。

在大型机生产环境中，您可能已在大型机中设置 IBM Parallel Sysplex 以实现高性能和高可用性。为了创建类似于 Sysplex 的横向扩展架构，Micro Focus 在企业服务器中引入了性能和可用性群集 (PAC)。 PACs 支持将大型机应用程序部署到多个企业服务器区域，作为单个映像进行管理，并在 Amazon EC2 实例中横向扩展。 PACs 还可根据需要支持可预测的应用程序性能和系统吞吐量。 

在 PAC 中，多个 Enterprise Server 实例作为一个逻辑实体协同工作。因此，一个企业服务器实例的故障不会中断业务连续性，因为容量与其他地区共享，而新实例则使用行业标准功能（例如 Amazon A EC2 uto Scaling 组）自动启动。这消除了单点故障，提高了对硬件、网络以及应用程序问题的恢复能力。使用企业服务器通用网络管理 (ESCAD) 可以操作和管理扩展的企业服务器实例 APIs，从而简化了企业服务器的操作维护和可维护性。 

**注意**  
Micro Focus 建议[性能和可用性集群（PAC）](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-C06DC883-8A67-44DB-8553-8F0DD2062DAB.html)应至少包含三个 Enterprise Server 区域，这样在 Enterprise Server 区域出现故障或需要维护时可用性不会受到影响。

PAC 配置需要支持的关系数据库管理服务 (RDBMS) 管理区域数据库、跨区域数据库和可选的数据存储数据库。应使用 Micro Focus 数据库文件处理器支持使用数据存储数据库来管理虚拟存储访问方法 (VSAM) 文件，以提高可用性以及可扩展性。支持的 RDBMSs 内容包括：
+ Microsoft SQL Server 2009 R2 及更高版本
+ PostgreSQL 10.x，包括 Amazon Aurora PostgreSQL-Compatible Edition
+ DB2 10.4 及更高版本

有关支持的 RDBMS 和 PAC 要求的详细信息，请参阅 [Micro Focus Enterprise Server - 先决条件](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-486C5A4B-E3CD-4B17-81F3-32F9DE970EA5.html)和 [Micro Focus Enterprise Server - 建议的 PAC 配置](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-7038DB6F-E89F-4B5F-BCAA-BD1456F6CCA3.html)。

下图介绍了 Micro Focus PAC 的典型 AWS 架构设置。 

![\[三可用区架构，包含五个步骤，如图后的表格所示。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/64e3c22b-1058-4ab8-855f-18bbbed5dc13/images/df291568-a442-454f-80bf-49e4ffff4f6d.png)


 


| 
| 
|  | **组件** | **描述** | 
| --- |--- |--- |
| 1 | Enterprise Server 实例自动扩缩组 | 在 PAC 中设置使用 Enterprise Server 实例部署的自动扩缩组。实例数量可以按比例扩展，也可以通过 Amazon CloudWatch 警报使用 CloudWatch 指标启动。 | 
| 2 | Enterprise Server ESCAW 实例自动扩缩组  | 设置使用 Enterprise Server Common Web Administration (ESCWA) (ESCAW) 部署的自动扩缩组。西亚经社会提供群组管理 APIs。  在 Enterprise Server 实例自动扩缩事件期间，ESCWA服务器充当控制面板，用于添加或删除 Enterprise Server，并在 PAC 中启动或停止 PAC 中的 Enterprise Server 区域。  由于 ESCWA 实例仅用于 PAC 管理，因此其流量模式是可预测的，并且其自动扩缩所需容量要求可设置为 1。  | 
| 3 | 多可用区设置中的 Amazon Aurora 实例 | 设置关系数据库管理系统 (RDBMS)，以托管要在 Enterprise Server 实例之间共享的用户和系统数据文件。 | 
| 4 | 亚马逊 ElastiCache (Redis OSS) 实例和副本 | 设置一个 ElastiCache （Redis OSS）主实例和至少一个副本来托管用户数据并充当企业服务器实例的扩展存储库 (SOR)。您可配置一个或多个[横向扩展存储库来存储](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-3840E10F-80AA-4109-AF2C-894237D3AD00.html)特定类型的用户数据。  Enterprise Server 使用 Redis NoSQL 数据库作为 SOR，[这是维护 PAC 完整性的必要条件](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-176B97CA-4F9F-4CE1-952F-C3F4FB0ADD25.html)。 | 
| 5 | Network Load Balancer | 设置负载均衡器，为应用程序提供主机名以连接到 Enterprise Server 实例提供的服务（例如，通过 3270 仿真器访问应用程序）。 | 

这些组件构成了 Micro Focus Enterprise Server PAC 集群的最低要求。下一部分介绍集群管理自动化。

**使用 AWS Systems Manager Automation 扩展**

在 AWS 上部署 PAC 集群后，PAC 将通过企业服务器通用网络管理机构 (ESCAW) 进行管理 APIs。 

要在自动扩展事件期间自动执行集群管理任务，您可以使用 Systems Manager Automation 运行手册和带有 Amazon Auto Scaling 的亚马逊 A EC2 uto Scaling。 EventBridge这些自动化架构如下图所示。

![\[AWS architecture diagram showing EventBridge, Systems Manager, and EC2 Auto Scaling integration.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/64e3c22b-1058-4ab8-855f-18bbbed5dc13/images/6f9e4035-fafd-4aee-a6cc-d5e95d6514c2.png)


 


| 
| 
|  | **组件** | **描述** | 
| --- |--- |--- |
| 1 | 自动扩缩生命周期挂钩 | 设置自动扩展生命周期挂钩，并在自动扩展组中启动新实例和终止现有实例 EventBridge 时向 Amazon 发送通知。 | 
| 2 | Amazon EventBridge | 设置 Amazon EventBridge 规则，将自动扩展事件路由到 Systems Manager 自动化运行手册目标。 | 
| 3 | 自动化运行手册 | 设置 Systems Manager Automation 运行手册以运行 Windows PowerShell 脚本并调用 ESCA APIs W 来管理 PAC。有关示例，请参阅*其他信息*部分。 | 
| 4 | 自动扩缩组中的 Enterprise Server ESCAP 实例 | 在自动扩缩组中设置 Enterprise Server ESCAM 实例。西亚经社会的例子是 APIs 用来管理PAC。  | 

## 工具
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-tools"></a>
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html) – Micro Focus Enterprise Server 为使用企业开发人员的任何集成式开发环境（IDE）变体创建的应用程序提供运行环境。
+ [Amazon A EC2 ut](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) EC2 o Scaling — Amazon Auto Scaling 可帮助您确保有正确数量的亚马逊 EC2 实例可用来处理应用程序的负载。您可以创建名为 Auto Scaling 组的 EC2 实例集合，并指定最小和最大实例数。
+ [亚马逊 ElastiCache （Redis OSS）](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/WhatIs.html)— Amazon ElastiCache 是一项网络服务，用于在云中设置、管理和扩展分布式内存数据存储或缓存环境。它可以提供高性能、可扩展且具有成本效益的缓存解决方案。
+ [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) – Amazon Relational Database Service(Amazon RDS) 是一项 Web 服务，让用户能够在 Amazon Web Services Cloud 中轻松设置、操作和扩展关系数据库。它为行业标准的关系数据库提供了经济高效、可调整大小的容量，并管理常见的数据库管理任务。 
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) – AWS Systems Manager 是一项 Amazon Web Services，您可用它在 AWS 上查看和控制您的基础设施。通过使用 Systems Manager 控制台，您可以查看来自多个 Amazon Web Services 的操作数据并在 AWS 资源之间自动执行操作任务。Systems Manager 通过扫描托管实例并报告其检测到的任何策略违规行为（或采取纠正措施）来帮助您维护安全性和合规性。

## 操作说明
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-epics"></a>

### 创建 Amazon Aurora 实例
<a name="create-an-amazon-aurora-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为亚马逊 Aurora 实例创建 AWS CloudFormation 模板。 | 使用 [AWS 示例代码片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_RDS.html)制作一个用于创建兼容 Amazon Aurora PostgreSQL 的版本实例的 CloudFormation 模板。 | 云架构师 | 
| 部署 CloudFormation 堆栈以创建 Amazon Aurora 实例。 | 使用该 CloudFormation 模板创建兼容 Aurora PostgreSQL 的实例，该实例已为生产工作负载启用多可用区复制。 | 云架构师 | 
| 为 Enterprise Server 配置数据库连接设置。 | 按照 [Micro Focus 文档](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-40748F62-84B3-4B7B-8E96-5484ADEDFB5F.html)中的说明为 Micro Focus Enterprise Server 准备连接字符串和数据库配置。 | 数据工程师、 DevOps 工程师 | 

### 为 Redis 实例创建一个 Amazon ElastiCache 集群
<a name="create-an-elclong-cluster-for-the-redis-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Redis 实例的 Amazon ElastiCache 集群创建 CloudFormation 模板。 | 使用 [AWS 示例代码片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)制作一个用于为 Redis 实例创建 Amazon ElastiCache 集群的 CloudFormation 模板。 | 云架构师 | 
| 部署 CloudFormation 堆栈以为 Redis 实例创建 Amazon ElastiCache 集群。 | 为已为生产工作负载启用多可用区复制的 Redis 实例创建 Amazon ElastiCache 集群。 | 云架构师 | 
| 配置 Enterprise Server PSOR 连接设置。 | 按照 [Micro Focus 文档](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2A420ADD-4CA6-472D-819F-371C037C0653.html)中的说明为 Micro Focus Enterprise Server PAC 准备 PAC 横向扩展存储库 (PSOR) 连接配置。 | DevOps 工程师 | 

### 创建 Micro Focus Enterprise Server SECA 自动扩缩组
<a name="create-a-micro-focus-enterprise-server-escwa-automatic-scaling-group"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Micro Focus Enterprise Server AMI。 | 创建 Amazon EC2 Windows Server 实例并在该 EC2 实例中安装 Micro Focus 企业服务器二进制文件。创建 EC2 实例的亚马逊系统映像 (AMI)。有关更多信息，请参阅 [Enterprise Server 安装文档](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-FACEF60F-BAE3-446C-B2B4-4379A5DF6D9F.html)。 | 云架构师 | 
| 为企业服务器西亚经社会创建 CloudFormation 模板。 | 使用 [AWS 示例代码片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)制作一个模板，用于在自动扩缩组中创建 Enterprise Server ESCAM 的自定义堆栈。 | 云架构师 | 
| 部署 CloudFormation 堆栈以为企业服务器 ESCAW 创建 Amazon EC2 扩展组。 | 使用 CloudFormation 模板部署自动扩展组，使用上一篇文章中创建的 Micro Focus Enterprise Server Server Server Server Server | 云架构师 | 

### 创建 AWS Systems Manager Automation 运行手册
<a name="create-an-aws-systems-manager-automation-runbook"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Syst CloudFormation ems Manager 自动化运行手册创建模板。 | 使用 “*其他信息*” 部分中的示例代码片段制作一个 CloudFormation 模板，该模板将创建 Systems Manager Automation 运行手册，用于自动创建 PAC、Enterprise Server 向内扩展和企业服务器横向扩展。 | 云架构师 | 
| 部署包含 Systems Manager 自动化运行手册的 CloudFormation 堆栈。 | 使用该 CloudFormation 模板部署包含自动化运行手册的堆栈，用于创建 PAC、企业服务器扩展和企业服务器横向扩展。 | 云架构师 | 

### 为 Micro Focus Enterprise Server 创建自动扩缩组
<a name="create-an-automatic-scaling-group-for-micro-focus-enterprise-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建用于为 Micro Focus 企业服务器设置自动伸缩组的 CloudFormation 模板。 | 使用 A [WS 示例代码片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)制作一个用于创建自动扩展组的 CloudFormation 模板。此模板将重复使用为 Micro Focus Enterprise Server ESCWA 实例创建的 AMI。 然后使用 A [WS 示例代码片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html)创建自动扩展生命周期事件，并将 Amazon 设置为在同一个模板中筛选横 EventBridge 向扩展和缩小事件。 CloudFormation  | 云架构师 | 
| 为 Micro Focus 企业服务器的自动扩展组部署 CloudFormation 堆栈。 | 部署包含 Micro Focus 企业服务器自动扩展组的 CloudFormation 堆栈。 | 云架构师 | 

## 相关资源
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-resources"></a>
+ [Micro Focus Enterprise Server 性能和可用性集群 (PAC)](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-613F5E2D-2FBC-47AE-9327-48CA4FF84C5B.html) 
+ [Amazon A EC2 uto Scaling 生命周期挂钩](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)
+ [使用触发器运行自动化 EventBridge](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-cwe-target.html)

## 附加信息
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-additional"></a>

必须自动执行以下场景才可横向缩减或横向扩展 PAC 集群。

**用于启动或重新创建 PAC 自动化**

在 PAC 群集启动时，企业服务器要求西亚经社会调用 APIs 以创建 PAC 配置。这将启动并将 Enterprise Server 区域添加至 PAC 中。要创建或重新创建 PAC，请使用以下步骤进行操作： 

1. 在 ESCWA 中使用给定名称配置 [PAC 横向扩展存储库 (PSOR)](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2A420ADD-4CA6-472D-819F-371C037C0653.html)。

   ```
   POST /server/v1/config/groups/sors
   ```

1. 创建具有给定名称的 PAC，并在其上随附 PSOR。

   ```
   POST /server/v1/config/groups/pacs
   ```

1. 如果这是您第一次设置 PAC，请配置区域数据库与跨区域数据库。
**注意**  
此步骤使用 SQL 查询和 Micro Focus Enterprise Suite 命令行 **dbhfhadmin** 工具创建数据库并导入初始数据。

1. 将 PAC 定义安装到 Enterprise Server 区域。

   ```
   POST /server/v1/config/mfds 
   POST /native/v1/config/groups/pacs/${pac_uid}/install
   ```

1. 在 PAC 中启动 Enterprise Server 区域。

   ```
   POST /native/v1/regions/${host_ip}/${port}/${region_name}/start
   ```

前面的步骤可以通过使用 Windows PowerShell 脚本来实现。 

以下步骤说明了如何通过重复使用 Windows PowerShell 脚本来构建用于创建 PAC 的自动化。

1. 创建亚马逊 EC2 启动模板，在引导过程中下载或创建 Windows PowerShell 脚本。例如，您可以使用 EC2 用户数据从亚马逊简单存储服务 (Amazon S3) 存储桶下载脚本。

1. 创建 AWS Systems Manager Automation 运行手册来调用 Windows PowerShell 脚本。

1. 使用实例标签将运行手册与 ESCWA 实例关联。

1. 通过使用启动模板创建 ESCWA 自动扩缩组。 

您可以使用以下 AWS CloudFormation 代码段示例，创建自动化运行手册。

*用于创建 CloudFormation PAC 的 Systems Manager 自动化运行手册的示例片段*

```
  PACInitDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to create Enterprise Server PAC
         mainSteps:
         - action: aws:runPowerShellScript
           name: CreatePAC
           inputs:
             onFailure: Abort
             timeoutSeconds: "1200"
             runCommand:
             - | 
               C:\Scripts\PAC-Init.ps1
  PacInitAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         description: Prepare Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunPACInitDocument
             action: aws:runCommand
             timeoutSeconds: 300
             onFailure: Abort
             inputs:
               DocumentName: !Ref PACInitDocument
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
   PacInitDocumentAssociation:
     Type: AWS::SSM::Association
     Properties:
       DocumentVersion: "$LATEST"
       Name: !Ref PACInitDocument
       Targets:
         - Key: tag:Enterprise Server - ESCWA
           Values:
             - "true"
```

有关更多信息，请参阅 [Micro Focus Enterprise Server - 配置 PAC](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2B15EBA5-84AF-47C3-9F8E-EE57EB17245F.html)。

**使用新的 Enterprise Server 实例自动进行横向扩展**

横向扩展 Enterprise Server 实例时，必须将其 Enterprise Server 区域添加到 PAC 中。以下步骤说明如何调用 ESCA APIs W 并将企业服务器区域添加到 PAC 中。 

1. 将 PAC 定义安装到 Enterprise Server 区域。

   ```
   POST '/server/v1/config/mfds'
   POST /native/v1/config/groups/pacs/${pac_uid}/install
   ```

1. 在 PAC 中对区域执行热启动。

   ```
   POST /native/v1/regions/${host_ip}/${port}/${region_name}/start
   ```

1. 通过将自动扩缩组与负载均衡器关联，将 Enterprise Server 实例添加至负载均衡器。

前面的步骤可以通过使用 Windows PowerShell 脚本来实现。有关更多信息，请参阅 [Micro Focus Enterprise Server - 配置 PAC](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2B15EBA5-84AF-47C3-9F8E-EE57EB17245F.html)。

以下步骤可用于构建事件驱动的自动化，以便通过重复使用 Windows PowerShell 脚本将新启动的企业服务器实例添加到 PAC 中。 

1. 为企业服务器实例创建 Amazon EC2 启动模板，以便在引导期间配置企业服务器区域。例如，您可使用 Micro Focus Enterprise Server 命令 mfds 导入区域配置。有关此命令的更多详细信息和可用选项，请参阅 [Enterprise Server 参考](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/HRADRHCOMM06.html)。

1. 使用在上一步中创建的启动模板创建 Enterprise Server 自动扩缩组。

1. 创建 Systems Manager 自动化运行手册来调用 Windows PowerShell 脚本。 

1. 使用实例标签将运行手册与 ESCWA 实例关联。

1. 创建 Amazon EventBridge 规则以筛选企业服务器自动扩展组的 “EC2 实例启动成功” 事件，并创建使用自动化运行手册的目标。

您可以使用以下示例 CloudFormation 片段来创建自动化运行手册和规则。 EventBridge 

*用于扩展企业服务器实例的 Systems Manager 示例 CloudFormation 片段*

```
  ScaleOutDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to Adding MFDS Server into an existing PAC 
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         mainSteps:
         - action: aws:runPowerShellScript
           name: Add_MFDS
           inputs:
             onFailure: Abort
             timeoutSeconds: "300"
             runCommand:
             - |
               $ip = "{{InstanceIpAddress}}"
               if ( ${ip} -eq "Not-Available" ) {
                 $ip = aws ec2 describe-instances --instance-id {{InstanceId}} --output text --query "Reservations[0].Instances[0].PrivateIpAddress"
               }            
               C:\Scripts\Scale-Out.ps1 -host_ip ${ip} -port {{MfdsPort}}
 
   PacScaleOutAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         description: Scale Out 1 New Server in Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunScaleOutCommand
             action: aws:runCommand
             timeoutSeconds: 300
             onFailure: Abort
             inputs:
               DocumentName: !Ref ScaleOutDocument
               Parameters:
                 InstanceIpAddress: "{{InstanceIpAddress}}"
                 InstanceId: "{{InstanceId}}"
                 MfdsPort: "{{MfdsPort}}"
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
```

**用于横向缩减 Enterprise Server 实例的自动化**

与向外扩展类似，当企业服务器实例*缩减时，启动事件 EC2 实例终止生命周期操作，并且需要以下过程和 API 调用才能从 PAC 中*删除 Micro Focus Enterprise Server 实例。 

1. 在终止的 Enterprise Server 实例中停止该区域。

   ```
   POST "/native/v1/regions/${host_ip}/${port}/${region_name}/stop"
   ```

1. 从 PAC 中删除 Enterprise Server 实例。

   ```
   DELETE "/server/v1/config/mfds/${uid}"
   ```

1. 发送信号以继续终止 Enterprise Server 实例。

前面的步骤可以在 Windows PowerShell 脚本中实现。有关此过程的更多详细信息，请参阅 [Micro Focus Enterprise Server 文档 – 管理 PAC](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-E864E2E9-EB49-43BF-9AAD-7FE334749441.html)。

以下步骤说明如何构建事件驱动的自动化，以便通过重复使用 Windows 脚本从 PAC 终止企业服务器实例。 PowerShell  

1. 创建 Systems Manager 自动化运行手册来调用 Windows PowerShell 脚本。

1. 使用实例标签将运行手册与 ESCWA 实例关联。

1. 为 EC2 实例终止创建自动伸缩组生命周期挂钩。

1. 创建 Amazon EventBridge 规则以筛选企业服务器自动扩展组的 EC2 实例终止生命周期操作事件，并创建使用自动化运行手册的目标。 

您可以使用以下示例 CloudFormation 模板来创建 Systems Manager 自动化运行手册、生命周期挂钩和 EventBridge 规则。

*用于在企业 CloudFormation 服务器实例中进行扩展的 Systems Manager 自动化运行手册的示例片段*

```
  ScaleInDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to Remove MFDS Server from PAC 
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         mainSteps:
         - action: aws:runPowerShellScript
           name: Remove_MFDS
           inputs:
             onFailure: Abort
             runCommand:
             - |
               $ip = "{{InstanceIpAddress}}"
               if ( ${ip} -eq "Not-Available" ) {
                 $ip = aws ec2 describe-instances --instance-id {{InstanceId}} --output text --query "Reservations[0].Instances[0].PrivateIpAddress"
               }            
               C:\Scripts\Scale-In.ps1 -host_ip ${ip} -port {{MfdsPort}}
 
   PacScaleInAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"            
           InstanceId:
             type: String
             default: "Not-Available"                
         description: Scale In 1 New Server in Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunScaleInCommand
             action: aws:runCommand
             timeoutSeconds: "600"
             onFailure: Abort
             inputs:
               DocumentName: !Ref ScaleInDocument
               Parameters:
                 InstanceIpAddress: "{{InstanceIpAddress}}"
                 MfdsPort: "{{MfdsPort}}"
                 InstanceId: "{{InstanceId}}"
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
           - name: TerminateTheInstance
             action: aws:executeAwsApi
             inputs:
               Service: autoscaling
               Api: CompleteLifecycleAction
               AutoScalingGroupName: !Ref AutoScalingGroup
               InstanceId: "{{ InstanceId }}"
               LifecycleActionResult: CONTINUE
               LifecycleHookName: !Ref ScaleInLifeCycleHook
```

**Amazon EC2 自动扩展触发器的自动化**

为 Enterprise Server 实例设置扩展策略的过程需要了解应用程序的行为。多数情况下，您可设置目标跟踪扩展策略。例如，您可以使用平均 CPU 使用率作为自动扩展策略设置的 Amazon CloudWatch 指标。有关更多信息，请参阅 [Amazon A EC2 uto Scaling 的目标跟踪扩展政策](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html)。对于具有常规流量模式的应用程序，请考虑使用预测扩展策略。有关更多信息，请参阅 [Amazon A EC2 uto Scaling 的预测性扩展](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html)。 

# 在 Amazon Web Services Cloud 中构建高级大型机文件查看器
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud"></a>

*Boopathy GOPALSAMY 和 Jeremiah O'Connor，Amazon Web Services*

## Summary
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-summary"></a>

此模式提供代码示例和步骤，帮助您构建高级工具，以使用 AWS 无服务器服务浏览和查看大型机固定格式文件。该模式提供了如何将大型机输入文件转换为用于浏览和搜索的 Amazon S OpenSearch ervice 文档的示例。文件查看器工具可以帮助您实现以下目标：
+ 保持相同的大型机文件结构和布局以保持您的 AWS 目标迁移环境中的一致性（例如，在将文件传输给外部方的批处理应用程序中，您可为文件保持相同的布局）
+ 在大型机迁移过程中加快开发和测试速度
+ 支持迁移后的维护活动

## 先决条件和限制
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 具有可由您的旧平台访问的子网的虚拟私有云（VPC）
+ 
**注意**  
输入文件及其相应的面向业务的通用语言 (COBOL) 字帖 (: 有关输入文件和 COBOL 字帖的示例，请参阅存储库中的。[gfs-mainframe-solutions](https://github.com/aws-samples/gfs-mainframe-patterns.git) GitHub 有关 COBOL 字帖的更多信息，请参阅 IBM 网站上的《[适用于 z/OS 6.3 的企业 CO](https://publibfp.boulder.ibm.com/epubs/pdf/igy6pg30.pdf) BOL 编程指南》。）

**限制**
+ 副本解析限制为不超过两个嵌套级别（出现）

## 架构
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-architecture"></a>

**源技术堆栈**
+ 以 [FB（固定屏蔽）](https://www.ibm.com/docs/en/zos-basic-skills?topic=set-data-record-formats)格式输入文件
+ COBOL 副本布局

**目标技术堆栈**
+ Amazon Athena
+ 亚马逊 OpenSearch 服务
+ Amazon Simple Storage Service（Amazon S3）
+ AWS Lambda
+ AWS Step Functions

**目标架构**

下图显示了解析大型机输入文件并将其转换为 OpenSearch 服务文档以供浏览和搜索的过程。

![\[解析大型机输入文件并将其转换为服务的过程。 OpenSearch\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/36d72b00-d163-455f-9e59-e2c872e7c28a/images/cce68438-bcf2-48c1-b86b-01242235ec76.png)


下图显示了如下工作流：

1. 管理员用户或应用程序将输入文件推送到一个 S3 存储桶，并将 COBOL copybook 推送到另一个 S3 存储桶。

1. 
**注意**  
包含输入文件的 S3 存储桶调用 Lambda 函数，启动无服务器 Step Functions 工作流。：在此模式中，可以选择使用 S3 事件触发器和 Lambda 函数来驱动 Step Functions 工作流。此模式中的 GitHub 代码示例不包括对这些服务的使用，但您可以根据自己的要求使用这些服务。

1. Step Functions 工作流协调来自以下 Lambda 函数的所有批处理：
   + 该 `s3copybookparser.py` 函数解析副本布局并提取字段属性、数据类型和偏移量（输入数据处理的必要条件）。
   + `s3toathena.py` 函数创建 Athena 表格布局。Athena 解析 `s3toathena.py` 函数处理的输入数据，并将这些数据转换为 CSV 文件。
   + 该`s3toelasticsearch.py`函数从 S3 存储桶中提取结果文件并将该文件推送到 OpenSearch 服务。

1. 用户访问带有 S OpenSearch ervice 的 OpenSearch 仪表板以各种表和列格式检索数据，然后对索引数据运行查询。

## 工具
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-tools"></a>

**Amazon Web Services**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 是一种交互式查询服务，使您可使用标准 SQL 直接分析 Amazon Simple Storage Service (Amazon S3) 中的数据。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，而无需预置或管理服务器。它仅在需要时运行您的代码，并且能自动扩缩，因此您只需为使用的计算时间付费。在这种模式中，您可以使用 Lambda 实现核心逻辑，例如解析文件、转换数据以及将数据加载到 S OpenSearch ervice 中以进行交互式文件访问。
+ [Amazon S OpenSearch er](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) vice 是一项托管服务，可帮助您在 AWS 云中部署、运营和扩展 OpenSearch 服务集群。在这种模式中，您可以使用 S OpenSearch ervice 为转换后的文件编制索引，并为用户提供交互式搜索功能。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一项无服务器编排服务，可帮助您搭配使用 Lambda 函数和其他 Amazon Web Services 来构建业务关键型应用程序。在这种模式中，您可使用 Step Functions 编排 Lambda 函数。

**其他工具**
+ [GitHub](https://github.com/)是一项代码托管服务，提供协作工具和版本控制。
+ [Python](https://www.python.org/) 是高级编程语言。

**代码**

此模式的代码可在 GitHub [gfs-mainframe-patterns](https://github.com/aws-samples/gfs-mainframe-patterns.git)存储库中找到。

## 操作说明
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-epics"></a>

### 准备目标环境
<a name="prepare-the-target-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | [创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)，用于存储副本、输入文件和输出文件。我们建议您的 S3 存储桶采用以下文件夹结构：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 创建 s3copybookparser 函数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 创建 s3toathena 函数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 创建 s3toelasticsearch 函数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 创建 OpenSearch 服务集群。 | **创建集群**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)**向 IAM 角色授予访问权限**要提供 Lambda 函数的 IAM 角色 (`arn:aws:iam::**:role/service-role/s3toelasticsearch-role-**`) 的精细访问权限，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 为编排创建 Step Functions。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 

### 部署并运行
<a name="deploy-and-run"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将输入文件和副本上传到 S3 存储桶。 | 从[GitHub ](https://github.com/aws-samples/gfs-mainframe-patterns.git)存储库示例文件夹下载示例文件，然后将文件上传到您之前创建的 S3 存储桶。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 
| 调用 Step Functions。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)<pre>{<br />  "s3_copybook_bucket_name": "<BUCKET NAME>",<br />  "s3_copybook_bucket_key": "<COPYBOOK PATH>",<br />  "s3_source_bucket_name": "<BUCKET NAME",<br />  "s3_source_bucket_key": "INPUT FILE PATH"<br />}</pre>例如：<pre>{<br />  "s3_copybook_bucket_name": "fileaidtest",<br />  "s3_copybook_bucket_key": "copybook/acctix.cpy",<br />  "s3_source_bucket_name": "fileaidtest",<br />  "s3_source_bucket_key": "input/acctindex"<br />}</pre> | 常规 AWS | 
| 在 Step Functions 中验证工作流执行。 | 在 [Step Functions 控制台](https://console.aws.amazon.com/states/home)，在**图表检查器**中查看工作流执行情况。执行运行状态用颜色编码来表示执行状态。例如，蓝色表**示进行中**，绿色表示**成功**，红色表示**失败**。您也可以查看**执行事件历史记录**部分的表格，了解有关执行事件的更多详细信息。有关图形化工作流执行的示例，请参阅此模式的*其他信息*部分中的 *Step Functions 图*。 | 常规 AWS | 
| 在 Amazon 中验证配送日志 CloudWatch。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)有关成功传送日志的示例，请参阅此模式的 “*其他信息*” 部分中的*CloudWatch 传送日*志。 | 常规 AWS | 
| 在 OpenSearch 仪表板中验证格式化后的文件并执行文件操作。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 常规 AWS | 

## 相关资源
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-resources"></a>

**参考**
+ [COBOL 副本示例](https://www.ibm.com/docs/en/record-generator/3.0?topic=SSMQ4D_3.0.0/documentation/cobol_rcg_examplecopybook.html)（IBM 文档）
+ [BMC Compuware File-Aid](https://www.bmc.com/it-solutions/bmc-compuware-file-aid.html)（BMC 文档）

**教程**
+ [教程：使用 Amazon S3 触发器调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)（AWS Lambda 文档）
+ [如何使用 AWS Step Functions 和 AWS Lambda 创建无服务器工作流](https://aws.amazon.com/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/)（AWS 文档）
+ 在@@ [亚马逊 OpenSearch 服务中使用 OpenSearch 控制面板](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/dashboards.html)（AWS 文档）

## 附加信息
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-additional"></a>

**Step Functions 图**

以下示例显示了 Step Functions 图表。该图显示了在此模式中使用的 Lambda 函数的执行运行状态。

![\[Step Functions 图显示了在此模式中使用的 Lambda 函数的执行运行状态。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/36d72b00-d163-455f-9e59-e2c872e7c28a/images/11093e5d-2f9e-4bbf-8abc-f3b2980dd550.png)


**CloudWatch 传送日志**

以下示例显示了 `s3toelasticsearch` 执行执行的成功传送日志。


| 
| 
| 2022-08-10T15:53:33.033-05:00 | 处理文档数量：100 |  | 
| --- |--- |--- |
|  | 2022-08-10T15:53:33.171-05:00 | [信息] 2022-08-10T20：53:33.171 Z a1b2c3d4-5678-90ab-cdef-: 443/\$1Bulk [状态:200 请求:0.100s] EXAMPLE11111 https://search-essearch-3h4uqclifeqaj2vg4mphe7ffle.us-east-2.es.amazonaws.com | 
|  | 2022-08-10T15:53:33.172-05:00 | 批量写入成功：100 个文档 | 

# 对经过 Blu Age 现代化改造的大型机工作负载进行容器化
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age"></a>

*Richard Milner-Watts，亚马逊 Web Services*

## Summary
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-summary"></a>

此模式为运行已使用 [Blu Age](https://www.bluage.com/) 工具实现现代化的大型机工作负载提供了一个示例容器环境。Blu Age 将传统的大型机工作负载转换至现代 Java 代码。此模式为 Java 应用程序提供了包装，因此您可使用 [Amazon Elastic Container Service (Amazon ECS)](https://aws.amazon.com/ecs/) 或 [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/) 等运行容器编排服务。

有关使用 Blu Age 和 Amazon Web Services 实现工作负载现代化的更多信息，请参见以下 AWS Prescriptive Guidance 出版物：
+ [在无服务器 AWS 基础设施上运行现代化 Blu Age 大型机工作负载](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [使用 Terraform 为容器化 Blu Age 应用程序部署环境](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html)

如需有关使用 Blu Age 对大型机工作负载进行现代化改造的帮助，请在 [Blu Age 网站](https://www.bluage.com/)上选择**联系我们的专家**。要获得有关将现代化工作负载迁移到 AWS、将其与 Amazon Web Services 集成以及将其投入生产的帮助，请联系您的 AWS 客户经理或填写 [AWS Professional Services 表](https://pages.awscloud.com/AWS-Professional-Services.html)。

## 先决条件和限制
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-prereqs"></a>

**先决条件**
+ Blu Age 创建的现代化 Java 应用程序。出于测试目的，此模式提供了示例 Java 应用程序，您可将其用作概念验证。
+ [Docker](https://aws.amazon.com/docker/) 环境，您可以用它来构建容器。

**限制**

根据您使用的容器编排平台，可供容器使用的资源（例如 CPU、RAM 和存储）可能会受到限制。例如，如果您将 Amazon ECS 与 AWS Fargate 配合使用，请参阅 [Amazon ECS 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)了解限制和注意事项。

## 架构
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-architecture"></a>

**源技术堆栈**
+ Blu Age
+ Java

**目标技术堆栈**
+ Docker

**目标架构**

下图显示了 Docker 容器中 Blu Age 应用程序的架构。

![\[Docker 容器中的 Blu Age 应用程序\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/c1747094-357b-4222-b4eb-b1336d810f83/images/0554332d-eff5-49ca-9789-da39b5a10045.png)


1. 容器的入口点是包装器脚本。该 bash 脚本负责为 Blu Age 应用程序准备运行时环境，并处理输出。

1. 容器内的环境变量用于配置包装器脚本中的变量，例如 Amazon Simple Storage Service (Amazon S3) 存储桶名称和数据库凭证。环境变量由 AWS Secrets Manager 或 Parameter Store（AWS Systems Manager 的一项功能）提供。如果您使用 Amazon ECS 作为容器编排服务，也可在 Amazon ECS 任务定义中对环境变量进行硬编码。

1. 在运行 Blu Age 应用程序前，包装脚本负责将所有输入文件从 S3 存储桶提取到容器中。AWS 命令行界面（AWS CLI）已安装在容器中。这提供了一种通过网关虚拟私有云（VPC）端点访问 Amazon S3 中存储的数据元的机制。

1. Blu Age 应用程序的 Java 档案 (JAR) 文件可能需要与其他数据来源（例如 Amazon Aurora）进行通信。

1. 完成后，包装脚本将生成的输出文件传送到 S3 存储桶中以供进一步处理（例如，由 Amazon CloudWatch 日志服务处理）。如果您使用的是标准 CloudWatch 日志记录的替代方案，则该模式还支持将压缩的日志文件传送到 Amazon S3。

## 工具
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-tools"></a>

**Amazon Web Services**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一项安全、可扩展且可靠的托管容器映像注册表服务。
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)是一项快速且可扩展的容器管理服务，可帮助运行、停止和管理集群上的容器。

**工具**
+ [Docker](https://aws.amazon.com/docker/)是软件平台，用于快速构建、测试和部署应用程序。Docker 将软件打包成称为[容器](https://aws.amazon.com/containers/)的标准化单元，容器拥有软件运行所需一切，包括库、系统工具、代码和运行时系统。您可使用 Docker 将应用程序部署和扩缩到任何环境中。
+ [Bash](https://www.gnu.org/software/bash/manual/) 是 GNU 操作系统的命令语言接口 (Shell)。
+ [Java](https://www.java.com/) 是这种模式中使用的编程语言和开发环境。
+ [Blu Age](https://www.bluage.com/) 是 AWS 大型机现代化工具，可将传统的大型机工作负载（包括应用程序代码、依赖项和基础设施）转换为现代云工作负载。

**代码存储库**

此模式的代码可在 GitHub [Blu Age 示例容器存储库](https://github.com/aws-samples/aws-blu-age-sample-container)中找到。

## 最佳实践
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-best-practices"></a>
+ 使用环境变量，将变量外部化以改变应用程序的行为。这些变量使容器编排解决方案能够更改运行时环境，而无需重建容器。此模式包括对 Blu Age 应用程序有用的环境变量示例。
+ 在运行 Blu Age 应用程序之前，请验证所有应用程序依赖项。例如，验证数据库是否可用以及凭证是否有效。在包装脚本中编写测试以验证依赖项，如果不满足则提前失败。
+ 在包装器脚本中使用详细日志记录。直接与正在运行的容器交互可能具有挑战性，具体取决于编排平台以及作业所需时间。确保将有用的输出写入到 `STDOUT`，以帮助诊断任何问题。例如，输出可能包括运行应用程序之前和之后应用程序工作目录的内容。

## 操作说明
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-epics"></a>

### 获取 Blu Age 应用程序 JAR 文件
<a name="obtain-a-blu-age-application-jar-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 选项 1 - 使用 Blu Age 获取应用程序 JAR 文件。 | 这种模式中的容器需要 Blu Age 应用程序。或者，您可使用随此模式提供的示例 Java 应用程序作为原型。与 Blu Age 团队合作，为您的应用程序获取 JAR 文件，该文件可以烘焙到容器中。如果 JAR 文件不可用，请参见下一个任务以改用示例应用程序。 | 云架构师 | 
| 选项 2 - 生成或使用提供的示例应用程序 JAR 文件。 | 此模式提供了预先构建示例 JAR 文件。此文件将应用程序的环境变量输出到 `STDOUT`，然后休眠 30 秒后退出。此文件名为`bluAgeSample.jar`，位于存储库的 [docker 文件夹中](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/docker)。 GitHub 如果要修改代码并构建自己的 JAR 文件版本，请使用位于的源代码[。 /java\$1 sample/src/sample \$1java\$1app.java 在存储库](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/java_sample/src)中。 GitHub 您可在 [./java\$1sample/build.sh](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/java_sample) 上使用构建脚本，编译 Java 源代码并生成一个新的 JAR 文件。 | 应用程序开发人员 | 

### 构建 Blu Age 容器
<a name="build-the-blu-age-container"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆 GitHub 存储库。 | 使用以下命令克隆代码存储库示例：<pre>git clone https://github.com/aws-samples/aws-blu-age-sample-container</pre> | AWS DevOps | 
| 使用 Docker 构建容器。 | 在将容器推送至 Docker 注册表（例如 Amazon ECR）之前，使用 Docker 构建容器：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html) | AWS DevOps | 
| 测试 Blu Age 容器。 | （可选）如有必要，请使用以下命令在本地测试容器：<pre>docker run -it <tag> /bin/bash</pre> | AWS DevOps | 
| 向您的 Docker 存储库进行身份验证。 | 如果您计划使用 Amazon ECR，请按照 [Amazon ECR 文档](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)中的说明安装和配置 AWS CLI，并使用您的默认注册表对 Docker CLI 进行身份验证。我们建议您使用[get-login-password 命令](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/get-login-password.html)进行身份验证。  如果您使用**查看推送命令**按钮[，Amazon ECR 控制台](https://console.aws.amazon.com/ecr/)会提供此命令的预填充版本。有关更多信息，请参阅 [Amazon ECR 文档](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-console.html)。<pre>aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com</pre>如您不打算使用 Amazon ECR，请按照为您的容器注册系统提供的说明进行操作。 | AWS DevOps | 
| 创建容器存储库。 | 在 Amazon ECR 中创建存储库。有关说明，请参见示例[使用 Terraform 为容器化 Blu Age 应用程序部署环境](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html)。如果您使用的是其他容器注册表系统，请按为该系统提供的说明进行操作。 | AWS DevOps | 
| 标记您的容器，并将其推送到目标存储库。 | 如果您使用的是Amazon ECR：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)有关更多信息，请参阅《*Amazon ECR 用户指南*》中的[推送 Docker 映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。 | AWS DevOps | 

## 相关资源
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-resources"></a>

**AWS 资源**
+ [AWS Blu Age 示例容器存储库](https://github.com/aws-samples/aws-blu-age-sample-container)
+ [在无服务器 AWS 基础设施上运行现代化 Blu Age 大型机工作负载](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [使用 Terraform 为容器化 Blu Age 应用程序部署环境](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html)
+ [将 Amazon ECR 与 AWS CLI 配合使用](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)（*Amazon ECR 用户指南*）
+ [私有注册表身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)（*Amazon ECR 用户指南*）
+ [Amazon ECS 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)
+ [Amazon EKS 文档](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**其他资源**
+ [Blu Age 网站](https://www.bluage.com/)
+ [Docker 网站](https://docker.com/)

# 使用 Python 在 AWS 上将 EBCDIC 数据转换并解压为 ASCII
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python"></a>

*Luis Gustavo Dantas，Amazon Web Services*

## Summary
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-summary"></a>

由于大型机通常托管关键业务数据，因此在将数据迁移置 Amazon Web Services (AWS) 云或其他美国信息交换标准规范 (ASCII) 环境时，实现数据现代化很重要。在大型机上，数据通常以扩展二进制编码十进制交换码 (EBCDIC) 格式编码。导出数据库、Virtual Storage Access Method (VSAM) 或平面文件通常会生成打包的二进制 EBCDIC 文件，这些文件迁移比较复杂。最常用的数据库迁移解决方案是变更数据捕获 (CDC)，在大多数情况下，其会自动转换数据编码。但是，CDC 机制可能不适用于此数据库、VSAM 或平面文件。对于此文件，需要另一种方法来实现数据现代化。

此模式介绍了如何通过将 EBCDIC 数据转换为 ASCII 格式来实现其现代化。转换后，您可将数据加载至分布式数据库中，也可以让云中的应用程序直接处理数据。该模式使用[mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 存储库中的转换脚本和示例文件。

## 先决条件和限制
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ EBCDIC 输入文件及其相应的通用面向业务的语言 (COBOL) 副本。存储库中包含一个 EBCDIC 文件和 COBOL 字帖样本。[mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 有关 COBOL 字帖的更多信息，请参阅 IBM 网站上的 [ z/OS 6.4 版 Enterprise COBOL 编程指南](https://publibfp.dhe.ibm.com/epubs/pdf/igy6pg40.pdf)。

**限制**
+ 不支持 COBOL 程序定义的文件布局。它们必须单独提供。

**产品版本**
+ Python 版本 3.8 或更高版本。

## 架构
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-architecture"></a>

**源技术堆栈**
+ 大型机的 EBCDIC 数据
+ COBOL 副本

**目标技术堆栈**
+ 虚拟私有云 (VPC EC2) 中的亚马逊弹性计算云 (Amazon) 实例
+ Amazon Elastic Block Store（Amazon EBS）
+ Python 及其必需的软件包、 JavaScript 对象表示法 (JSON)、系统和日期时间
+ ASCII 平面文件可供现代应用程序读取或加载至关系数据库表中

**目标架构**

![\[使用 Python 脚本和 COBOL 副本在 EC2 实例上将 EBCDIC 数据转换为 ASCII\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f5907bfe-7dff-4cd0-8523-57015ad48c4b/images/4f97b1dd-3f20-4966-a291-22180680ea99.png)


架构图显示了在实例上将 EBCDIC 文件转换为 ASCII 文件的过程： EC2 

1. 使用 **parse\$1copybook\$1to\$1json.py** 脚本，您可将 COBOL 副本转换为 JSON 文件。

1. 使用 JSON 文件和 **extract\$1ebcdic\$1to\$1ascii.py** 脚本，您可将 EBCDIC 数据转换为 ASCII 文件。

**自动化和扩缩**

在首次手动文件转换所需资源到位后，您可自动进行文件转换。此示例不包括自动化说明。有多种方法可自动转换。下文概述了一种可能使用的方法：

1. 将 AWS 命令行界面（AWS CLI）和 Python 脚本命令封装至 shell 脚本中。

1. 创建一个 AWS Lambda 函数，该函数将外壳脚本任务异步提交到实例。 EC2 有关更多信息，请参阅[使用 AWS Lambda 安排 SSH 作业](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/)。

1. 创建 Amazon Simple Storage Service (Amazon S3) 触发器，该触发器在每次上传旧文件时调用 Lambda 函数。有关更多信息，请参见[使用 Amazon S3 触发器调用 Lambda函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)。

## 工具
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速扩展或缩减它们。
+ [亚马逊弹性区块存储 (Amazon EBS) E](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) lastic Block Store 提供块级存储卷，用于亚马逊弹性计算云 (Amazon) 实例。 EC2
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [AWS Identity and Access Management (AWS IAM) ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)通过控制验证和授权使用您 AWS 资源的用户，帮助您安全地管理对您 AWS 资源的访问。

**其他工具**
+ [GitHub](https://github.com/)是一项代码托管服务，提供协作工具和版本控制。
+ [Python](https://www.python.org/) 是高级编程语言。

**代码存储库**

此模式的代码可在[mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 存储库中找到。

## 操作说明
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-epics"></a>

### 准备实 EC2 例
<a name="prepare-the-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动实 EC2 例。 | 该 EC2 实例必须具有出站互联网访问权限。这允许实例访问上可用的 Python 源代码 GitHub。创建实例：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 常规 AWS | 
| 安装 Git。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 常规 AWS、Linux | 
| 安装 Python。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 常规 AWS、Linux | 
| 克隆 GitHub 存储库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 通用 AWS， GitHub | 

### 通过 EBCDIC 数据创建 ASCII 文件
<a name="create-the-ascii-file-from-the-ebcdic-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 COBOL 副本解析至 JSON 布局文件。 | 在 `mainframe-data-utilities` 文件夹中，运行 **parse\$1copybook\$1to\$1json.py** 脚本。此自动化模块从 COBOL 副本读取文件布局并创建 JSON 文件。JSON 文件包含解释和提取源文件中数据所需信息。这将通过 COBOL 副本创建 JSON 元数据。以下命令将 COBOL 副本转换为 JSON 文件。<pre>python3 parse_copybook_to_json.py \<br />-copybook LegacyReference/COBPACK2.cpy \<br />-output sample-data/cobpack2-list.json \<br />-dict sample-data/cobpack2-dict.json \<br />-ebcdic sample-data/COBPACK.OUTFILE.txt \<br />-ascii sample-data/COBPACK.ASCII.txt \<br />-print 10000</pre>该脚本打印所接收到的参数。<pre>-----------------------------------------------------------------------<br />Copybook file...............| LegacyReference/COBPACK2.cpy<br />Parsed copybook (JSON List).| sample-data/cobpack2-list.json<br />JSON Dict (documentation)...| sample-data/cobpack2-dict.json<br />ASCII file..................| sample-data/COBPACK.ASCII.txt<br />EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt<br />Print each..................| 10000<br />-----------------------------------------------------------------------</pre>有关参数的更多信息，请参阅 GitHub 存储库中的 [README 文件](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)。 | 常规 AWS、Linux | 
| 检查 JSON 布局文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)<pre> "input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt",<br /> "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt",<br /> "max": 0,<br /> "skip": 0,<br /> "print": 10000,<br /> "lrecl": 150,<br /> "rem-low-values": true,<br /> "separator": "|",<br /> "transf": [<br /> {<br /> "type": "ch",<br /> "bytes": 19,<br /> "name": "OUTFILE-TEXT"<br /> } </pre>JSON 布局文件最重要属性是：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)有关 JSON 布局文件的更多信息，请参阅 GitHub 存储库中的[自述文件](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)。 | 常规 AWS、JSON | 
| 创建 ASCII 文件。 | 运行 **extract\$1ebcdic\$1to\$1ascii.py** 脚本，该脚本包含在克隆的 GitHub 存储库中。此脚本读取 EBCDIC 文件，并写入转换后且可读的 ASCII 文件。<pre>python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json</pre>当脚本处理 EBCDIC 数据，它会为每批 10,000 条记录打印一条消息。请参阅以下示例。<pre>------------------------------------------------------------------<br />2023-05-15 21:21:46.322253 | Local Json file   | -local-json | sample-data/cobpack2-list.json<br />2023-05-15 21:21:47.034556 | Records processed | 10000<br />2023-05-15 21:21:47.736434 | Records processed | 20000<br />2023-05-15 21:21:48.441696 | Records processed | 30000<br />2023-05-15 21:21:49.173781 | Records processed | 40000<br />2023-05-15 21:21:49.874779 | Records processed | 50000<br />2023-05-15 21:21:50.705873 | Records processed | 60000<br />2023-05-15 21:21:51.609335 | Records processed | 70000<br />2023-05-15 21:21:52.292989 | Records processed | 80000<br />2023-05-15 21:21:52.938366 | Records processed | 89280<br />2023-05-15 21:21:52.938448 Seconds 6.616232</pre>有关如何更改打印频率的信息，请参阅 GitHub 存储库中的 [README 文件](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)。 | 常规 AWS | 
| 检查 ASCII 文件。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)如果您使用了提供的示例 EBCDIC 文件，以下是 ASCII 文件中的第一条记录。<pre>00000000: 2d30 3030 3030 3030 3030 3130 3030 3030  -000000000100000<br />00000010: 3030 307c 3030 3030 3030 3030 3031 3030  000|000000000100<br />00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030  000000|-00000000<br />00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31  0100000000|0|0|1<br />00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030  00000000|-100000<br />00000050: 3030 307c 3130 3030 3030 3030 307c 2d31  000|100000000|-1<br />00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30  00000000|00000|0<br />00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d  0000|100000000|-<br />00000080: 3130 3030 3030 3030 307c 3030 3030 3030  100000000|000000<br />00000090: 3030 3030 3130 3030 3030 3030 307c 2d30  0000100000000|-0<br />000000a0: 3030 3030 3030 3030 3031 3030 3030 3030  0000000001000000<br />000000b0: 3030 7c41 7c41 7c0a                      00|A|A|.</pre> | 常规 AWS、Linux | 
| 评估 EBCDIC 文件。 | 在 Amazon EC2 控制台中，输入以下命令。这将会打开 EBCDIC 文件的第一条记录。<pre>head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd</pre>如果您使用 EBCDIC 示例文件，则结果如下所示。<pre> 00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `...............<br /> 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................<br /> 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................<br /> 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................<br /> 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................<br /> 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................<br /> 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................<br /> 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................<br /> 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................<br /> 00000090: 0000 0000 0000 ......</pre>要评估源文件和目标文件之间的等效性，则需要全面了解 EBCDIC。例如，示例 EBCDIC 文件的第一个字符是连字符 (`-`)。在 EBCDIC 文件的十六进制表示法中，此字符由 `60` 表示，在 ASCII 文件的十六进制表示法中，该字符由 `2D` 表示。有关 EBCDIC-to-ASCII转换表，请参阅 IBM 网站上的 [EBCDIC 到 ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii)。 | 常规 AWS、Linux、EBCDIC | 

## 相关资源
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-resources"></a>

**参考**
+ [EBCDIC 字符集](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set)（IBM 文档）
+ [EBCDIC 到 ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii)（IBM 文档）
+ [COBOL](https://www.ibm.com/docs/en/i/7.1?topic=languages-cobol)（IBM 文档）
+ [JCL 的基本概念](https://www.ibm.com/docs/en/zos-basic-skills?topic=collection-basic-jcl-concepts)（IBM 文档）
+ [连接到你的 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)（亚马逊 EC2 文档）

**教程**
+ [使用 AWS Lambda 安排 SSH 多页](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/)（AWS Blog 文章）
+ [使用 Amazon S3 触发器调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)（AWS Lambda 文档）

# 在 Amazon S3 中使用以下命令将大型机文件从 EBCDIC 格式转换为字符分隔的 ASCII 格式 AWS Lambda
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda"></a>

*Luis Gustavo Dantas，Amazon Web Services*

## Summary
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-summary"></a>

此模式向您展示如何启动自动将大型机扩展二进制编码十进制交换码 (EBCDIC) 文件转换为字符分隔的美国信息交换标准代码 (ASCII) 文件的 AWS Lambda 功能。在 ASCII 文件上传至 Amazon Simple Storage Service (Amazon S3) 存储桶之后，Lamba 函数运行。文件转换后，可以在基于 x86 工作负载上读取 ASCII 文件或将文件加载到现代数据库中。

此模式中演示的文件转换方法可帮助您克服在现代环境中处理 EBCDIC 文件所面临的挑战。以 EBCDIC 编码的文件通常包含二进制或压缩十进制格式表示的数据，并且字段的长度是固定的。这些特征造成了障碍，因为基于 x86 的现代工作负载或分布式环境通常使用的是 ASCII 编码数据，无法处理 EBCDIC 文件。

## 先决条件和限制
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 亚马逊 S3 存储桶
+ 具有管理权限的 AWS Identity and Access Management (IAM) 用户
+ AWS CloudShell
+ [Python 3.8.0](https://www.python.org/downloads/release/python-380/) 或更高版本
+ 以 EBCDIC 编码的平面文件及其相应的数据结构，采用面向业务的通用语言 (COBOL) 副本

**注意**  
此模式使用示例 EBCDIC 文件（[CLIENT.EBCDIC.txt](https://github.com/aws-samples/mainframe-data-utilities/blob/main/sample-data/CLIENT.EBCDIC.txt)）及其相应的 COBOL 副本（[COBKS05.cpy](https://github.com/aws-samples/mainframe-data-utilities/blob/main/LegacyReference/COBKS05.cpy)）。这两个文件都在 GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)存储库中可用。

**限制**
+ COBOL 副本通常包含多个布局定义。该[mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)项目可以解析这种抄本，但无法推断出在数据转换时要考虑哪种布局。这是因为副本不包含这种逻辑（改为保留在 COBOL 程序中）。因此，解析副本后，必须要手动配置布局选择规则。
+ 这种模式受 [Lambda 配额](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)约束。

## 架构
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-architecture"></a>

**源技术堆栈**
+ IBM z/OS、IBM i 和其他 EBCDIC 系统
+ 数据以 EBCDIC 编码的顺序文件（例如 IBM Db2 卸载）
+ COBOL 副本

**目标技术堆栈**
+ Amazon S3
+ Amazon S3 事件通知
+ IAM
+ Lambda 函数
+ Python 3.8 或更高版本
+ 大型机数据实用程序
+ JSN 元数据
+ 以字符分隔的 ASCII 文件

**目标架构**

下图介绍了将大型机 EBCDIC 文件转换为 ASCII 文件的架构。

![\[用于将大型机 EBCDIC 文件转换至 ASCII 文件的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/97ab4129-2639-4733-86cb-962d91526df4/images/3ca7ca44-373a-434f-8c40-09e7c2abf5ec.png)


下图显示了如下工作流：

1. 用户运行副本解析器脚本，其中该脚本可将 COBOL 副本转换至 JSON 文件。

1. 用户将 JSON 元数据上传至 Amazon S3 存储桶。这使得数据转换 Lambda 函数可读取元数据。

1. 用户或自动流程将 EBCDIC 文件上传至 Amazon S3 存储桶。

1. Amazon S3 通知事件将会触发数据转换 Lambda 函数。

1. AWS 验证 Lambda 函数的 Amazon S3 存储桶读写权限。

1. Lambda 从 Amazon S3 存储桶读取文件，然后在本地将文件从 EBCDIC 转换至 ASCII。

1. Lambda 在亚马逊上记录流程状态。 CloudWatch

1. Lamba 将 ASCII 文件重新写入子 Amazon S3。

**注意**  
副本解析器脚本在将元数据转换为 JSON 格式，然后将该数据存储至 Amazon S3 存储桶之后，仅运行一次。初始转换后，所有引用 Amazon S3 存储桶的相同 JSON 文件的 EBCDIC 文件都将使用现有的元数据配置。

## 工具
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-tools"></a>

**AWS 服务**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 可帮助您实时监控您的 AWS 资源和运行的应用程序 AWS 的指标。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)是一个基于浏览器的外壳，你可以使用 AWS Command Line Interface (AWS CLI) 和一系列预装的开发工具来进行管理 AWS 服务 。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。Lambda 仅在需要时运行您的代码，并且能自动扩缩，因此您只需为使用的计算时间付费。

**其他工具**
+ [GitHub](https://github.com/)是一项代码托管服务，提供协作工具和版本控制。
+ [Python](https://www.python.org/) 是高级编程语言。

**代码**

此模式的代码可在 GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities)存储库中找到。

## 最佳实践
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-best-practices"></a>

考虑下面的最佳实践：
+ 在 Amazon 资源名称（ARN）级别设置所需权限。
+ 始终为 IAM policy 授予最低权限。有关更多信息，请参阅 IAM 文档中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-epics"></a>

### 创建环境变量与工作文件夹
<a name="create-environment-variables-and-a-working-folder"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建环境变量。 | 将以下环境变量复制至文本编辑器，然后将以下示例中的 `<placeholder>` 值替换为您的资源值：<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre> AWS 区域 稍后，您将创建对您的 Amazon S3 存储桶的引用。 AWS 账户要定义环境变量，请打开[CloudShell 控制台](https://console.aws.amazon.com/cloudshell/)，然后将更新的环境变量复制并粘贴到命令行中。每次会 CloudShell 话重新启动时都必须重复此步骤。 | 常规 AWS | 
| 创建工作文件夹。 | 要简化以后的资源清理过程，请运行以下命令在中 CloudShell 创建一个工作文件夹：<pre>mkdir workdir; cd workdir</pre>每次断开与会 CloudShell 话的连接时，都必须将目录更改为工作目录 (`workdir`)。 | 常规 AWS | 

### 定义 IAM 角色和策略
<a name="define-an-iam-role-and-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Lambda 函数的信任策略。 | EBCDIC 转换器在 Lambda 函数中运行。该函数必须具有 IAM 角色。在创建 IAM 角色前，您必须定义信任策略文档，使资源能够承担该策略。在 CloudShell 工作文件夹中，通过运行以下命令创建策略文档：<pre>E2ATrustPol=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "Service": "lambda.amazonaws.com"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2ATrustPol" > E2ATrustPol.json</pre> | 常规 AWS | 
| 为 Lambda 转换用于创建 IAM 角色。 | 要创建 IAM 角色，请在 CloudShell 工作文件夹中运行以下 AWS CLI 命令：<pre>aws iam create-role --role-name E2AConvLambdaRole --assume-role-policy-document file://E2ATrustPol.json</pre> | 常规 AWS | 
| 为 Lamba 函数创建 IAM policy 文档。 | Lambda 函数必须具有对 Amazon S3 存储桶的读写访问权限和对亚马逊日志的写入权限。 CloudWatch 要创建 IAM 策略，请在 CloudShell 工作文件夹中运行以下命令：<pre>E2APolicy=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Logs",<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:PutLogEvents",<br />                "logs:CreateLogStream",<br />                "logs:CreateLogGroup"<br />            ],<br />            "Resource": [<br />                "arn:aws:logs:*:*:log-group:*",<br />                "arn:aws:logs:*:*:log-group:*:log-stream:*"<br />            ]<br />        },<br />        {<br />            "Sid": "S3",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:PutObject",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::%s/*",<br />                "arn:aws:s3:::%s"<br />            ]<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2APolicy" "$bucket" "$bucket" > E2AConvLambdaPolicy.json</pre> | 常规 AWS | 
| 将 IAM policy 文档附加到 IAM 角色。 | 要将 IAM 策略附加到 IAM 角色，请在您的 CloudShell 工作文件夹中输入以下命令：<pre>aws iam put-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy --policy-document file://E2AConvLambdaPolicy.json</pre> | 常规 AWS | 

### 创建 Lambda 函数以用于 EBCDIC 转换
<a name="create-the-lam-function-for-ebcdic-conversion"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载 EBCDIC 转换源代码。 | 在 CloudShell 工作文件夹中，运行以下命令从中下载 mainframe-data-utilities源代码 GitHub：<pre>git clone https://github.com/aws-samples/mainframe-data-utilities.git mdu</pre> | 常规 AWS | 
| 创建 ZIP 压缩包。 | 在 CloudShell 工作文件夹中，输入以下命令以创建用于 EBCDIC 转换的 Lambda 函数的 ZIP 包：<pre>cd mdu; zip ../mdu.zip *.py; cd ..</pre> | 常规 AWS | 
| 创建 Lambda 函数。 | 在 CloudShell 工作文件夹中，输入以下命令来创建用于 EBCDIC 转换的 Lambda 函数：<pre>aws lambda create-function \<br />--function-name E2A \<br />--runtime python3.9 \<br />--zip-file fileb://mdu.zip \<br />--handler extract_ebcdic_to_ascii.lambda_handler \<br />--role arn:aws:iam::$account:role/E2AConvLambdaRole \<br />--timeout 10 \<br />--environment "Variables={layout=$bucket/layout/}"</pre> 环境变量布局告知 Lambda 函数 JSON 元数据所在位置。 | 常规 AWS | 
| 为 Lamba 函数创建基于资源的策略。 | 在 CloudShell 工作文件夹中，输入以下命令以允许您的 Amazon S3 事件通知触发 Lambda 函数进行 EBCDIC 转换：<pre>aws lambda add-permission \<br />--function-name E2A \<br />--action lambda:InvokeFunction \<br />--principal s3.amazonaws.com \<br />--source-arn arn:aws:s3:::$bucket \<br />--source-account $account \<br />--statement-id 1</pre> | 常规 AWS | 

### 创建 Amazon S3 事件通知
<a name="create-the-s3-event-notification"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 Amazon S3 的事件通知创建配置文档。 | 当文件置于输入文件夹时，Amazon S3 事件通知会启动 EBCDIC 转换 Lambda 函数。在 CloudShell 工作文件夹中，运行以下命令为 Amazon S3 事件通知创建 JSON 文档：<pre>S3E2AEvent=$(cat <<EOF<br />{<br />"LambdaFunctionConfigurations": [<br />    {<br />      "Id": "E2A",<br />      "LambdaFunctionArn": "arn:aws:lambda:%s:%s:function:E2A",<br />      "Events": [ "s3:ObjectCreated:Put" ],<br />      "Filter": {<br />        "Key": {<br />          "FilterRules": [<br />            {<br />              "Name": "prefix",<br />              "Value": "input/"<br />            }<br />          ]<br />        }<br />      }<br />    }<br />  ]<br />}<br />EOF<br />)<br />printf "$S3E2AEvent" "$region" "$account" > S3E2AEvent.json</pre> | 常规 AWS | 
| 创建 Amazon S3 事件通知。 | 在 CloudShell 工作文件夹中，输入以下命令以创建 Amazon S3 事件通知：<pre>aws s3api put-bucket-notification-configuration --bucket $bucket --notification-configuration file://S3E2AEvent.json</pre> | 常规 AWS | 

### 创建和上载 JSON 元数据
<a name="create-and-upload-the-json-metadata"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 解析 COBOL 副本。 | 在 CloudShell 工作文件夹中，输入以下命令将示例 COBOL 抄本解析为 JSON 文件（该文件定义了如何正确读取和切片数据文件）：<pre>python3       mdu/parse_copybook_to_json.py \<br />-copybook     mdu/LegacyReference/COBKS05.cpy \<br />-output       CLIENT.json \<br />-output-s3key CLIENT.ASCII.txt \<br />-output-s3bkt $bucket \<br />-output-type  s3 \<br />-print        25</pre> | 常规 AWS | 
| 添加转换规则。 | 样本数据文件及其相应 COBOL 副本是一个多布局文件。这意味着转换必须按某些规则对数据进行切片。在这种情况下，每行位置 3 和 4 的字节定义了布局。在 CloudShell 工作文件夹中，编辑`CLIENT.json`文件并将内容从更改`"transf-rule": [],`为以下内容：<pre>"transf-rule": [<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0002",<br />"transf": "transf1"<br />},<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0000",<br />"transf": "transf2"<br />}<br />],</pre> | 常规 AWS、IBM 大型机、Cobol | 
| 将 JSN 元数据上传至 Amazon S3 存储桶。 | 在 CloudShell 工作文件夹中，输入以下 AWS CLI 命令将 JSON 元数据上传到您的 Amazon S3 存储桶：<pre>aws s3 cp CLIENT.json s3://$bucket/layout/CLIENT.json</pre> | 常规 AWS | 

### 转换 EBCDIC 文件
<a name="convert-the-ebcdic-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 EBCDIC 文件发送至 Amazon S3 存储桶。 | 在 CloudShell 工作文件夹中，输入以下命令将 EBCDIC 文件发送到 Amazon S3 存储桶：<pre>aws s3 cp mdu/sample-data/CLIENT.EBCDIC.txt s3://$bucket/input/</pre> 我们建议您为输入（EBCDIC）和输出（ASCII）文件设置不同的文件夹，以避免在 ASCII 文件上传至 Amazon S3 存储桶时再次调用 Lambda 转换函数。 | 常规 AWS | 
| 检查输出情况。 | 在 CloudShell 工作文件夹中，输入以下命令以检查您的 Amazon S3 存储桶中是否生成了 ASCII 文件：<pre>aws s3 ls s3://$bucket/</pre> 数据转换可能需要几秒钟才能完成。我们建议您查看 ASCII 文件。ASCII 文件可用后，输入以下命令，在 Amazon S3 存储桶中，查看转换后的文件的内容。必要时，您可直接从 Amazon S3 存储桶下载或使用文件：<pre>aws s3 cp s3://$bucket/CLIENT.ASCII.txt - | head</pre>检查 ASCII 文件内容：<pre>0|0|220|<br />1|1|HERBERT MOHAMED|1958-08-31|BACHELOR|0010000.00|<br />1|2|36|THE ROE AVENUE|<br />2|1|JAYLEN GEORGE|1969-05-29|ELEMENTARY|0020000.00|<br />2|2|365|HEATHFIELD ESPLANADE|<br />3|1|MIKAEEL WEBER|1982-02-17|MASTER|0030000.00|<br />3|2|4555|MORRISON STRAND|<br />4|1|APRIL BARRERA|1967-01-12|DOCTOR|0030000.00|<br />4|2|1311|MARMION PARK|<br />5|1|ALEEZA PLANT|1985-03-01|BACHELOR|0008000.00|</pre> | 常规 AWS | 

### 清除环境
<a name="clean-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| （可选）准备变量与文件夹。 | 如果与断开连接 CloudShell，请重新连接，然后输入以下命令将目录更改为工作文件夹：<pre>cd workdir</pre>确保您已定义环境变量：<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre> | 常规 AWS | 
| 移除存储桶的通知配置。 | 在 CloudShell 工作文件夹中，运行以下命令以删除 Amazon S3 事件通知配置：<pre>aws s3api put-bucket-notification-configuration \<br />--bucket=$bucket \<br />--notification-configuration="{}"</pre> | 常规 AWS | 
| 删除 Lambda 函数。 | 在 CloudShell 工作文件夹中，输入以下命令以删除 EBCDIC 转换器的 Lambda 函数：<pre>aws lambda delete-function \<br />--function-name E2A</pre> | 常规 AWS | 
| 删除 IAM 角色和策略。 | 在 CloudShell 工作文件夹中，输入以下命令以删除 EBCDIC 转换器角色和策略：<pre>aws iam delete-role-policy \<br />--role-name E2AConvLambdaRole \<br />--policy-name E2AConvLambdaPolicy<br /><br />aws iam delete-role \<br />--role-name E2AConvLambdaRole</pre> | 常规 AWS | 
| 删除 Amazon S3 存储桶内生成的文件。 | 在 CloudShell 工作文件夹中，输入以下命令以删除 Amazon S3 存储桶中生成的文件：<pre>aws s3 rm s3://$bucket/layout --recursive<br />aws s3 rm s3://$bucket/input --recursive<br />aws s3 rm s3://$bucket/CLIENT.ASCII.txt</pre> | 常规 AWS | 
| 删除工作文件夹。 | 在 CloudShell 工作文件夹中，输入以下要删除的命令`workdir`及其内容：<pre>cd ..; rm -Rf workdir</pre> | 常规 AWS | 

## 相关资源
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-resources"></a>
+ [大型机数据实用程序自述文件](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) () GitHub
+ [EBCDIC 字符集](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set)（IBM 文档）
+ [EBCDIC 到 ASCII](https://www.ibm.com/docs/en/iis/11.7.0?topic=tables-ebcdic-ascii)（IBM 文档）
+ [COBOL](https://www.ibm.com/docs/en/i/7.6.0?topic=languages-cobol)（IBM 文档）
+ [使用 Amazon S3 触发器调用 Lambda 函数（文档](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)）AWS Lambda 

# 使用 Micro Focus 转换具有复杂记录布局的大型机数据文件
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus"></a>

*彼得·韦斯特，亚马逊 Web Services*

## Summary
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-summary"></a>

注意： AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

此模式向您展示如何使用 Micro Focus 结构文件将包含非文本数据和复杂记录布局的大型机数据文件从 EBCDIC（扩展二进制编码十进制交换码）字符编码转换为 ASCII（美国信息交换标准代码）字符编码。若要完成文件转换，您必须执行以下操作：

1. 准备描述大型机环境中所有数据项和记录布局的单一源文件。

1. 使用 Micro Focus 数据文件编辑器作为 Micro Focus Classic Data File Tools 或 Data File Tools，创建包含数据记录布局的结构文件。结构文件可识别非文本数据，以便您可正确地将大型机文件从 EBCDIC 转换为 ASCII。

1. 通过Classic Data File Tools 或 Data File Tools 测试结构文件。

## 先决条件和限制
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ Micro Focus Enterprise Developer for Windows，可通过 [AWS Mainframe Modernization](https://aws.amazon.com/mainframe-modernization/) 获得

**产品版本**
+ Micro Focus Enterprise Server 7.0 和更高版本

## 工具
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-tools"></a>
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-8D6B7358-AC35-4DAF-A445-607D8D97EBB2.html) 为使用企业开发人员的任何集成式开发环境（IDE）变体创建的应用程序提供运行环境。
+ Micro Focus [Classic Data File Tools](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-06115324-0FBC-4CB7-BE9D-04BCFEA5821A.html) 可帮您转换、导航、编辑和创建数据文件。Classic Data File Tools 包括[数据文件转换器](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFCV.html)、[记录布局编辑器](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/BKFHFHRLMF.html)以及[数据文件编辑器](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFED.html)。
+ Micro Focus [Data File Tools](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-B1BCB613-6947-451C-8F71-72FB8254076A.html) 可创建、编辑和移动数据文件。Data File Tools 包括[数据文件编辑器](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFED.html)、[文件转换实用程序](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/BKFHFHCONV.html)和[数据文件结构命令行实用程序](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-E84348EB-A93A-481A-A47C-61B0E1C076E6.html)。

## 操作说明
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-epics"></a>

### 准备源文件
<a name="prepare-the-source-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 确定源组件。 | 确定文件的所有可能的记录布局，包含任何包含非文本数据的重新定义。如果您的布局包含重新定义，则必须将这些布局分解为描述数据结构每种可能排列的独特布局。通常，数据文件记录布局可以用以下原型来描述：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)有关为包含复杂记录布局的文件创建扁平化记录布局的更多信息，请参阅在 [ASCII 环境中重新托管 EBCDIC 应用程序以进行大型机迁移](https://docs.aws.amazon.com/prescriptive-guidance/latest/mainframe-rehost-ebcdic-ascii/introduction.html)。 | 应用程序开发人员 | 
| 确定记录布局条件。 | 对于具有多个记录布局的文件或包含带有 REDEFINES 子句的复杂布局的文件，请标识记录中的数据和条件，您可使用这些数据和条件来定义转换期间要使用的布局。我们建议您与了解处理此文件的程序的主题专家 (SME) 讨论此任务。例如，文件可能包含两种包含非文本数据的记录类型。您可检查源代码，并可能找到类似以下代码的代码：<pre>MOVE "M" TO PART-TYPE<br /> MOVE "MAIN ASSEMBLY" TO PART-NAME<br />MOVE "S" TO PART-TYPE<br /> MOVE "SUB ASSEMBLY 1" TO PART-NAME</pre>代码可帮您识别以下内容：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)您可记录此字段用于将记录布局与文件中的正确数据记录关联的值。 | 应用程序开发人员 | 
| 生成源文件。 | 如果文件通过多个源文件描述，或者如果记录布局包含从属于 REDEFINES 子句的非文本数据，则创建一个包含记录布局的新源文件。新程序不需要使用 SELECT 和 FD 语句描述文件。该程序可以简单地将记录描述含为 Working-Storage 中的 01 个级别。您可为每个数据文件创建一个源文件，也可以创建一个描述所有数据文件的主源文件。 | 应用程序开发人员 | 
| 编译源文件。 | 编译源文件，以构建数据目录。我们建议您使用 EBCDIC 字符集来编译源文件。如果使用 IBMCOMP 指令或 ODOSLIDE 指令，则也必须在源文件中使用这些指令。IBMCOMP 会影响 COMP 字段字节存储，而 ODOSLIDE 会影响发生变化结构的填充。如果此指令设置不正确，则转换工具将无法正确读取数据记录。这会导致转换后的文件中显示错误数据。 | 应用程序开发人员 | 

### (选项 A) 使用 Classic Data File Tools 创建结构文件
<a name="option-a-create-the-structure-file-using-classic-data-file-tools"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动该工具并加载目录。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 
| 创建默认记录布局。 | 对所有与任何条件布局不匹配的记录使用默认记录布局。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)默认布局显示在**布局**窗格中，可以通过红色文件夹图标进行识别。 | 应用程序开发人员 | 
| 创建有条件记录布局。 | 当文件中包含多个记录布局时，请使用条件记录布局。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 

### （选项 B）使用 Data File Tools 创建结构文件
<a name="option-b-create-the-structure-file-using-data-file-tools"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动该工具并加载目录。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 
| 创建默认记录布局。 | 对所有不匹配任何条件布局的记录使用默认记录布局。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)默认布局显示在**布局**窗格中，可以通过蓝色“D”图标进行识别。 | 应用程序开发人员 | 
| 创建有条件记录布局。 | 当文件中包含多个记录布局时，请使用条件记录布局。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 

### (选项 A )使用 Classic Data File Tools 测试结构文件
<a name="option-a-test-the-structure-file-using-classic-data-file-tools"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试 EBCDIC 数据文件。 | 确认您可使用结构文件正确查看 EBCDIC 测试数据文件。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 

### (选项 B )使用 Data File Tools 测试结构文件
<a name="option-b-test-the-structure-file-using-data-file-tools"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试 EBCDIC 数据文件。 | 确认您可使用结构文件正确查看 EBCDIC 测试数据文件。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 

### 测试数据文件转换
<a name="test-data-file-conversion"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试 EBCDIC 文件转换。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 应用程序开发人员 | 

## 相关资源
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-resources"></a>
+ [Micro Focus](https://www.microfocus.com/en-us/products/enterprise-suite/overview)（Micro 文档）
+ [大型机和遗留代码](https://aws.amazon.com/blogs/?awsf.blog-master-category=category%23mainframe-and-legacy)（AWS Blog 文章）
+ [AWS Prescriptive Guidance](https://docs.aws.amazon.com/prescriptive-guidance/)（AWS 文档）
+ [AWS 文档](https://docs.aws.amazon.com/index.html)（AWS 文档）
+ [AWS 一般参考](https://docs.aws.amazon.com/general/latest/gr/Welcome.html)（AWS 文档）
+ [AWS 词汇表](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html)（AWS 文档）

# 使用 Terraform 为容器化 Blu Age 应用程序部署环境
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform"></a>

*Richard Milner-Watts，亚马逊 Web Services*

## Summary
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-summary"></a>

将传统的大型机工作负载迁移至现代云架构可以消除维护大型机的成本，而这些成本只会随着环境的老化而增加。然而，从大型机迁移作业可能会带来独特挑战。内部资源可能不熟悉工作逻辑，与一般 CPUs商用相比，大型机在这些特殊任务中的高性能可能很难复制。重写这些工作可能是一项艰巨的任务，因此需要付出巨大的努力。

Blu Age 将传统的大型机工作负载转换为现代 Java 代码，然后您可将其作为容器运行。

此模式提供了示例无服务器架构，用于运行已使用 Blu Age 工具进行现代化改造的容器化应用程序。随附的 HashiCorp Terraform 文件将为编排 Blu Age 容器构建安全的架构，同时支持批处理任务和实时服务。

有关使用 Blu Age 和 Amazon Web Services 实现工作负载现代化的更多信息，请参见以下 AWS Prescriptive Guidance 出版物：
+ [运行已经通过 AWS 无服务器基础设施上 Blu Age 现代化的大型机工作负载](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [对经过 Blu Age 现代化改造的大型机工作负载进行容器化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)

如需有关使用 Blu Age 对大型机工作负载进行现代化改造的帮助，请在 [Blu Age 网站](https://www.bluage.com/)上选择**联系我们的专家**。要获得有关将现代化工作负载迁移到 AWS、将其与 Amazon Web Services 集成以及将其投入生产的帮助，请联系您的 AWS 客户经理或填写 [AWS Professional Services 表](https://pages.awscloud.com/AWS-Professional-Services.html)。

## 先决条件和限制
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-prereqs"></a>

**先决条件**
+ 该示例容器化了 Blu Age 应用程序，其由[对经过 Blu Age 现代化改造的大型机工作负载进行容器化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)模式提供。示例应用程序提供了处理现代化应用程序的输入和输出的逻辑，并且它可以与此体系结构集成。
+ 部署此资源需要 Terraform。

**限制**
+ Amazon Elastic Container Service (Amazon ECS) 对容器可用的任务资源设定了限制。这些资源包括 CPU、RAM 和存储。例如将 Amazon ECS 与 AWS Fargate 配合使用时，[任务资源限制适用](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)。

**产品版本**

此解决方案已使用以下版本进行测试：
+ Terraform 1.3.6
+ Terraform AWS Provider 4.46.0

## 架构
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-architecture"></a>

**源技术堆栈**
+ Blu Age
+ Terraform

**目标技术堆栈**
+ Amazon Aurora PostgreSQL 兼容版
+ AWS Backup
+ Amazon Elastic Container Registry(Amazon ECR)
+ Amazon ECS
+ AWS Identity and Access Management Service (IAM)
+ AWS Key Management Server (AWS KMS)
+ AWS Secrets Manager
+ Amazon Simple Notification Service(Amazon SNS)
+ Amazon Simple Storage Service(Amazon S3)
+ AWS Step Functions
+ AWS Systems Manager

**目标架构**

下图显示了解决方案架构。

![\[描述如下图所示。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/12825490-2622-4f0b-80c9-2c5076d50fa3/images/c0708b0a-aa36-458a-8d6c-d42e3dec7727.png)


1. 解决方案部署了以下 IAM 角色：
   + 批处理任务角色
   + 批处理任务执行角色
   + 服务任务角色
   + 服务任务执行角色
   + Step Functions 角色
   + AWS Backup 角色
   + RDS 增强型监控角色。

   这些角色符合最低权限访问原则。

1. Amazon ECR 用于存储由此模式编排容器映像。

1. AWS Systems Manager Parameter Store 在运行时向 Amazon ECS 任务定义提供关于每个环境的配置数据。

1. AWS Secrets Manager 在运行时向 Amazon ECS 任务定义提供关于环境的敏感配置数据。这些数据通过 AWS KMS 加密。

1. Terraform 模块为所有实时和批处理任务创建 Amazon ECS 任务定义。

1. Amazon ECS 使用 AWS Fargate 作为计算引擎运行批处理任务。这是一项短暂任务，由 AWS Step Functions 按要求启动。

1. Amazon Aurora PostgreSQL-Compatible 提供了一个支持现代化应用程序的数据库。这取代了大型机数据库，例如 IBM Db2 或者 IBM IMS 数据库。

1. Amazon ECS 运行长期服务，以提供现代化的实时工作负载。这些无状态应用程序永久运行，容器分布至可用区中。

1. 网络负载均衡器用于授予对实时工作负载访问权限。网络负载均衡器支持较早协议，例如 IBM CICS。或者，您可以将应用程序负载均衡器与基于 HTTP 的工作负载结合使用。

1. Amazon S3 为任务输入和输出提供对象存储。容器应处理 Amazon S3 中的拉取和推送操作，以为 Blu Age 应用程序准备工作目录。

1. AWS Step Functions 服务用于编排运行 Amazon ECS 任务以处理批量工作负载。

1. 每个批处理工作负载的 SNS 主题用于将现代化应用程序与其他系统（例如电子邮件）集成，或启动其他操作，例如将输出对象从 Amazon S3 传送到 FTP。

**注意**  
默认情况下，此解决方案无法访问互联网。此模式假设虚拟私有云（VPC）将使 [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/) 等服务连接到其他网络。因此，部署了多个接口 VPC 端点，授予对解决方案使用的 Amazon Web Services 的访问权限。要开启直接互联网接入，您可以使用 Terraform 模块中的切换开关将 VPC 端点替换为互联网网关和相关资源。

**自动化和扩缩**

在整个模式中使用无服务器资源有助于确保，通过横向扩展，此设计的规模几乎没有限制。这样可以减少*邻居噪音担忧*，例如在原始大型机上可能遇到的对计算资源的竞争。可以根据需要安排批处理任务同时运行。

单个容器受到 Fargate 支持的最大大小限制。有关更多信息，请参阅 Amazon ECS 文档中的[https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size)部分。

若要[水平扩展实时工作负载](https://nathanpeck.com/amazon-ecs-scaling-best-practices/)，您可添加容器。

## 工具
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-tools"></a>

**AWS 服务**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) 是一项完全托管的服务 AWS 服务，可帮助您在云端和内部集中和自动进行数据保护。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一项安全、可扩展且可靠的托管容器映像注册表服务。
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)是一项快速且可扩展的容器管理服务，可帮助运行、停止和管理集群上的容器。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥，以帮助保护您的数据。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 的 API 调用，以便以编程方式检索密钥。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可帮助您协调和管理发布者与客户端（包括 Web 服务器和电子邮件地址）之间的消息交换。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS St](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) ep Functions 是一项无服务器编排服务，可帮助您组合 AWS Lambda 函数和其他功能 AWS 服务 来构建关键业务应用程序。
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) 提供安全的分层存储，用于配置数据管理和密钥管理。

**其他服务**
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一款基础设施即代码（IaC）工具，可帮助您使用代码来预调配和管理云基础设施和资源。此模式使用 Terraform 创建示例架构。

**代码存储库**

此模式的源代码可在 GitHub [Blu Age 示例 ECS 基础架构 (Terraform) 存储](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform#aws-blu-age-sample-ecs-infrastructure-terraform)库中找到。

## 最佳实践
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-best-practices"></a>
+ 对于测试环境，请使用诸如配置现代化应用程序的 `forceDate` 选项之类的功能，以通过始终运行已知时间段来生成一致的测试结果。
+ 单独调整每个任务以消耗最佳数量的资源。您可以使用 [Amazon Conta CloudWatch iner Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) 获取有关潜在瓶颈的指导。

## 操作说明
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-epics"></a>

### 为部署做好环境准备
<a name="prepare-the-environment-for-deployment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆解决方案源代码。 | 从[GitHub 项目](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform)中克隆解决方案代码。 | DevOps 工程师 | 
| 通过部署资源存储 Terraform 状态来引导环境。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 工程师 | 

### 部署解决方案基础设施
<a name="deploy-the-solution-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看和更新 Terraform 配置。 | 在根目录中，打开文件 `main.tf,`，查看内容，然后考虑进行以下更新：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 工程师 | 
| 部署 Terraform 文件。 | 请从终端运行 `terraform apply` 命令部署所有资源。查看 Terraform 生成的更改，然后输入**是**，以启动构建。请注意，此基础设施部署时间可能为 15 分钟以上。 | DevOps 工程师 | 

### （可选）部署有效的 Blu Age 容器化应用程序
<a name="optional-deploy-a-valid-blu-age-containerized-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Blu Age 容器映像推送到 Amazon ECR。 | 将容器推送到上一篇操作说明中创建的 Amazon ECR 存储库。有关说明，请参阅 [Amazon ECR 文档](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。记下容器映像 URI。 | DevOps 工程师 | 
| 更新 Terraform，以引用 Blu Age 容器映像。 | 更新文件 `main.tf` ****，以引用您上传的容器映像。 | DevOps 工程师 | 
| 重新部署 Terraform 文件。 | 从您的终端运行 `terraform apply` 以部署所有资源。查看来自 Terraform 的建议更新，然后输入 **是**继续部署。 | DevOps 工程师 | 

## 相关资源
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-resources"></a>
+ [Blu Age](https://www.bluage.com/)
+ [运行已经通过 AWS 无服务器基础设施上 Blu Age 现代化的大型机工作负载](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [对经过 Blu Age 现代化改造的大型机工作负载进行容器化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)

# 在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成 Db2 z/OS 数据见解
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight"></a>

*Shubham Roy、Roshna Razack 和 Santosh Kumar Singh，Amazon Web Services*

## Summary
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-summary"></a>

注意： AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

如果组织在 IBM Db2 大型机环境中托管关键业务数据，那么从这些数据中获取见解对于推动增长和创新至关重要。通过解锁大型机数据，您可以构建更快、更安全的可扩展商业智能，从而加快 Amazon Web Services（AWS）云中数据驱动的决策、增长和创新。

这种模式提供了一种解决方案，用于生成业务见解，并根据 IBM Db2 中的大型机数据为表格创建可共享的叙述。 z/OS 通过[采用 Precisely 的AWS Mainframe Modernization 数据复制功能](https://docs.aws.amazon.com/m2/latest/userguide/precisely.html)，将大型机数据更改流式传输到 [Amazon Managed Streaming for Apache Kafka（Amazon MSK）](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)主题。使用 [Amazon Redshift 串流摄取](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html)，Amazon MSK 主题数据可以存储在 [Amazon Redshift Serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-whatis.html) 数据仓库表中，以便在 Amazon Quick Sight 中进行分析。

在 Quick Sight 中提供数据后，您可以使用自然语言提示和 [Amazon Q in Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html) 创建数据摘要、提问并生成数据故事。您不必编写 SQL 查询或学习商业智能（BI）工具。

**商业背景**

此模式提供了一种解决方案，可用于大型机数据分析和数据见解使用案例。使用此模式，您可以为公司的数据构建可视化控制面板。为了演示解决方案，此模式以一家为美国成员提供医疗、牙科和视力计划的医疗保健公司为例。在此示例中，成员人口统计和计划信息存储在 z/OS 数据表的 IBM Db2 中。可视化控制面板显示以下信息：
+ 按区域划分的成员分布
+ 按性别划分的成员分布
+ 按年龄划分的成员分布
+ 按计划类型划分的成员分布
+ 尚未完成预防性免疫接种的成员

有关按区域划分的成员分布和尚未完成预防性免疫接种的成员的示例，请参阅“其他信息”部分。

创建控制面板后，即可生成一个数据故事，其中会解释从先前分析得出的见解。数据故事就如何增加完成预防性免疫接种的成员人数提供了建议。

## 先决条件和限制
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的. 该解决方案是在亚马逊弹性计算云（亚马逊 EC2）上的 Amazon Linux 2 上构建和测试的。
+ 一个虚拟私有云（VPC），其中具有可供大型机系统访问的子网。
+ 一个包含业务数据的大型机数据库。有关用于构建和测试此解决方案的示例数据，请参阅*附件*部分。
+ 在 Db2 z/OS 表上启用了更改数据捕获 (CDC)。要在 Db2 z/OS 上启用 CDC，请参阅 [IBM 文档](https://www.ibm.com/docs/en/daafz/7.5?topic=cdc-enabling-data-capture-changes)。
+ Precission Connect CDC，用于 z/OS 安装在托管源数据库的 z/OS 系统上。用于 z/OS 映像的 Precission Connect CDC 以 zip 文件形式提供，位于[适用于 IBM z/OS 的亚马逊机器映像 (AMI) 的数据复制](https://aws.amazon.com/marketplace/pp/prodview-doe2lroefogia?applicationId=AWSMPContessa&ref_=beagle&sr=0-1)中。AWS Mainframe Modernization 要在大型机上安装 Precissi z/OS on Connect CDC，请参阅 Prec [ist 安装文档](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Install-Precisely-Connect-CDC-z/OS)。

**限制**
+ 您的大型机 Db2 数据应采用 Precisely Connect CDC 支持的数据类型。有关支持的数据类型的列表，请参阅 [Precisely Connect CDC 文档](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Data-replication-overview/Supported-source-data-types)。
+ 您在 Amazon MSK 上的数据应采用 Amazon Redshift 支持的数据类型。有关支持的数据类型的列表，请参阅 [Amazon Redshift 文档](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)。
+ Amazon Redshift 针对不同的数据类型有不同的行为和大小限制。有关更多信息，请参阅 [Amazon Redshift 文档](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html#materialized-view-streaming-ingestion-limitations)。
+ Quick Sight 中的近乎实时的数据取决于为 Amazon Redshift 数据库设置的刷新间隔。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。Amazon Q in Quick Sight 目前并非在每个支持 Quick Sight 的区域都可用。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

**产品版本**
+ AWS Mainframe Modernization 使用精确版本 4.1.44 进行数据复制
+ Python 版本 3.6 或更高版本
+ Apache Kafka 版本 3.5.1****

## 架构
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-architecture"></a>

**目标架构**

下图显示了一种架构，该架构可使用[采用 Precisely 的AWS Mainframe Modernization 数据复制功能](https://aws.amazon.com/mainframe-modernization/capabilities/data-replication/)和 Amazon Q in Quick Sight，从大型机数据中生成业务见解。

![\[从 z/OS 大型机到 Amazon 的七步流程。 QuickSight\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/cddb6d20-14ae-4276-90d8-14df435db824.png)


下图显示了如下工作流：

1. Precisely Log Reader Agent 可从 Db2 日志中读取数据，并将数据写入大型机上的 OMVS 文件系统的临时存储中。

1. Publisher Agent 可从临时存储中读取原始 Db2 日志。

1. 本地控制器进程守护程序可对操作进行身份验证、授权、监控和管理。

1. 应用代理是使用预配置 EC2 的 AMI 在亚马逊上部署的。该代理使用 TCP/IP 通过控制器进程守护程序与发布者代理连接。Apply Agent 使用多个工作程序将数据推送至 Amazon MSK，以实现高吞吐量。

1. 这些工作程序会以 JSON 格式将数据写入 Amazon MSK 主题。作为复制消息的中间目标，Amazon MSK 可提供高度可用的自动失效转移功能。

1. Amazon Redshift 串流摄取功能以低延迟、高速度的方式完成从 Amazon MSK 到 Amazon Redshift Serverless 的数据摄取。Amazon Redshift 中的存储过程将大型机变更数据 (insert/update/deletes) 协调到亚马逊 Redshift 表中。这些 Amazon Redshift 表可充当 Quick Sight 的数据分析来源。

1. 用户在 Quick Sight 中访问数据，以获得分析和见解。您可以使用 Amazon Q in Quick Sight 通过自然语言提示与数据进行交互。

## 工具
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在中提供可扩展的计算容量 AWS 云。您可以根据需要启动任意数量的虚拟服务器，并快速进行扩展或缩减。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥以帮助保护您的数据。
+ [Amazon Managed Streaming for Apache Kafka (Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) 是一项完全托管式服务，可帮助您构建并运行使用 Apache Kafka 来处理流数据的应用程序。
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) 是一种云级商业智能（BI）服务，可用于在单独的控制面板中可视化、分析和报告数据。此模式使用了 Amazon Q in Quick Sight 的生成式商业智能功能。
+ [Amazon Redshift Serverless](https://aws.amazon.com/redshift/redshift-serverless/) 是 Amazon Redshift 的无服务器选项，使您能够在几秒钟的时间内，更高效地运行和扩展分析，而无需设置和管理数据仓库基础设施。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 可帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 进行的 API 调用，以便以编程方式检索此密钥。

**其他工具**
+ [Precisely Connect CDC](https://support.precisely.com/products/connect-cdc-formerly-sqdata/) 可收集来自遗留系统的数据并将其集成到云和数据平台中。

**代码存储库**

此模式的代码可在 GitHub [Mainframe\$1 DataInsights \$1change\$1data\$1](https://github.com/aws-samples/Mainframe_DataInsights_change_data_reconcilition) regniforment 存储库中找到。此代码是 Amazon Redshift 中的存储过程。此存储过程将大型机数据更改（插入、更新和删除）从 Amazon MSK 调整至 Amazon Redshift 表中。这些 Amazon Redshift 表可充当 Quick Sight 的数据分析来源。

## 最佳实践
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-best-practices"></a>
+ 设置 Amazon MSK 集群时遵循[最佳实践](https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html)。
+ 遵循 Amazon Redshift [数据解析最佳实践](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html#materialized-view-streaming-recommendations)，以提高性能。
+ 在为精确设置创建 AWS Identity and Access Management (IAM) 角色时，请遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-epics"></a>

### 在 Amazon 上使用 Precist 设置 AWS Mainframe Modernization 数据复制 EC2
<a name="set-up-m2long-data-replication-with-precisely-on-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置安全组。 | 要连接到控制器守护程序和 Amazon MSK 集群，[请为该 EC2 实例创建一个安全组](https://docs.aws.amazon.com/vpc/latest/userguide/creating-security-groups.html)。添加以下入站和出站规则：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)记下安全组的名称。在启动 EC2 实例和配置 Amazon MSK 集群时，您需要引用该名称。 | DevOps 工程师，AWS DevOps | 
| 创建 IAM 策略和 IAM 角色。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | DevOps 工程师，AWS 系统管理员 | 
| 配置实 EC2 例。 | 要将 EC2 实例配置为运行 Precist CDC 并连接到 Amazon MSK，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | AWS 管理员、 DevOps 工程师 | 

### 设置 Amazon MSK
<a name="set-up-msk"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon MSK 集群。 | 要创建 Amazon MSK 集群，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)创建典型的预调配集群耗时最多 15 分钟。创建集群后，其状态将由**正在创建**更改为**活跃**。 | AWS DevOps，云管理员 | 
| 设置 SASL/SCRAM 身份验证。 | 要为 Amazon MSK 集群设置 SASL/SCRAM 身份验证，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 云架构师 | 
| 创建 Amazon MSK 主题。 | 要创建 Amazon MSK 主题，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 云管理员 | 

### 在 Amazon 上配置精确应用引擎 EC2
<a name="configure-the-precisely-apply-engine-on-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Precisely 脚本以复制数据更改。 | 要设置 Precisely Connect CDC 脚本以将更改后的数据从大型机复制到 Amazon MSK 主题，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)有关 .ddl 文件的示例，请参阅[其他信息](#generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-additional)部分。 | 应用程序开发人员、云架构师 | 
| 生成网络 ACL 密钥。 | 要生成网络访问控制列表密钥，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | AWS 云架构师 DevOps | 

### 准备大型机源环境
<a name="prepare-the-mainframe-source-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 ISPF 屏幕中配置默认值。 | 要在 Interactive System Productivity Facility（ISPF）中配置默认设置，请按照 [Precisely 文档](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Install-Precisely-Connect-CDC-z/OS/Start-ISPF-Panel-Interface)中的说明进行操作。 | 大型机系统管理员 | 
| 配置控制器进程守护程序。 | 要配置控制器进程守护程序，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 配置发布者。 | 要配置发布者，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 更新进程守护程序配置文件。 | 要更新控制器进程守护程序配置文件中的发布者详细信息，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 创建启动控制器进程守护程序的任务。 | 要创建任务，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 生成捕获发布者 JCL 文件。 | 要生成捕获发布者 JCL 文件，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 检查并更新 CDC。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 大型机系统管理员 | 
| 提交 JCL 文件。 | 提交在先前步骤中配置的以下 JCL 文件：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)提交 JCL 文件后，您可以精确地在 EC2 实例上启动 Apply Engine。 | 大型机系统管理员 | 

### 运行并验证 CDC
<a name="run-and-validate-cdc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动 Apply Engine 并验证 CDC。 | 要在 EC2 实例上启动应用引擎并验证 CDC，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 云架构师、应用程序开发人员 | 
| 验证 Amazon MSK 主题上的记录。 | 要读取 Kafka 主题中的消息，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 应用程序开发人员、云架构师 | 

### 将大型机更改数据存储在 Amazon Redshift Serverless 数据仓库中
<a name="store-mainframe-change-data-in-an-rsslong-data-warehouse"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Amazon Redshift Serverless。 | 要创建 Amazon Redshift Serverless 数据仓库，请按照 [AWS 文档](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html)中的说明进行操作。在 Amazon Redshift Serverless 控制面板上，验证命名空间和工作组是否已创建并可用。对于此示例模式，该过程可能需要耗费 2‒5 分钟的时间。 | 数据工程师 | 
| 设置串流摄取所需的 IAM 角色和信任策略。 | 要设置来自 Amazon MSK 的 Amazon Redshift Serverless 串流摄取，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 数据工程师 | 
| 将 Amazon Redshift Serverless 连接到 Amazon MSK。 | 要连接到 Amazon MSK 主题，请在 Amazon Redshift Serverless 中创建一个外部架构。在 Amazon Redshift 查询编辑器 v2 中，运行以下 SQL 命令，将 `'iam_role_arn'` 替换为您之前创建的角色，将 `'MSK_cluster_arn`' 替换为集群的 ARN。<pre>CREATE EXTERNAL SCHEMA member_schema<br />FROM MSK<br />IAM_ROLE 'iam_role_arn'<br />AUTHENTICATION iam<br />URI 'MSK_cluster_arn';</pre> | 迁移工程师 | 
| 创建实体化视图。 | 要在 Amazon Redshift Serverless 中使用来自 Amazon MSK 主题的数据，请创建实体化视图。在 Amazon Redshift 查询编辑器 v2 中，运行以下 SQL 命令，将 `<MSK_Topic_name>` 替换为您的 Amazon MSK 主题的名称。<pre>CREATE MATERIALIZED VIEW member_view<br />AUTO REFRESH YES<br />AS SELECT<br />kafka_partition, <br />kafka_offset, <br />refresh_time, <br />json_parse(kafka_value) AS Data<br />FROM member_schema.<MSK_Topic_name><br />WHERE CAN_JSON_PARSE(kafka_value); <br /></pre> | 迁移工程师 | 
| 在 Amazon Redshift 中创建目标表。 | Amazon Redshift 表为 Quick Sight 提供了输入。此模式使用表 `member_dtls` 和 `member_plans`，这两个表可与大型机上的源 Db2 表匹配。要在 Amazon Redshift 中创建这两个表，请在 Amazon Redshift 查询编辑器 V2 中运行以下 SQL 命令：<pre>-- Table 1: members_dtls<br />CREATE TABLE members_dtls (<br /> memberid INT ENCODE AZ64,<br /> member_name VARCHAR(100) ENCODE ZSTD,<br /> member_type VARCHAR(50) ENCODE ZSTD,<br /> age INT ENCODE AZ64,<br /> gender CHAR(1) ENCODE BYTEDICT,<br /> email VARCHAR(100) ENCODE ZSTD,<br /> region VARCHAR(50) ENCODE ZSTD<br />) DISTSTYLE AUTO;<br /><br />-- Table 2: member_plans<br />CREATE TABLE member_plans (<br /> memberid INT ENCODE AZ64,<br /> medical_plan CHAR(1) ENCODE BYTEDICT,<br /> dental_plan CHAR(1) ENCODE BYTEDICT,<br /> vision_plan CHAR(1) ENCODE BYTEDICT,<br /> preventive_immunization VARCHAR(50) ENCODE ZSTD<br />) DISTSTYLE AUTO;</pre> | 迁移工程师 | 
| 在 Amazon Redshift 中创建存储过程。 | 此模式使用存储过程将源大型机的更改数据（`INSERT`、`UPDATE`、`DELETE`）同步到目标 Amazon Redshift 数据仓库表，以便在 Quick Sight 中进行分析。要在 Amazon Redshift 中创建存储过程，请使用查询编辑器 v2 运行存储库中的存储过程代码。 GitHub  | 迁移工程师 | 
| 从流式实体化视图中读取，并加载到目标表中。 | 存储过程会从流式实体化视图中读取数据更改，并将数据更改加载到目标表中。要运行存储过程，您可以使用以下命令：<pre>call SP_Members_Load();</pre>您可以使用 [Amazon EventBridge](https://aws.amazon.com/eventbridge/) 在 Amazon Redshift 数据仓库中安排任务，以便根据您的数据延迟要求调用此存储过程。 EventBridge 以固定的间隔运行作业。要监控先前对该过程的调用是否已完成，您可能需要使用诸如 [AWS Step Functions](https://aws.amazon.com/step-functions/) 状态机之类的机制。有关更多信息，请参阅以下资源：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)另一个选项是使用 Amazon Redshift 查询编辑器 v2 安排刷新。有关更多信息，请参阅[使用查询编辑器 v2 计划查询](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-schedule-query.html)。 | 迁移工程师 | 

### 将 Quick Sight 连接到 Amazon Redshift 中的数据
<a name="connect-quick-sight-to-data-in-rs"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Quick Sight。 | 要设置 Quick Sight，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/setting-up.html)中的说明进行操作。 | 迁移工程师 | 
| 在 Quick Sight 和 Amazon Redshift 之间建立安全连接。 | 要在 Quick Sight 和 Amazon Redshift 之间建立安全连接，请执行以下操作[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 迁移工程师 | 
| 为 Quick Sight 创建数据集。 | 要通过 Amazon Redshift 为 Quick Sight 创建数据集，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 迁移工程师 | 
| 联接数据集。 | 要在 Quick Sight 中创建分析，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/joining-data.html#create-a-join)中的说明将这两个表联接起来。在**联接配置**窗格中，对于**联接类型**，选择**左**。在**联接子句**下，使用 `memberid from member_plans = memberid from members_details`。 | 迁移工程师 | 

### 使用 Amazon Q in Quick Sight，从大型机数据中获取业务见解
<a name="get-business-insights-from-the-mainframe-data-by-using-qdev-in-quick-sight"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Amazon Q in Quick Sight。 | 要设置 Amazon Q in Quick Sight 生成式商业智能功能，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/generative-bi-get-started.html)中的说明进行操作。 | 迁移工程师 | 
| 分析大型机数据并构建可视化控制面板。 | 要在 Quick Sight 中对数据进行分析和可视化，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)完成后，您可以发布自己的控制面板，以便与组织中的其他人共享。有关示例，请参阅[其他信息](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional)部分中的*大型机可视化控制面板*。 | 迁移工程师 | 

### 使用 Amazon Q in Quick Sight，从大型机数据中创建数据故事
<a name="create-a-data-story-with-qdev-in-quick-sight-from-mainframe-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据故事。 | 创建数据故事以解释先前分析的见解，并就增加完成预防性免疫接种的成员人数生成建议：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 迁移工程师 | 
| 查看生成的数据故事。 | 要查看生成的数据故事，请在**数据故事**页面上选择该故事。 | 迁移工程师 | 
| 编辑生成的数据故事。 | 要更改数据故事中的格式、布局或视觉对象，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-edit.html)中的说明进行操作。 | 迁移工程师 | 
| 共享数据故事。 | 要共享数据故事，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-share.html)中的说明进行操作。 | 迁移工程师 | 

## 问题排查
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 对于从 Quick Sight 到 Amazon Redshift 的数据集创建，`Validate Connection` 已经失败了。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 
| 尝试在 EC2 实例上启动 Apply 引擎时会返回以下错误：`-bash: sqdeng: command not found` | 运行以下命令，导出 `sqdata` 安装路径：<pre>export PATH=$PATH:/usr/sbin:/opt/precisely/di/sqdata/bin</pre> | 
| 尝试启动 Apply Engine 时会返回以下连接错误之一：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 检查大型机假脱机，以确认控制器进程守护程序任务正在运行。 | 

## 相关资源
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-resources"></a>
+ 在 Qu@@ [ick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q（模式）生成见](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html?did=pg_card&trk=pg_card)解
+ 在 Qu@@ [ick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成数据见](https://youtu.be/F8b7l79p6TM?si=gASuQtFbMVuEm7IJ)解（演示）
+ [AWS Mainframe Modernization -适用于 IBM z/OS 的数据复制](https://aws.amazon.com/marketplace/pp/prodview-doe2lroefogia?sr=0-4&ref_=beagle&applicationId=AWSMPContessa)
+ [Amazon Redshift 串流摄取到实体化视图](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html)

## 附加信息
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-additional"></a>

**示例 .ddl 文件**

*成员\$1details.ddl*

```
CREATE TABLE MEMBER_DTLS (
memberid INTEGER NOT NULL,
member_name VARCHAR(50),
member_type VARCHAR(20),
age INTEGER,
gender CHAR(1),
email VARCHAR(100),
region VARCHAR(20)
);
```

*member\$1plans.ddl*

```
CREATE TABLE MEMBER_PLANS (
memberid INTEGER NOT NULL,
medical_plan CHAR(1),
dental_plan CHAR(1),
vision_plan CHAR(1),
preventive_immunization VARCHAR(20)
);
```

**示例 .sqd 文件**

将** **`<kafka topic name>` 替换为您的 Amazon MSK 主题名称。

*script.sqd*

```
-- Name: DB2ZTOMSK: DB2z To MSK JOBNAME DB2ZTOMSK;REPORT EVERY 1;OPTIONS CDCOP('I','U','D');-- Source Descriptions
JOBNAME DB2ZTOMSK;
REPORT EVERY 1;
OPTIONS CDCOP('I','U','D');

-- Source Descriptions 
BEGIN GROUP DB2_SOURCE; 
DESCRIPTION DB2SQL /var/precisely/di/sqdata/apply/DB2ZTOMSK/ddl/mem_details.ddl AS MEMBER_DTLS;
DESCRIPTION DB2SQL /var/precisely/di/sqdata/apply/DB2ZTOMSK/ddl/mem_plans.ddl AS MEMBER_PLANS; 
END GROUP;
-- Source Datastore 
DATASTORE cdc://<zos_host_name>/DB2ZTOMSK/DB2ZTOMSK
OF UTSCDC 
AS CDCIN 
DESCRIBED BY GROUP DB2_SOURCE ;
-- Target Datastore(s)
DATASTORE 'kafka:///<kafka topic name>/key'
OF JSON
AS TARGET
DESCRIBED BY GROUP DB2_SOURCE;
PROCESS INTO TARGET
SELECT
{
REPLICATE(TARGET)
}
FROM CDCIN;
```

**大型机可视化控制面板**

以下数据视觉对象由 Amazon Q in Quick Sight 创建，可用于分析问题 `show member distribution by region`*。*

![\[东北和西南区域有 8 名成员，西南区域有 5 名成员，中西部区域有 4 名成员。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/b40a784c-c1fc-444b-b6df-8bd1f7a6abaa.png)


以下数据视觉对象由 Amazon Q in Quick Sight 创建，可用于分析问题 `show member distribution by Region who have not completed preventive immunization, in pie chart`。

![\[东南区域显示 6，西南区域显示 5，中西部区域显示 4。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/8a95da3c-df4a-458b-9cfe-44e34f80a235.png)


**数据故事输出**

以下屏幕截图显示了 Amazon Q in Quick Sight 为提示 `Build a data story about Region with most numbers of members. Also show the member distribution by age, member distribution by gender. Recommend how to motivate members to complete immunization. Include 4 points of supporting data for this pattern` 创建的数据故事的部分。

在简介中，数据故事建议选择成员人数最多的区域，以便免疫接种工作取得最大成效。

![\[简介屏幕，介绍了基于成员群体的地理、人口统计和年龄的分析。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/40f13957-2db4-42b7-b7a4-a0dd3dad6899.png)


该数据故事分析了这四个区域的成员人数。东北、西南和东南地区的成员最多。

![\[东北和西南区域有 8 名成员，西南区域有 6 名成员，中西部区域有 4 名成员。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/fc6ed0a0-b79c-4397-95ac-a2fc4c87482a.png)


该数据故事提供了按年龄划分的成员的分析情况。

![\[该图显示，成员群体以年轻人和中年人为主。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/8c56f1ec-3a2e-47a6-bbc4-3631782aa333.png)


该数据故事重点关注中西部的免疫接种工作。

![\[针对个人外联活动和区域挑战的建议。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/84a647e8-c7d5-4637-94f0-03a611f899b3.png)


![\[继续数据故事分析，并附上预期的结果和结论。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/fc9094fc-2a20-485d-b238-e5e4ec70f1d3.png)


## 附件
<a name="attachments-18e72bcb-1b9a-406a-8220-83aca7743ad2"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/18e72bcb-1b9a-406a-8220-83aca7743ad2/attachments/attachment.zip)

# 在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成数据见解
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight"></a>

*Shubham Roy、Roshna Razack 和 Santosh Kumar Singh，Amazon Web Services*

## Summary
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-summary"></a>

注意： AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

如果组织在大型机环境中托管关键业务数据，那么从这些数据中获取见解对于推动增长和创新至关重要。通过解锁大型机数据，您可以构建更快、更安全的可扩展商业智能，从而加快 Amazon Web Services（AWS）云中数据驱动的决策、增长和创新。

此模式提供了一种解决方案，可使用 BMC 的 [AWS Mainframe Modernization 文件传输功能](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer.html)和 [Amazon Q in Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html)，从大型机数据中生成业务见解并创建可共享的叙述。通过 AWS Mainframe Modernization 使用 BMC 进行文件传输，将大型机数据集传输到[亚马逊简单存储服务 (Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) S3) Simple S3。 AWS Lambda 函数格式化并准备大型机数据文件以加载到 Quick Sight 中。

在 Quick Sight 中提供数据后，您可以使用自然语言提示和 [Amazon Q in Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html) 创建数据摘要、提问并生成数据故事。您不必编写 SQL 查询或学习商业智能（BI）工具。

**商业背景**

此模式提供了一种解决方案，可用于大型机数据分析和数据见解使用案例。使用此模式，您可以为公司的数据构建可视化控制面板。为了演示解决方案，此模式以一家为美国成员提供医疗、牙科和视力计划的医疗保健公司为例。在此示例中，成员人口统计数据和计划信息存储在大型机数据集中。可视化控制面板显示以下信息：
+ 按区域划分的成员分布
+ 按性别划分的成员分布
+ 按年龄划分的成员分布
+ 按计划类型划分的成员分布
+ 尚未完成预防性免疫接种的成员

创建控制面板后，即可生成一个数据故事，其中会解释从先前分析得出的见解。数据故事就如何增加完成预防性免疫接种的成员人数提供了建议。

## 先决条件和限制
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 包含业务数据的大型机数据集
+ 具有访问权限，以便在大型机上安装文件传输功能代理

**限制**
+ 您的大型机数据文件应采用 Quick Sight 支持的文件格式之一。有关支持的文件格式列表，请参阅[支持的数据来源](https://docs.aws.amazon.com/quicksuite/latest/userguide/supported-data-sources.html)。
+ 此模式使用 Lambda 函数将大型机文件转换为 Quick Sight 支持的格式。

## 架构
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-architecture"></a>

下图显示了通过在 Quick Sight 中使用 BMC 和 Amazon Q AWS Mainframe Modernization 的文件传输从大型机数据生成业务见解的架构。

![\[架构图描述如下图所示。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/6fe0f1d9-961c-4089-a746-e5b8d5fd6c1e.png)


下图显示了如下工作流：

1. 通过使用 BMC 进行 AWS Mainframe Modernization 文件传输，将包含业务数据的大型机数据集传输到 Amazon S3。

1. Lambda 函数将文件传输目标 S3 存储桶中的文件转换为逗号分隔值（CSV）格式。

1. Lambda 函数将转换后的文件发送到源数据集 S3 存储桶。

1. Quick Sight 摄取文件中的数据。

1. 用户在 Quick Sight 中访问数据。您可以使用 Amazon Q in Quick Sight 通过自然语言提示与数据进行交互。

## 工具
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-tools"></a>

**AWS 服务**
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [AWS Mainframe Modernization 使用 BMC 进行文件传输](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer.html)可将大型机数据集转换并传输到 Amazon S3，用于大型机现代化、迁移和增强用例。
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) 是一种云级商业智能服务，可用于在单独的控制面板中可视化、分析和报告数据。此模式使用了 [Amazon Q in Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-quicksight-q.html) 的生成式商业智能功能。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

## 最佳实践
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-best-practices"></a>
+ 当您使用 BMC 和 Lambda 函数创建用于 AWS Mainframe Modernization 文件传输的 AWS Identity and Access Management (IAM) 角色时，请遵循最低权限[原则](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。
+ 确保您的源数据集具有 Quick Sight [支持的数据类型](https://docs.aws.amazon.com/quicksight/latest/user/supported-data-types-and-values.html)。如果您的源数据集包含不支持的数据类型，请将其转换为支持的数据类型。有关不支持的大型机数据类型以及如何将其转换为 Amazon Q in Quick Sight 支持的数据类型的信息，请参阅[相关资源](#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-resources)部分。

## 操作说明
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-epics"></a>

### 使用 B AWS Mainframe Modernization MC 设置文件传输
<a name="set-up-m2long-file-transfer-with-bmc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装文件传输功能代理。 | 要安装 AWS Mainframe Modernization 文件传输代理，请按照[AWS 文档](https://docs.aws.amazon.com/m2/latest/userguide/m2-agent-installation.html)中的说明进行操作。 | 大型机系统管理员 | 
| 创建 S3 存储桶，用于大型机文件传输功能。 | [创建 S3 存储桶以存储](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)通过 BMC 传输 AWS Mainframe Modernization 文件的输出文件。在该架构图中，这是文件传输目标存储桶。 | 迁移工程师 | 
| 创建数据传输端点。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | AWS Mainframe Modernization 专家 | 

### 转换大型机文件扩展名，以进行 Quick Sight 集成
<a name="convert-the-mainframe-file-name-extension-for-quick-sight-integration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 为 Lambda 函数[创建 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)，以便将转换后的大型机文件从源存储桶复制到最终目标存储桶。 | 迁移工程师 | 
| 创建一个 Lambda 函数。 | 要创建能够更改文件扩展名并将大型机文件复制到目标存储桶的 Lambda 函数，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 迁移工程师 | 
| 创建 Amazon S3 触发器，以调用 Lambda 函数。 | 要配置可调用 Lambda 函数的触发器，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html)有关更多信息，请参见[教程：使用 Amazon S3 触发器调用 Lambda函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)。 | 迁移主管 | 
| 为 Lambda 函数提供 IAM 权限。 | Lambda 函数需要具有 IAM 权限才能访问文件传输目标和源数据集 S3 存储桶。通过允许文件传输目标 S3 存储桶拥有 `s3:GetObject` 和 `s3:DeleteObject`** **权限****，并允许源数据集 S3 存储桶拥有 `s3:PutObject` 访问权限，更新与 Lambda 函数执行角色关联的策略。有关更多信息，请参阅*教程：使用 Amazon S3 触发器调用 Lambda函数*中的[创建权限策略](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html#with-s3-example-create-policy)****部分。 | 迁移主管 | 

### 定义大型机数据传输任务
<a name="define-a-mainframe-data-transfer-task"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建传输任务，以将大型机文件复制到 S3 存储桶。 | 要创建大型机文件传输任务，请按照 [AWS Mainframe Modernization 文档](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer-transfer-tasks.html)中的说明进行操作。将**源代码页**编码指定为 **IBM1047**，**将目标代码页**编码指定为 **UTF-8**。 | 迁移工程师 | 
| 验证传输任务。 | 要验证数据传输是否成功，请按照 [AWS Mainframe Modernization 文档](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer-transfer-tasks.html#filetransfer-ts-view-console)中的说明进行操作。确认大型机文件位于文件传输目标 S3 存储桶中。 | 迁移主管 | 
| 验证 Lambda 复制函数。 | 验证 Lambda 函数是否已启动，以及文件是否已使用 .csv 扩展名复制到源数据集 S3 存储桶。Lambda 函数创建的.csv 文件是 Quick Sight 的输入数据文件。有关示例数据，请参阅[附件](#attachments-53572abb-06c6-4dd7-add4-8fad7e9bfa68)部分中的 `Sample-data-member-healthcare-APG` 文件。 | 迁移主管 | 

### 将 Quick Sight 连接到大型机数据
<a name="connect-quick-sight-to-the-mainframe-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Quick Sight。 | 要设置 Quick Sight，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/setting-up.html)中的说明进行操作。 | 迁移主管 | 
| 为 Quick Sight 创建数据集。 | 要为 Quick Sight 创建数据集，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/create-a-data-set-s3.html)中的说明进行操作。输入数据文件是在定义大型机数据传输任务时创建的转换后的大型机文件。 | 迁移主管 | 

### 使用 Amazon Q in Quick Sight，从大型机数据中获取业务见解
<a name="get-business-insights-from-the-mainframe-data-by-using-qdev-in-quick-sight"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Amazon Q in Quick Sight。 | 此功能需要企业版。要设置 Amazon Q in Quick Sight，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 迁移主管 | 
| 分析大型机数据并构建可视化控制面板。 | 要在 Quick Sight 中对数据进行分析和可视化，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html)完成后，您可以发布自己的控制面板，以便与组织中的其他人共享。有关示例，请参阅[其他信息](#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional)部分中的*大型机可视化控制面板*。 | 迁移工程师 | 

### 使用 Amazon Q in Quick Sight，从大型机数据中创建数据故事
<a name="create-a-data-story-with-qdev-in-quick-sight-from-the-mainframe-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据故事。 | 创建数据故事以解释先前分析的见解，并就增加完成预防性免疫接种的成员人数生成建议：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 迁移工程师 | 
| 查看生成的数据故事。 | 要查看生成的数据故事，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-view.html)中的说明进行操作。 | 迁移主管 | 
| 编辑生成的数据故事。 | 要更改数据故事中的格式、布局或视觉对象，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-edit.html)中的说明进行操作。 | 迁移主管 | 
| 共享数据故事。 | 要共享数据故事，请按照 [AWS 文档](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-share.html)中的说明进行操作。 | 迁移工程师 | 

## 问题排查
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 无法在 BMC 文件传输中发现在 “**创建传输任务**” **的数据集搜索条件**中输入的大型机 AWS Mainframe Modernization 文件或数据集。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 

## 相关资源
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-resources"></a>

要将[压缩十进制（COMP-3）](https://www.ibm.com/docs/en/cobol-zos/6.3?topic=v6-packed-decimal-comp-3)或[二进制（COMP 或 COMP-4）](https://www.ibm.com/docs/en/cobol-zos/6.3?topic=v6-binary-comp-comp-4)等大型机数据类型转换为 Quick Sight 支持的[数据类型](https://docs.aws.amazon.com/quicksight/latest/user/supported-data-types-and-values.html)，请参阅以下模式：
+ [使用 Python 将 EBCDIC 数据转换并解压缩为 ASCII AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)
+ [在 Amazon S3 中使用以下命令将大型机文件从 EBCDIC 格式转换为字符分隔的 ASCII 格式 AWS Lambda](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda.html)

## 附加信息
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional"></a>

**S3 CopyLambda .py**

以下 Python 代码是通过在 IDE 中使用 Amazon Q 的提示符生成的：

```
#Create a lambda function triggered by S3. display the S3 bucket name and key
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
print(event)
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
print(bucket, key)
#If key starts with object_created, skip copy, print "copy skipped". Return lambda with key value.
if key.startswith('object_created'):
print("copy skipped")
return {
'statusCode': 200,
'body': key
}
# Copy the file from the source bucket to the destination bucket. Destination_bucket_name = 'm2-filetransfer-final-opt-bkt'. Destination_file_key = 'healthdata.csv'
copy_source = {'Bucket': bucket, 'Key': key}
s3.copy_object(Bucket='m2-filetransfer-final-opt-bkt', Key='healthdata.csv', CopySource=copy_source)
print("file copied")
#Delete the file from the source bucket.
s3.delete_object(Bucket=bucket, Key=key)
return {
'statusCode': 200,
'body': 'Copy Successful'
}
```

**大型机可视化控制面板**

以下数据视觉对象由 Amazon Q in Quick Sight 创建，可用于分析问题 `show member distribution by region`*。*

![\[图表显示了西南区域、中西部区域、东北区域和东南区域的成员人数。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/e5c1d049-407d-42ff-bc51-28f9d2b24d4f.png)


以下数据视觉对象由 Amazon Q in Quick Sight 创建，可用于分析问题 `show member distribution by Region who have not completed preventive immunization, in pie chart`。

![\[Pie chart showing preventive immunization incompletion by region: Southeast 40%, Southwest 33%, Midwest 27%.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/47efa1c1-54c9-47cc-b668-416090021d34.png)


**数据故事输出**

以下屏幕截图显示了 Amazon Q in Quick Sight 为提示 `Build a data story about Region with most numbers of members. Also show the member distribution by medical plan, vision plan, dental plan. Recommend how to motivate members to complete immunization. Include 4 points of supporting data.` 创建的数据故事的部分

在简介中，数据故事建议选择成员人数最多的区域，以便免疫接种工作取得最大成效。

![\[重点关注免疫接种完成率的数据故事的简介页面。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/4612fcc7-51fd-48a5-bc58-b6b0aa9b0ef3.png)


该数据故事分析了前三个区域的成员人数，并将西南区域列为重点开展免疫接种工具的领先区域。

![\[Pie chart showing member distribution by region, with Southwest and Northeast leading at 31% each.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/30d3b56b-3b92-4748-9cef-a73ff9339fee.png)


**注意**  
西南区域和东北区域各有八名成员。但是，西南区域未完成疫苗接种的成员人数更多，因此它更有可能提高免疫接种率。

## 附件
<a name="attachments-53572abb-06c6-4dd7-add4-8fad7e9bfa68"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/53572abb-06c6-4dd7-add4-8fad7e9bfa68/attachments/attachment.zip)

# 在 AWS Blu Age 的现代化大型机应用程序中实施基于 Microsoft Entra ID 的身份验证
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application"></a>

*Vishal Jaswani 和 Rimpy Tewani，Amazon Web Services*

## Summary
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-summary"></a>

**注意**  
AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

使用重构模式进行现代化改造的大型机应用程序，例如使用 [AWS Blu Age AWS Mainframe Modernization 重构](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)的应用程序，需要将身份验证机制仔细集成到新的应用程序架构中。这种集成通常会被称为现代化后的活动。这项任务可能很复杂，且通常涉及现有身份验证系统的迁移或外部化，以符合现代安全标准和云原生实践。开发人员需要考虑如何在现代化应用程序的运行时环境和库的约束下有效实施身份验证。现代化后， AWS 提供了一些方法可以让你更轻松地将 AWS Blu Age 现代代码与身份和访问管理系统（例如 [Amazon Cognito 和 Microsoft En](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) [tra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id)（以前称为 Azure AD）集成。

此模式说明了当身份验证提供者是 Microsoft Entra ID 时，如何在现代化应用程序中实施身份验证机制，而无需花时间进行研究和试验。此模式提供：
+ 经过现场测试的相关 Angular 库，这些哭均来自 Microsoft Authentication Library（MSAL）和其他对身份验证实施至关重要的 Microsoft Entra ID 文档。 
+ 使用 OAuth 2.0 启用 Spring Security 需要在 AWS Blu Age 运行时进行配置。
+ 一个库，用于捕获经过身份验证的用户的身份并将其传递给 AWS Blu Age Runtime。
+ 我们建议实施的安全措施。
+ Microsoft Entra ID 设置中常见问题的排查提示。

**注意**  
此模式使用 AWS Blu A OAuth ge 扩展库，该库作为客户[AWS 专业服务](https://aws.amazon.com/professional-services/)参与的一部分提供给客户。这个库不是 AWS Blu Age Runtime 的一部分。

## 先决条件和限制
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-prereqs"></a>

**先决条件**
+ 由 AWS Blu Age 大型机现代化重构工具制作的现代化应用程序。此模式[CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)用作开源大型机应用程序的示例。
+  AWS Blu A OAuth ge 扩展库，由 AWS Blu Age 团队在您使用[AWS 专业服务](https://aws.amazon.com/professional-services/)期间提供。
+ 正在 AWS 账户 部署和测试现代化应用程序。
+ 熟悉 AWS Blu Age 配置文件和 Microsoft Entra ID 基础知识。

**限制**
+ 此模式涵盖了 OAuth 2.0 身份验证和基于令牌的基本授权流程。高级授权场景和精细访问控制机制不在此范围内。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**

开发此模式使用了以下工具：
+ AWS Blu Age Runtime 版本 4.1.0（该模式也适用于向后兼容的更高版本）
+ MSAL 库版本 3.0.23
+ Java 开发工具包（JDK）版本 17
+ Angular 版本 16.1

## 架构
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-architecture"></a>

**源技术堆栈**

在典型的大型机环境中，可通过用户配置文件来实施身份验证。这些配置文件可识别系统的用户，定义可登录系统的人员，并指定用户可以对系统资源执行哪些函数。用户配置文件由安全人员或安全管理员管理。

**目标技术堆栈**
+ Microsoft Entra ID
+ 基于 Java Spring Boot 的现代化后端
+ AWS 蓝光时代运行时间
+  OAuth 2.0 的春季安全
+ Angular 单页应用程序（SPA）

**目标架构**

AWS 默认情况下，Blu Age 运行时支持 OAuth 基于 2.0 的身份验证，因此该模式使用该标准来保护后端。 APIs

下图阐明了该流程。

**注意**  
此图使用 Amazon Aurora 作为数据库现代化的示例，尽管 Aurora 未包含在此模式的步骤中。

![\[适用于 AWS Blu Age 应用程序的基于 Entra ID 的身份验证的流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e51f24b8-178f-4974-aae9-23a0cc8540f5/images/0fdcdb22-9e46-4b02-86b2-395cba3e2f81.png)


其中：

1. 用户尝试使用 Microsoft Entra ID 进行身份验证。

1. Microsoft Entra ID 返回应用程序在后续调用中使用的刷新、访问和 ID 令牌。

1. MSAL 拦截器在调用 AWS Blu Age Runtime 的 HTTPS 请求`Authorization`标头中包含访问令牌。

1.  AWS Blu Age `extension-oauth` 库使用 Bl AWS u Age Runtime 配置文件 (`application-main.yml`) 从标题中提取用户信息，并将这些信息放在`SharedContext`对象中，以便业务逻辑可以消耗这些信息。
**注意**  
`SharedContext`是 AWS Blu Age 提供的运行时组件，用于管理现代化应用程序中的应用程序上下文和状态信息。有关 AWS Blu Age 运行时组件和更新的更多信息，请参阅 AWS Mainframe Modernization 文档中的 [AWS Blu Age 发行说明](https://docs.aws.amazon.com/m2/latest/userguide/ba-release-notes.html)。有关该`application-main.yml`文件的更多信息，请参阅 AWS Mainframe Modernization 文档中的为 [AWS Blu Age Runtime 设置配置](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config.html)。

1.  AWS Blu Age 运行时会检查令牌是否存在。 

   1. 如果该令牌存在，则会通过与 Microsoft Entra ID 通信来检查令牌的有效性。 

   1. 如果令牌不存在， AWS Blu Age Runtime 将返回错误，HTTP 状态码为 403。

1. 如果令牌有效，则 AWS Blue Age Runtime 允许业务逻辑继续运行。如果令牌无效， AWS Blu Age Runtime 将返回错误，HTTP 状态码为 403。

**OAuth 2.0 工作流程**

有关 OAuth 2.0 工作流程的高级示意图，请参阅 [Microsoft Entra 文档](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow#protocol-details)。

## 工具
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools"></a>

**AWS 服务**

[AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)提供工具和资源，帮助您规划和实施从大型机到 AWS 托管运行时环境的迁移和现代化。您可以使用 AWS Blu Age 提供的此服务的重构功能对您的传统大型机应用程序进行转换和现代化改造。

**注意**  
AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

**代码存储库**

该 CardDemo 应用程序已更新，以演示与微软 Entra ID 的集成。您可以从[GitHub 存储库中访问此模式的](https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app)代码。

**后端配置**

此模式需要更改`application-main.yml`****配置文件才能通过在后端应用程序上使用 OAuth 2.0 来启用 Spring Security。 `.yml` 文件如下所示：

```
gapwalk-application.security: enabled
gapwalk-application:
  security: 
    identity: oauth
    issuerUri: ${issuerUrl}
    claim:
      claims:
        -
          claimName: upn
          claimMapValue: username
spring:
  autoconfigure:
    exclude:
     - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration
     - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration
  security:
    oauth2:
      client:
        registration: 
          azure:
            client-id: {clientId}
            client-secret: ${clientSecret}
            provider: azure
            authorization-grant-type: authorization_code
            redirect-uri: ${redirectUri}
            scope: openid
           
        provider:
          azure:
            authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize
            token-uri:  ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
```

**AWS Blu Age OAuth 扩展滤镜库**

 AWS Blu A OAuth ge 扩展库由 AWS Blu Age 团队在您使用[AWS 专业服务](https://aws.amazon.com/professional-services/)期间提供。

该库会读取上一个代码块中显示的 `application-main.yml` 文件中的 `claim.claims` 配置。此配置是一个列表。列表中的每个项目都会提供两个值：`claimName` 和 `claimMapValue`。`claimName` 表示前端发送的 JSON Web 令牌（JWT）中的键名，并且 `claimMapValue` 也是 `SharedContext` 中的键名。例如，如果要在后端捕获用户 ID，请将 `claimName` 设置为 JWT 中保存 Microsoft Entra ID 提供的 `userId` 的键名，然后将 `claimMapValue` 设置为键名，以在后端代码中获取用户 ID。

例如，如果您在 `claimMapValue` 中设置了 `UserId`，则可以使用以下代码提取用户 ID：

```
SharedContext.get().getValue("userId", [UserId]);
```

## 最佳实践
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-best-practices"></a>

在实施此模式时，请考虑以下重要的安全注意事项。

**重要**  
此模式为身份验证集成提供了基础。我们建议您，除了本部分中讨论的措施外，还应根据您的业务需求实施安全措施，然后再将其部署到生产环境。
+ **AWS 配置安全。**将敏感配置值从移`application-main.yml`至 AWS Secrets Manager。例如，使用 Secrets Manager 配置以下属性：

  ```
  security:
      oauth2:
        client:
          registration: 
            azure:
              client-id: {clientId}
              client-secret: ${clientSecret}
  ```

  有关如何使用 Secrets Manager 配置 AWS Blu Age 参数的更多信息，请参阅 AWS Mainframe Modernization 文档中的 [AWS Blu Age 运行时密钥](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config-app-secrets.html)。
+ **运行时环境保护。**使用适当的 AWS 安全控制来配置现代化的应用程序环境：

  ```
  server: 
    tomcat: 
      remoteip: 
       protocol-header: X-Forwarded-Proto 
       remote-ip-header: X-Forwarded-For 
    forward-headers-strategy: NATIVE
  ```
+ **亚马逊 CloudWatch 日志。**考虑添加文件 `logback-spring.xml to src/main/resources`：

  ```
  <configuration> 
   <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender">  
     <logGroup>/aws/bluage/application</logGroup> 
     <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> 
     <layout> 
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </layout> 
   </appender> 
  
   <root level="INFO"> 
   <appender-ref ref="CLOUDWATCH"/> 
   </root> 
  </configuration>
  ```

  有关使用启用跟踪的信息 CloudWatch，请参阅 CloudWatch 文档中的[启用跟踪以记录关联](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)。
+ **令牌配置和处理。**在 Microsoft Entra ID 中配置令牌生命周期，以符合您的安全要求。将访问令牌设置为 1 小时内到期，将刷新令牌设置为 24 小时内到期。在 AWS Blu Age 运行时配置 (`application-main.yml`) 中，确保使用您的 Entra ID 应用程序注册中确切的颁发者 URI 和受众值正确配置 JWT 验证。

  当令牌到期并刷新时：

  1. Angular 应用程序的错误拦截器会通过 MSAL 获取新令牌，进而处理 401 响应。

  1. 新令牌会与后续请求一起发送。

  1.  AWS Blu Age Runtime 的 OAuth 过滤器会验证新令牌，并`SharedContext`使用当前用户信息自动更新。这可确保业务逻辑能够通过 `SharedContext.get().getValue()` 调用继续访问有效的用户上下文。

  有关 AWS Blu Age Runtime 组件及其更新的更多信息，请参阅 [AWS Blu Age 发行说明](https://docs.aws.amazon.com/m2/latest/userguide/ba-release-notes.html)。
+ **AWS Blu Age 运行时安全。** AWS Blu Age 提供的`oauth2-ext`库必须放置在正确的共享目录位置 (`{app-server-home}/shared/`) 中，并具有适当的文件权限。 JWTs 通过检查日志中的`SharedContext`对象群来验证库是否成功地从中提取了用户信息。
+ **具体的声明配置。**在 `application-main.yml` 中，明确定义您需要从 Microsoft Entra ID 中获得的声明。例如，要捕获用户的电子邮件和角色，请指定：

  ```
  gapwalk-application:
    security:
      claim:
        claims:
          - claimName: upn
            claimMapValue: username
          - claimName: roles
            claimMapValue: userRoles
          - claimName: email
            claimMapValue: userEmail
  ```
+ **错误处理。**添加错误处理，以处理 Angular 应用程序中的身份验证失败；例如：

  ```
  @Injectable()
  export class AuthErrorInterceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      return next.handle(request).pipe(
        catchError((error: HttpErrorResponse) => {
          if (error.status === 401) {
            // Handle token expiration
            this.authService.login();
          }
          if (error.status === 403) {
            // Handle unauthorized access
            this.router.navigate(['/unauthorized']);
          }
          return throwError(() => error);
        })
      );
    }
  }
  ```
+ **会话超时配置。**在 AWS Blu Age 运行时和 Microsoft Entra ID 中配置会话超时设置。例如，将以下代码添加到您的 `application-main.yml` 文件：

  ```
  server:
    servlet:
      session:
        timeout: 3600 # 1 hour in seconds
  ```
+ **MsalGuard。** 您必须为所有受保护的路由实现该 MsalGuard 功能，以防止未经授权的访问。例如：

  ```
  const routes: Routes = [
      { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' },
      { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards },
      { path: 'user-info', component: UserInfoComponent, canActivate:guards },
      { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards },
  	{ path: 'code', component: TransactionRunnerComponent  }
  ];
  ```

  没有 MsalGuard 保护的路由无需身份验证即可访问，这可能会暴露敏感功能。确认所有需要身份验证的路由的配置中都已包含防护。

## 操作说明
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-epics"></a>

### 设置 Microsoft Entra ID
<a name="set-up-a-microsoft-entra-id"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Microsoft Azure 账户以创建 Entra ID。 | 有关选项和说明，请访问 [Microsoft Azure 网站](https://azure.microsoft.com/en-us/free/)。 | 应用程序开发人员 | 
| 在您的应用程序中，设置 Microsoft Entra ID。 | 要了解如何将 Microsoft Entra ID B2C（Azure AD B2C）身份验证添加到 Angular SPA，请参阅 [Microsoft 文档](https://learn.microsoft.com/en-us/azure/active-directory-b2c/enable-authentication-angular-spa-app#add-the-authentication-components)。具体来说：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 应用程序开发人员 | 

### 克隆存储库并部署你的 AWS Blu Age 代码
<a name="clone-the-repository-and-deploy-your-aws-blu-age-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆 GitHub 存储库以获取身份验证所需的 Angular 代码。 | 运行以下命令，将此模式提供的[GitHub 存储库](https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app)克隆到本地当前工作目录中：<pre>git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git</pre> | 应用程序开发人员 | 
| 在 Tomcat 服务器上部署 AWS Blu Age 现代化代码以实现身份验证。 | 要设置包括 Tomcat 和 Angular 开发服务器在内的本地环境，请按照 AWS Blu Age 团队提供的安装步骤进行操作，这是客户参与 AWS 专业服务的一部分。 | 应用程序开发人员 | 

### 构建身份验证解决方案
<a name="build-the-authentication-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启用 AWS Blu Age 运行时安全，以保护 AWS Blu Age REST API 端点。 | 按如下方式配置 AWS Blu Age 运行时使用的`application-main.yml`文件。有关此文件的示例，请参阅此模式前面的[代码存储库](#implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools)部分。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 应用程序开发人员 | 
| 将本地环境中的示例代码整合到您的 Blu Age 现代化 Angular 代码库中。 | 有关如何将该示例整合到您的 AWS Blu Age 现代化 Angular 代码库中的信息，请参阅本模式前面的 “[代码存储库](#implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools)” 部分。 | 应用程序开发人员 | 
| 将 `oauth2-ext` 库放置在共享目录中。 | 将 `oauth2-ext` 库放置在应用程序服务器的****共享目录中，以便您的** **AWS Blu Age 现代化应用程序可以使用它**。**运行以下 命令：<pre>cd oauth2-ext/target<br />cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/</pre> | 应用程序开发人员 | 

### 部署身份验证解决方案
<a name="deploy-the-authentication-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署前端应用程序。 | 允许以下命令，在本地启动前端应用程序：<pre>npm install <br />ng serve --ssl<br />npm start</pre>在 `ng serve` 命令中添加 `--ssl` 标志可确保开发服务器使用 HTTPS，这比其他协议更安全，并且可以更好地模拟生产环境。 | 应用程序开发人员 | 
| 启动后端应用程序。 | 在 Eclipse 中启动 Tomcat 服务器。 | 应用程序开发人员 | 

### 测试应用程序
<a name="test-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试登录功能。 | 访问本地部署的应用程序（`http://localhost:4200`），以验证是否要求用户确认其身份。此处使用 HTTP 仅为演示目的。在生产环境或其他可公开访问的环境中，出于安全考虑，您必须使用 HTTPS。即使对于本地开发，我们也建议您尽可能设置 HTTPS。应该会出现 Microsoft 登录提示，并且应该允许在 Microsoft Entra ID 中配置的用户访问该应用程序。 | 应用程序开发人员 | 
| 测试请求中的授权标头。 | 以下步骤以该[CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)应用程序为例。其他现代应用程序的测试步骤会有所不同。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 应用程序开发人员 | 
| 测试注销功能。 | 选择**退出**以注销，然后尝试再次访问该应用程序。此时应该会显示一个新的登录提示。 | 应用程序开发人员 | 

## 问题排查
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 微软 Entra ID 发行的令牌与 Spring Boot OAuth 2.0 安全性不兼容。 | 有关该问题的解决方案，请参阅 OAuth 博客上的 [Microsoft Entra ID OAuth Flow](https://authguidance.com/azure-ad-troubleshooting/)。 | 
| 与令牌相关的一般问题。 | 要解码和查看 JWT 令牌的内容，请使用 [https://jwt.io/](https://jwt.io/) 网站。 | 

## 相关资源
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-resources"></a>
+ [有关使用 AWS Blu Age 重构应用程序的信息，请参阅文档。AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)
+ 要了解 OAuth 2.0 的工作原理，请访问 [OAuth 2.0 网站](https://oauth.net/2/)。
+ 有关微软身份验证库（MSAL）的概述，请参阅 [Microsoft Entra 文档](https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-overview)。
+ 有关 AS/400 系统上用户配置文件的信息，请参阅 [IBM i (AS400)](https://www.go4as400.com/subsystem-jobs-user-profile-in-as400/jobs.aspx?cid=14) 教程。
+ [有关微软身份平台中的 OAuth 2.0 和 OpenID Connect (OIDC) 身份验证流程，请参阅微软 Entra 文档。](https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols)

# 将 Stonebranch Universal Controller 与 AWS Mainframe Modernization 集成
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization"></a>

*Vaidy Sankaran 和 Pablo Alonso Prieto，Amazon Web Services*

*Robert Lemieux 和 Huseyin Gomleksizoglu，Stonebranch*

## Summary
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-summary"></a>

注意： AWS Mainframe Modernization 服务（托管运行时环境体验）不再向新客户开放。要获得与 AWS Mainframe Modernization 服务（托管运行时环境体验）类似的功能，请浏览 AWS Mainframe Modernization 服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [AWS Mainframe Modernization 可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

此模式解释了如何将[Stonebranch Universal Automation Center (UAC) 工作负载编排](https://www.stonebranch.com/stonebranch-platform/universal-automation-center)与[Amazon Web Services (AWS) Mainframe Modernization 服务](https://aws.amazon.com/mainframe-modernization/)集成。AWS Mainframe Modernization 将主机应用程序迁移至 Amazon Web Services Cloud 并对其进行现代化改造。它提供了两种模式：[AWS Mainframe Modernization 内采用 Micro Focus Enterprise Technology 的更换平台功能](https://aws.amazon.com/mainframe-modernization/patterns/replatform/)，以及 [AWS Mainframe Modernization 内采用 AWS Blu Age 的自动重构](https://aws.amazon.com/mainframe-modernization/patterns/refactor/?mainframe-blogs.sort-by=item.additionalFields.createdDate&mainframe-blogs.sort-order=desc)。 

Stonebranch UAC 是实时 IT 自动化和编排平台。UAC 旨在跨混合 IT 系统（从本地到 AWS） 自动执行和协调作业、活动和工作流。使用主机系统的企业客户正在过渡至以云为中心的现代化基础架构和应用程序。Stonebranch 的工具和专业服务有助于将现有调度程序和自动化功能迁移至 AWS Cloud。

当您使用 AWS Mainframe Modernization 服务将主机程序迁移至 Amazon Web Services Cloud 或对其进行现代化改造时，您可以使用此集成来自动执行批量调度、提高灵活性、改善维护并降低成本。

此模式提供了以下说明：将 [Stonebranch 调度器](https://www.stonebranch.com/)与迁移至AWS Mainframe Modernization 服务 Micro Focus Enterprise 运行时系统的主机应用程序集成。此模式适用于解决方案架构师、开发人员、顾问、迁移专家和其他从事迁移、现代化、运营或。 DevOps

**目标成果**

这种模式重点提供以下目标结果：
+ 能够安排、自动化和运行Stonebranch Universal Controller中的 AWS Mainframe Modernization 服务（Microfocus 运行时系统）的主机批处理作业。
+ 通过 Stonebranch Universal Controller 监控应用程序的批处理过程。
+ Start/Restart/Rerun/Stop通过 Stonebranch 通用控制器自动或手动进行批处理。
+ 检索 AWS Mainframe Modernization 批处理流程的结果。
+ 在 Stonebranch 通用控制器中捕获批处理任务的 [AWS CloudWatch](https://aws.amazon.com/cloudwatch/) 日志。

## 先决条件和限制
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 一个包含任务控制语言（JCL）文件的 Micro Focus [Bankdemo](https://d1vi4vxke6c2hu.cloudfront.net/demo/bankdemo_runtime.zip) 应用程序，批处理部署在 AWS Mainframe Modernization 服务（Micro Focus 运行时）环境
+ 有关如何构建和部署在 Micro Focus [Enterprise Server](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)上运行的主机应用程序的基础知识
+ Stonebranch Universal Controller基础知识
+ Stonebranch 试用许可证（请联系 [Stonebranch](https://www.stonebranch.com/)）
+ Windows 或 Linux Amazon Elastic Compute Cloud (Amazon EC2) 实例（例如 xlarge），最少四核、8 GB 内存和 2 GB 磁盘空间。
+ Apache Tomcat 8.5.x 或 9.0.x 版
+ Oracle Java 运行时环境（JRE）或 OpenJDK 第 8 版或第 11 版
+ [Amazon Aurora MySQL 兼容版](https://aws.amazon.com/rds/aurora/)
+ [Amazon Simple Storage Service (Amazon S3) ](https://aws.amazon.com/s3/)存储桶，可导出存储库
+ 适用于代理 Stonebranch Universal Message Service (OMS) 连接实现高可用性的[Amazon Elastic File System (Amaon EFS)](https://aws.amazon.com/efs/)。
+ Stonebranch Universal Controller 7.2 Universal Agent 7.2 安装文件
+ AWS Mainframe Modernization [任务计划模板](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)（最新版 .zip 文件）

**限制**
+ 该产品和解决方案仅在 OpenJDK 8 和 11 版本上进行了测试和兼容性验证。
+ [aws-mainframe-modernization-stonebranch集成](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)任务计划模板仅适用于 AWS 大型机现代化服务。
+ 此任务计划模板只能在 Unix、Linux 或 Windows 版本 Stonebranch 代理上运行。
+ 部分 AWS 服务在有些 AWS 区域不可用。有关区域可用性，请参阅[按区域划分的 AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 架构
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-architecture"></a>

**目标状态架构**

下图显示了此试点所需示例 AWS 环境。

![\[Stonebranch UAC 与 AWS Mainframe Modernization 环境交互。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/4a7bea37-0a5b-4663-902b-9b051e92f0cb.png)


1. Stonebranch Universal Automation Center (UAC) 包括两个主要组件：Universal Controller和Universal Agent。Stonebranch OMS 用作控制器和各个代理间的消息总线。

1. Universal Controller 使用 Stonebranch UAC 数据库。该数据库可以兼容 MySQL Server、Microsoft SQL Server、Oracle 或者 Aurora MySQL。

1. AWS 大型机现代化服务 — [部署了BankDemo 应用程序](https://aws.amazon.com/blogs/aws/modernize-your-mainframe-applications-deploy-them-in-the-cloud/)的 Micro Focus 运行时环境。 BankDemo 应用程序文件将存储在 S3 存储桶中。此存储桶还包含主机 JCL 文件。

1. Stonebranch UAC 可运行以下函数进行批量运行：

   1. 使用链接至 AWS Mainframe Modernization服务的 S3 存储桶中的 JCL 文件名启动批处理作业。

   1. 获取批处理作业运行状态。

   1. 等待批处理作业运行完成。

   1. 获取批处理作业运行日志。

   1. 重新运行失败批处理作业。

   1. 批量作业运行时取消批量作业。

1. Stonebranch UAC 可为应用程序运行以下函数：

   1. 启动应用程序

   1. 获取应用程序状态

   1. 等待应用程序启动或停止

   1. 停止应用程序

   1. 获取应用程序操作日志

**Stonebranch 作业转换**

下图显示了 Stonebranch 在现代化流程中的工作转换过程。它描述了如何将任务计划和任务定义转换为可运行 AWS Mainframe Modernization 批处理任务的兼容格式。

![\[在 Amazon EC2 上使用 Amazon S3 中的 JCL 文件，从大型机转换为任务调度器的过程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/4d2ed890-f143-455e-8180-4d967b71c494.png)


1. 在转换过程中，任务定义从现有的主机系统中导出。

1. 可以将 JCL 文件上传至 Mainframe Modernization 应用程序的 S3 存储桶，这样 AWS Mainframe Modernization 服务就可以部署这些 JCL 文件。

1. 转换工具将导出作业定义转换为 UAC 任务。

1. 创建完所有任务定义和作业计划后，这些对象将导入 Universal Controller。然后，转换后的任务将在 AWS Mainframe Modernization 服务中运行这些流程，而不是在主机上运行这些流程。

**Stonebranch UAC 架构**

以下架构图代表了高可用性 (HA) 通用控制器的 active-active-passive模型。Stonebranch UAC 部署至多个可用区，以提供高可用性并支持灾难恢复 (DR)。

![\[多可用区环境，具有 DR 和控制器、Amazon EFS、Aurora 和用于备份的 S3 存储桶。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/3f94b855-c146-4fcb-902c-5d343438a558.png)


*Universal Controller*

两台 Linux 服务器被配置为 Universal Controller。两者都连接至同一个数据库端点。每台服务器都装有一个 Universal Controller 应用程序和 OMS。在配置 Universal Controller 时使用最新版本。

Universal Controller 作为文档根目录部署在 Tomcat Web 应用程序中，并在端口 80 上提供服务。这种部署简化了前端负载均衡器配置。

使用 Stonebranch 通配符证书（例如`https://customer.stonebranch.cloud`） 启用基于 TLS 的 HTTP 或 HTTPS。这样可以保护浏览器和应用程序间的通信。

*OMS*

Universal Agent和 OMS（Opswise 消息服务） 驻留在每台 Universal Controller 服务器上。所有从客户端部署的 Universal Agent 都设置为连接至两个 OMS 服务。OMS 充当 Universal Agent 和 Universal Controller 之间的常见消息服务。

Amazon EFS 在每台服务器上都挂载假脱机目录。OMS 使用此共享的缓冲池目录，保存来自控制器和代理的连接和任务信息。OMS 可在高可用性模式下运行。如果主动 OMS 出现故障，则被动 OMS 可访问所有数据，并且它会自动恢复主动操作。Universal Agent 会检测到此更改，并自动连接至新的活动 OMS。

*数据库*

Amazon Relational Database Service (Amazon RDS) 托管 UAC 数据库，引擎与 Amazon Aurora MySQL 兼容。Amazon RDS 有助于定期管理与提供定时备份。两个 Universal Controller 实例都连接至同一个数据库端点。

*负载均衡器*

为每个实例设置了应用程序负载均衡器。负载均衡器可以在任何给定时刻将流量引导至活动控制器。您的实例域名指向相应负载均衡器端点。

*URLs*

您的每个实例都有 URL，如以下示例所示。


| 
| 
| 环境 | 实例 | 
| --- |--- |
| **生产** | `customer.stonebranch.cloud` | 
| **开发（非生产）** | `customerdev.stonebranch.cloud` | 
| **测试（非生产）** | `customertest.stonebranch.cloud` | 

**注意**  
  可以根据需要设置非生产实例名称。

*高可用性*

高可用性 (HA) 是指系统能够在指定时间段内连续运行且不会出现故障。此类故障包括但不限于存储、CPU 或内存问题导致的服务器通信响应延迟和网络连接。

要满足高可用性要求：
+ 所有 EC2 实例、数据库和其他配置都镜像至同一 AWS 区域内的两个独立可用区。
+ 控制器通过亚马逊机器映像（AMI）在两个可用区的两台 Linux 服务器上进行配置。例如，如果您在欧洲 eu-west-1 区域进行配置，则您在可用区 eu-west-1a 和可用区 eu-west-1c 中有一个 Universal Controller。
+ 不允许任何作业直接在应用程序服务器上运行，也不允许在此服务器上存储任何数据。
+ 应用程序负载均衡器对每个 Universal Controller 运行运行状况检查，以识别活动控制器并将流量引导至该控制器。如果一台服务器出现问题，负载均衡器会自动将被动 Universal Controller 提升到主动状态。然后，负载均衡器从运行状况检查中识别出新的活动 Universal Controller 实例，并开始引导流量。故障转移将在四分钟内完成，不会丢失任何工作，且前端 URL 保持不变。
+ 兼容 Aurora MySQL 的数据库服务存储 Universal Controller 数据。对于生产环境，数据库集群由位于单个 AWS 区域内的两个不同可用区内的两个数据库实例构建。两个 Universal Controller 都使用指向单个数据库集群端点的 Java 数据库连接 (JDBC) 接口。如果数据库实例出现问题，则数据库集群端点会动态指向运行状况良好的实例。无需手动干预。

*备份和清除*

Stonebranch Universal Controller 设置为按照表中所示时间表备份和清除旧数据。


| 
| 
| Type | Schedule | 
| --- |--- |
| **活动** | 7 days | 
| **审核** | 90 天 | 
| **历史记录** | 60 天 | 

早于显示日期的备份数据将导出为 .xml 格式并存储在文件系统中。备份过程完成后，将从数据库中清除较旧数据，并在 S3 存储桶中存档长达一年的生产实例。

您可以在 Universal Controller 界面中调整此时间表。但是，增加这些时间范围可能会导致延长维护期间的停机时间。

## 工具
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-tools"></a>

**Amazon Web Services**
+ [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html) 是一个 AWS 云原生平台，可帮助您将主机应用程序现代化为 AWS 托管运行时系统环境。它提供了工具和资源来帮助您规划和实施迁移与现代化。
+ [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) 提供了块级存储卷以用于 Amazon EC2 实例。
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) 可帮助您在 Amazon Web Services Cloud 中创建和配置共享文件系统。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。Amazon Aurora MySQL 兼容版。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [弹性负载均衡（ELB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)将传入的应用程序或网络流量分配到多个目标。例如，您可以将流量分发到一个或多个可用区中的 Amazon EC2 实例、容器以及 IP 地址。此模式使用应用程序负载均衡器。

**Stonebranch**
+ [Universal Automation Center (UAC)](https://stonebranchdocs.atlassian.net/wiki/spaces/SD/pages/239239169/Universal+Automation+Center) 是一个由企业工作负载自动化产品组成的系统。此模式采用以下 UAC 组件：
  + [Universal Controller](https://www.stonebranch.com/documentation-universal-controller) 是一款在 Tomcat Web 容器中运行的 Java Web 应用程序，是 Universal Automation Center 的企业任务调度器和工作负载自动化代理解决方案。控制器提供了用户界面，用于创建、监视和配置控制器信息；处理调度逻辑；处理进出 Universal Agent 的所有消息；并同步 Universal Automation Center 的大部分高可用性操作。
  + [Universal Agent](https://www.stonebranch.com/documentation-universal-agent) 是独立于供应商的调度代理，可与所有主要计算平台（包括传统和分布式）上的现有作业调度器协作。支持在 Unix z/Series, i/Series、Linux 或 Windows 上运行的所有调度程序。
+ [Universal Agent](https://www.stonebranch.com/documentation-universal-agent) 是独立于供应商的调度代理，可与所有主要计算平台（包括传统和分布式）上的现有作业调度器协作。支持在 Unix z/Series, i/Series、Linux 或 Windows 上运行的所有调度程序。
+ [Stonebranch aws-mainframe-modernization-stonebranch-integration AWS 大型机现代化通用](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)扩展是在 AWS 大型机现代化平台中运行、监控和重新运行批处理作业的集成模板。

**代码**

此模式的代码可在 [aws-mainframe-modernization-stonebranch-](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases/) integration GitHub 存储库中找到。

## 操作说明
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-epics"></a>

### 在 Amazon EC2 上安装 Universal Controller 和 Universal Agent
<a name="install-universal-controller-and-universal-agent-on-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载安装文件。 | 从 Stonebranch 服务器下载安装程序。若要获取安装文件，请联系 Stonebranch。 | 云架构师 | 
| 启动 EC2 实例。 | 安装 Universal Controller 和 Universal Agent 需要大约 3 GB 的额外空间。因此，请为此实例提供至少 30 GB 的磁盘空间。向安全组添加端口 8080，使其可访问。 | 云架构师 | 
| 检查先决条件。 | 安装前请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 云管理员、Linux 管理员 | 
| 安装Universal Controller。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 云架构师、Linux 管理员 | 
| 安装 Universal Agent。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 云管理员、Linux 管理员 | 
| 将 OMS 添加到 Universal Controller。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 导入 AWS Mainframe Modernization 通用扩展并创建任务
<a name="import-aws-mainframe-modernization-universal-extension-and-create-a-task"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 导入集成模板。 | 若要完成此步骤，您需要[AWS Mainframe Modernization Universal Extension](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)。确保已下载最新发布的 .zip 文件版本。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html)导入集成模板后，您将在**可用服务**下看到 **AWS Mainframe Modernization 任务**。 | Universal Controller 管理员 | 
| 启用可解析的凭证。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 
| 启动任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 测试启动批量作业
<a name="test-starting-a-batch-job"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为批处理作业创建任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 
| 启动任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 为多项任务创建一个工作流
<a name="create-a-workflow-for-multiple-tasks"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 复制任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 
| 更新任务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 
| 创建工作流。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 
| 查看工作流的状态。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 对失败的批处理作业进行故障排除，并重新运行
<a name="troubleshoot-failed-batch-jobs-and-rerun"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 修复失败的任务并重新运行。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 创建启动应用程序和停止应用程序任务
<a name="create-start-application-and-stop-application-tasks"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建启动应用程序操作。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | Universal Controller 管理员 | 

### 创建取消批量执行” 任务
<a name="create-a-cancel-batch-execution-task"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Cancel Batch 操作。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) |  | 

## 相关资源
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-resources"></a>
+ [Universal Controller](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/overview)
+ [Universal Agent](https://stonebranchdocs.atlassian.net/wiki/spaces/UA77/overview)
+ [LDAP 设置](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/pages/794552355/LDAP+Settings)
+ [SAML Single Sign-On](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/pages/794553130/SAML+Single+Sign-On)
+ [Xpress 转换工具](https://www.stonebranch.com/resources/xpress-conversion-windows)

## 附加信息
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-additional"></a>

**工作流编辑器内的图标**

![\[RUNHELLO 任务位于顶部，FOOBAR 位于中间，而其余任务位于第三级。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/837430ee-3159-4fe2-8e17-65168294ef1e.png)


**所有已连接任务**

![\[RUNHELLO 连接至 FOOBAR，FOOBAR 连接到其余三个任务。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/fe483348-9a6f-450b-87e6-ceae6b2bdaad.png)


**工作流状态**

![\[FOOBAR 任务失败，剩余三个任务正在等待。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/5ea4e239-fbbe-4fa4-9ffa-b7a9443b7975.png)


# 使用 Connect from Precisely 将 VSAM 文件迁移和复制到 Amazon RDS 或 Amazon MSK
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely"></a>

*Prachi Khanna 和 Boopathy GOPALSAMY，Amazon Web Services*

## Summary
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-summary"></a>

此模式向您展示了如何使用 [Connect](https://www.precisely.com/product/precisely-connect/connect) from Precisely 将虚拟存储访问方法 (VSAM) 文件从大型机迁移和复制到 Amazon Web Services Cloud 中的目标环境。此模式涵盖的目标环境包括 Amazon Relational Database Service (Amazon RDS) 和 Amazon Managed Streaming for Apache Kafka (Amazon MSK)。Connect 使用[更改数据捕获 (CDC)](https://www.precisely.com/resource-center/productsheets/change-data-capture-with-connect) 持续监控源 VSAM 文件的更新，然后将这些更新传输到您的一个或多个 AWS 目标环境。您可使用这种模式来实现应用程序现代化或数据分析目标。例如，您可使用 Connect 将您的 VSAM 应用程序文件以低延迟迁移到 Amazon Web Services Cloud，或者将 VSAM 数据迁移到 AWS 数据仓库或数据湖进行分析，以容限高于应用程序现代化所需同步延迟。

## 先决条件和限制
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-prereqs"></a>

**先决条件**
+ [IBM z/OS V2R1 或](https://www-40.ibm.com/servers/resourcelink/svc00100.nsf/pages/zosv2r1-pdf-download?OpenDocument)更高版本
+ [适用于 z/OS (CICS TS) V5.1 或更高版本的 CICS 事务服务器（CICS/V](https://www.ibm.com/support/pages/cics-transaction-server-zos-51-detailed-system-requirements) SAM 数据捕获）
+ [IBM MQ 8.0](https://www.ibm.com/support/pages/downloading-ibm-mq-80) 或更高版本
+ 符合 [z/OS 安全要求](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-zOS/Prerequisites-for-z/OS/Security-authorization-requirements-for-z/OS)（例如，加载库的 APF 授权） SQData 
+ VSAM 恢复日志已开启
+ （可选）[CICS VSAM Recovery Version (CICS VR)](https://www.ibm.com/docs/en/cics-vr/5.1?topic=started-introducing-cics-vr) 用于自动捕获 CDC 日志
+ 一个有效的 Amazon Web Services account
+ 具有可由您的旧平台访问的子网的 [Amazon 虚拟私有云（VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html)
+ 来自 Precisely 的 VSAM Connect 许可证

**限制**
+ Connect 不支持基于源 VSAM 架构或副本自动创建目标表。您必须首次定义目标表的结构。
+ 对于非流媒体目标（例如 Amazon RDS），您必须在 Apply Engine 配置脚本中指定目标映射的转换源。
+ 记录、监控和警报功能通过外部组件（例如 Amazon）实现， APIs 并且需要外部组件（例如 Amazon CloudWatch）才能完全运行。

**产品版本**
+ SQData 40134 适用于 z/OS
+ SQData 4.0.43 适用于亚马逊弹性计算云（亚马逊）上的亚马逊 Linux 亚马逊系统映像 (AMI) EC2

## 架构
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-architecture"></a>

**源技术堆栈**
+ 作业控制语言 (JCL)
+ z/OS Unix Shell 和 Interactive System Productivity Facility (ISPF)
+ VSAM 实用程序 (IDCAMS)

**目标技术堆栈**
+ Amazon EC2
+ Amazon MSK
+ Amazon RDS
+ Amazon VPC

**目标架构**

*将 VSAM 文件迁移到 Amazon RDS*

下图显示了如何通过在源环境（本地大型[机）中使用 CDC agent/publisher 和在目标环境（AWS Cloud）中使用 Apply Engine，实时或近乎实时地将](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine) VSAM 文件迁移到关系数据库，例如 Amazon RDS。

![\[Diagram showing VSAM file migration from on-premises mainframe to AWS 云 using CDC and Apply Engine.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4ee183bd-1c0d-449d-8cdc-eb6e2c41a695/images/47cefbde-e0c8-4c36-ba48-cccc2c443074.png)


图表显示了以下批处理工作流：

1. Connect 通过比较备份文件中的 VSAM 文件来捕获文件更改以识别更改，然后将更改发送到日志流。

1. Publisher 使用系统日志流中的数据。

1. Publisher 通过 TCP/IP 将捕获的数据更改传达至目标引擎。控制器进程守护程序对源环境和目标环境之间的通信进行身份验证。

1. 目标环境中的 Apply Engine 从 Publisher 代理接收更改并将它们应用到关系或非关系数据库。

图表显示了以下在线工作流：

1. Connect 使用日志副本捕获联机文件更改，然后将捕获的更改流式传输到日志流。

1. Publisher 使用系统日志流中的数据。

1. Publisher 通过 TCP/IP 将捕获的数据更改传达至目标引擎。控制器进程守护程序对源环境和目标环境之间的通信进行身份验证。

1. 目标环境中的 Apply Engine 从 Publisher 代理接收更改，然后将它们应用到关系或非关系数据库。

*将 VSAM 文件迁移到 Amazon MSK*

下图显示了如何在高性能模式下将 VSAM 数据结构从大型机流式传输到 Amazon MSK，并自动生成与 Amazon MSK 集成的 JSON 或 AVRO 架构转换。

![\[Diagram showing data flow from on-premises mainframe to AWS 云 services via Amazon VPC.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/4ee183bd-1c0d-449d-8cdc-eb6e2c41a695/images/13eb27ad-c0d2-489b-91e1-5b2a729fb8dd.png)


图表显示了以下批处理工作流：

1. Connect 通过使用 CICS VR 或通过比较备份文件中的 VSAM 文件，以捕获和识别文件更改。捕获的更改将发送至日志流。

1. Publisher 使用系统日志流中的数据。

1. Publisher 通过 TCP/IP 将捕获的数据更改传达至目标引擎。控制器进程守护程序对源环境和目标环境之间的通信进行身份验证。

1. 在并行处理模式下运行的 Replicator Engine 将数据拆分为工作缓存单元。

1. Worker 线程从缓存中捕获数据。

1. 数据从 Worker 线程发布到 Amazon MSK 主题。

1. [用户使用连接器将来自亚马逊 MSK 的更改应用到目标，例如亚马逊 DynamoDB、亚马逊简单存储服务 (Amazon S3) S OpenSearch ervice 或亚马逊服务。](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-connectors.html)

图表显示了以下在线工作流：

1. 在线文件中的更改是通过使用日志复制来捕获的。捕获的更改将传输到日志流。

1. Publisher 使用系统日志流中的数据。

1. Publisher 通过 TCP/IP 将捕获的数据更改传达至目标引擎。控制器进程守护程序对源环境和目标环境之间的通信进行身份验证。

1. 在并行处理模式下运行的 Replicator Engine 将数据拆分为工作缓存单元。

1. Worker 线程从缓存中捕获数据。

1. 数据从 Worker 线程发布到 Amazon MSK 主题。

1. [用户使用连接器将 Amazon MSK 中的更改应用于 DynamoDB、Ama OpenSearch zon S3 或服务等目标。](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-connectors.html)

## 工具
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-tools"></a>
+ [Amazon Managed Streaming for Apache Kafka (Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) 是一项完全托管式服务，可帮助您构建并运行使用 Apache Kafka 来处理流数据的应用程序。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。

## 操作说明
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-epics"></a>

### 准备源环境（主机）
<a name="prepare-the-source-environment-mainframe"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装 Connect CDC 4.1。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员/管理员 | 
| 设置 zFS 目录。 | 要设置 zfS 目录，请按照 Preclist 文档中 [zfS 变量目录](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-zOS/Prerequisites-for-z/OS/Security-authorization-requirements-for-z/OS/zFS-variable-directories)中的说明进行操作。控制器守护程序和 Capture/Publisher 代理配置存储在 z/OS UNIX 系统服务文件系统（称为 ZFS）中。控制器进程守护程序、Capture、Storage 和 Publisher 代理需要预定义 zFS 目录结构以存储少量文件。 | IBM 大型机开发人员/管理员 | 
| 配置 TCP/IP 端口。 | 要配置 TCP/IP 端口，请按照精确文档中 [TCP/IP 端口](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-UNIX/Prerequisites-for-UNIX/Security-authorization-requirements-for-UNIX/TCP/IP-ports)的说明进行操作。控制器守护程序需要源系统上的 TCP/IP 端口。这些端口由目标系统上的引擎引用（在那里处理捕获的更改数据）。 | IBM 大型机开发人员/管理员 | 
| 创建 z/OS 日志流。 | 要创建 [z/OS 日志流](https://www.ibm.com/docs/en/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.installation.zseries.doc/ae/cins_logstrm.html)，请按照 Precist 文档中[创建 z/OS 系统 LogStream](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-TM-EXIT-capture/Prepare-environment/Create-z/OS-system-logStreams?tocId=wy6243SXlIiEczwR8JE8WA) s 中的说明进行操作。Connect 使用日志流在迁移期间在源环境和目标环境之间捕获和流式传输数据。有关创建的 JCL 示例 z/OS LogStream，请参阅 Precist 文档中的[创建 z/OS 系统 LogStreams](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-TM-EXIT-capture/Prepare-environment/Create-z/OS-system-logStreams?tocId=wy6243SXlIiEczwR8JE8WA)。 | IBM 大型机开发人员 | 
|  IDs 为 ZFS 用户和已启动的任务进行识别和授权。 | 使用 RACF 授予对 OMVS zFS 文件系统的访问权限。有关 JCL 的示例，请参阅 Precist 文档 IDs中的[识别和授权 zfS 用户并启动任务](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-log-reader-capture/Prepare-environment/Identify-and-authorize-zFS-user-and-started-task-IDs?tocId=MrBXpFu~N0iAy~8VTrH0tQ)。 | IBM 大型机开发人员/管理员 | 
| 生成 z/OS 公钥/私钥和授权密钥文件。 | 运行 JCL，以生成密钥对。有关示例，请参阅此模式的*其他信息*部分中的*密钥对示例*。有关说明，请参阅 Pre [clist 文档中的生成 z/OS 公钥和私钥以及授权](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/Db2-z/OS/Prepare-the-environment/Generate-z/OS-public-and-private-keys-and-authorized-key-file?tocId=fceE77dWT8smZsSaE~FeMQ)密钥文件。 | IBM 大型机开发人员/管理员 | 
| 激活 CICS VSAM 日志复制并将其附加至日志流。 | 运行以下 JCL 脚本：<pre> //STEP1 EXEC PGM=IDCAMS<br /> //SYSPRINT DD SYSOUT=*<br /> //SYSIN DD *<br />   ALTER SQDATA.CICS.FILEA -<br />   LOGSTREAMID(SQDATA.VSAMCDC.LOG1) -<br />   LOGREPLICATE</pre> | IBM 大型机开发人员/管理员 | 
| 通过 FCT 激活 VSAM File Recovery 日志。 | 修改 File Control Table (FCT) 以反映以下参数更改：<pre> Configure FCT Parms<br />   CEDA ALT FILE(name) GROUP(groupname)<br />   DSNAME(data set name)<br />   RECOVERY(NONE|BACKOUTONLY|ALL)<br />   FWDRECOVLOG(NO|1–99)<br />   BACKUPTYPE(STATIC|DYNAMIC)<br />   RECOVERY PARAMETERS<br />   RECOVery : None | Backoutonly | All<br />   Fwdrecovlog : No | 1-99<br />   BAckuptype : Static | Dynamic</pre> | IBM 大型机开发人员/管理员 | 
| 为发布商代理设置 CDCz日志。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员/管理员 | 
| 激活控制器进程守护程序。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员/管理员 | 
| 激活 Publisher。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员/管理员 | 
| 激活日志流。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员/管理员 | 

### 准备目标环境 (AWS)
<a name="prepare-the-target-environment-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 精确地安装在 EC2 实例上。 | 要在适用于亚马逊的亚马逊 Linux AMI 上安装 Precission 的 Connect EC2，请按照 Precist 文档中[在 UNIX 上安装 Connect CDC (SQData)](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-UNIX) 中的说明进行操作。 | 常规 AWS | 
| 打开 TCP/IP 端口。 | 要修改安全组以包含用于入站和出站访问的控制器进程守护程序端口，请按照 Precisely 文档中的 [TCP/IP](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/Change-data-capture/Transient-storage-and-publishing/TCP/IP) 中的说明进行操作。 | 常规 AWS | 
| 创建文件目录。 | 要创建文件目录，请按照 Precisely 文档中的[准备目标应用环境](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-targets/Kafka/Prepare-target-apply-environment)中的说明进行操作。 | 常规 AWS | 
| 创建 Aply Engine 配置文件。 | 在 Apply Engine 的工作目录中创建 Apply Engine 配置文件。以下示例配置文件显示 Apache Kafka 作为目标：<pre>builtin.features=SASL_SCRAM<br />  security.protocol=SASL_SSL<br />  sasl.mechanism=SCRAM-SHA-512<br />  sasl.username=<br />  sasl.password=<br />  metadata.broker.list=</pre>有关更多信息，请参阅 Apache Kafka 文档中的[安全性](https://kafka.apache.org/documentation/#security)。 | 常规 AWS | 
| 为 Apply Engine 处理创建脚本。 | 为 Apply Engine 创建脚本以处理源数据并将源数据复制到目标。有关更多信息，请参阅 Precisely 文档中的[创建应用引擎脚本](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine/Apply-engine-script-development/Create-an-apply-engine-script)。 | 常规 AWS | 
| 运行脚本。 | 使用 `SQDPARSE` 和 `SQDENG` 命令运行脚本。有关更多信息，请参阅 Precisely 文档中的[解析 zOS 脚本](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine/Apply-engine-script-development/Parse-a-script/Parse-a-script-for-zOS)。 | 常规 AWS | 

### 验证环境
<a name="validate-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证用于 CDC 处理的 VSAM 文件与目标列表。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 常规 AWS、大型机 | 
| 验证 Connect CDC SQData 产品是否已链接。 | 运行测试作业并验证此作业的返回码是否为 0（成功）。Connect CDC SQData 应用引擎状态消息应显示活动连接消息。 | 常规 AWS、大型机 | 

### 运行并验证测试用例（批处理）
<a name="run-and-validate-test-cases-batch"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在大型机中运行批处理作业。 | 使用修改后的 JCL 运行批处理应用程序作业。在修改后的 JCL 中包括以下操作步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 常规 AWS、大型机 | 
| 检查日志流。 | 检查日志流，确认您可看到已完成的大型机批处理作业的更改数据。 | 常规 AWS、大型机 | 
| 验证源增量更改和目标表的计数。 | 要确认记录已计数，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 常规 AWS、大型机 | 

### 运行和验证测试用例（在线）
<a name="run-and-validate-test-cases-online"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 CICS 区域运行在线事务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 大型机开发人员 | 
| 检查日志流。 | 确认日志流中填充了特定记录级别更改。 | AWS 大型机开发人员 | 
| 验证目标数据库计数。 | 监视 Apply Engine 以获取记录级别计数。 | Precisely、Linux | 
| 验证目标数据库中的记录计数与数据记录。 | 查询目标数据库以验证记录计数与数据记录。 | 常规 AWS | 

## 相关资源
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-resources"></a>
+ [VSAM z/OS](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/VSAM-z/OS)（Precisely 文档）
+ [Apply Engine](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine)（Precisely 文档）
+ [复制器引擎](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Replicator-engine)（Precisely 文档）
+ [日志流](https://www.ibm.com/docs/en/zos/2.3.0?topic=logger-log-stream)（IBM 文档）

## 附加信息
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-additional"></a>

**配置文件示例**

以下日志流的示例配置文件，其中源环境为大型机，目标环境是 Amazon MSK：

```
 
  -- JOBNAME -- PASS THE SUBSCRIBER NAME
  -- REPORT  progress report will be produced after "n" (number) of Source records processed.
  
  JOBNAME VSMTOKFK;
  --REPORT EVERY 100;
  -- Change Op has been ‘I’ for insert, ‘D’ for delete , and ‘R’ for Replace. For RDS it is 'U' for update
  -- Character Encoding on z/OS is Code Page 1047, on Linux and UNIX it is Code Page 819 and on Windows, Code Page 1252
  OPTIONS
  CDCOP('I', 'U', 'D'),
  PSEUDO NULL = NO,
  USE AVRO COMPATIBLE NAMES,
  APPLICATION ENCODING SCHEME = 1208;
  
  --       SOURCE DESCRIPTIONS
  
  BEGIN GROUP VSAM_SRC;
  DESCRIPTION COBOL ../copybk/ACCOUNT AS account_file;
  END GROUP;
  
  --       TARGET DESCRIPTIONS
  
  BEGIN GROUP VSAM_TGT;
  DESCRIPTION COBOL ../copybk/ACCOUNT AS account_file;
  END GROUP;
  
  --       SOURCE DATASTORE (IP & Publisher name)
  
  DATASTORE cdc://10.81.148.4:2626/vsmcdct/VSMTOKFK
  OF VSAMCDC
  AS CDCIN
  DESCRIBED BY GROUP VSAM_SRC ACCEPT ALL;
  
  --       TARGET DATASTORE(s) - Kafka and topic name
  
  DATASTORE 'kafka:///MSKTutorialTopic/key'
  OF JSON
  AS CDCOUT
  DESCRIBED BY GROUP VSAM_TGT FOR INSERT;
  
  --       MAIN SECTION
  
  PROCESS INTO
  CDCOUT
  SELECT
  {
  SETURL(CDCOUT, 'kafka:///MSKTutorialTopic/key')
  REMAP(CDCIN, account_file, GET_RAW_RECORD(CDCIN, AFTER), GET_RAW_RECORD(CDCIN, BEFORE))
  REPLICATE(CDCOUT, account_file)
  }
  FROM CDCIN;
```

**密钥对示例**

以下是关于如何运行 JCL 生成密钥对的示例：

```
//SQDUTIL EXEC PGM=SQDUTIL //SQDPUBL DD DSN=&USER..NACL.PUBLIC, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=21200), // DISP=(,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(1,1)) //SQDPKEY DD DSN=&USER..NACL.PRIVATE, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=21200), // DISP=(,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(1,1)) //SQDPARMS DD  keygen //SYSPRINT DD SYSOUT= //SYSOUT DD SYSOUT=* //SQDLOG DD SYSOUT=* //*SQDLOG8 DD DUMMY
```

# 使用实现 CardDemo 大型机应用程序的现代化 AWS Transform
<a name="modernize-carddemo-mainframe-app"></a>

*Santosh Kumar Singh 和 Cheryl du Preez，Amazon Web Services*

## Summary
<a name="modernize-carddemo-mainframe-app-summary"></a>

[AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html) 旨在加速大型机应用程序现代化。它借助生成式人工智能简化大型机现代化流程，可以自动执行复杂的任务，例如：遗留代码分析、大型机文档、业务规则提取、将单体应用程序分解到业务领域、代码重构。因为自动执行复杂的任务（例如应用程序分析和迁移顺序规划），现代化项目得以加快推进。在分解单体应用程序时，可以 AWS Transform 智能地排列大型机应用程序转换的顺序，这可以帮助您并行转换业务功能。 AWS Transform 可以加快决策制定，提高运营灵活性和迁移效率。

此模式提供了 step-by-step一些说明，可帮助您使用 AWS Transform 来测试大型机现代化功能 [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)，这是开源大型机应用程序的示例。

## 先决条件和限制
<a name="modernize-carddemo-mainframe-app-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ [已启用](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-identity-center.html)AWS IAM Identity Center
+ 允许管理员启用的@@ [权限](https://docs.aws.amazon.com/transform/latest/userguide/security_iam_id-based-policy-examples.html#id-based-policy-examples-admin-enable-transform) AWS Transform
+ 允许管理员接受 Web 应用程序的亚马逊简单存储服务 (Amazon S3) Semple Service 连接请求的@@ [AWS Transform 权限](https://docs.aws.amazon.com/transform/latest/userguide/security_iam_id-based-policy-examples.html#id-based-policy-examples-admin-connector)

**限制**
+ AWS Transform 仅在某些版本中可用 AWS 区域。有关支持区域的完整列表，请参阅 [AWS Transform支持的区域](https://docs.aws.amazon.com/transform/latest/userguide/regions.html)。
+ AWS Transform 支持代码分析、文档生成、业务规则提取、分解以及从面向业务的通用语言 (COBOL) 重构到 Java。有关更多信息，请参阅[功能和主要特性](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-features)以及[支持的大型机应用程序转换文件类型](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-supported-files)。
+  AWS Transform对大型机转换功能设有服务配额。有关更多信息，请参阅 [AWS Transform配额](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html)。
+ 要在共享工作区上进行协作，所有用户都必须是与您 AWS IAM Identity Center 的 AWS Transform Web 应用程序实例关联的相同实例的注册用户。
+ Amazon S3 存储桶和 AWS Transform 必须位于相同的 AWS 账户 区域中。

## 架构
<a name="modernize-carddemo-mainframe-app-architecture"></a>

下图显示了此模式的构建架构。

![\[AWS Transform 可助力存储在 Amazon S3 存储桶中的大型机应用程序实现现代化。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/0e539474-b733-452d-b0fb-6b3f4cbd5075/images/75be6d78-5b43-448c-ad07-bf74b9ae14ad.png)


下图显示了如下工作流：

1. AWS Transform 使用连接器访问存储在 Amazon S3 存储桶中的 CardDemo 大型机应用程序。

1. AWS Transform AWS IAM Identity Center 用于管理用户访问和身份验证。此系统实施了多层安全控制措施，涵盖身份验证、授权、加密及访问管理，以在处理过程中保护代码和构件的安全。用户通过聊天界面与 AWS Transform 代理互动。您可以用英语向人工智能代理发出有关特定任务的指令。有关更多信息，请参阅 AWS Transform 文档[中的人为循环 (HITL)](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-hitl)。

1. 人工智能代理解释用户的指令，创建作业计划，将作业划分为多个可执行的任务，然后自动采取相应行动。用户可以查看和批准转换。转换任务包括如下事项：
   + **代码分析** — AWS Transform 分析每个文件中的代码，了解文件名、文件类型、代码行及其路径等详细信息。代理分析源代码、运行分类、创建依赖关系映射并确定任何缺失的构件。同时会识别出重复的组件。
   + **文档生成**-为大型机应用程序 AWS Transform 生成文档。通过分析代码，它可以自动创建应用程序的详细文档，包括对遗留系统中存在的业务逻辑、流程、集成和依赖关系的描述。
   + **业务逻辑提取** — AWS Transform 分析 COBOL 程序以记录其核心业务逻辑，从而帮助您了解基本的业务逻辑。
   + **代码分解** — 将代码分 AWS Transform 解为考虑程序和组件之间依赖关系的域。将相关文件和程序归入同一域中，既可提升组织效率，又能确保在将应用程序拆解为更小组件时保持其逻辑结构的完整性。
   + **迁移浪潮规划** — 根据您在分解阶段创建的域， AWS Transform 生成带有建议现代化顺序的迁移浪潮计划。
   + **代码重构** — 将所有或选定域文件中的代码 AWS Transform 重构为 Java 代码。此步骤的目标是保留应用程序的关键业务逻辑，同时将其重构为经过云优化的现代化 Java 应用程序。

1. AWS Transform 将重构后的代码、生成的文档、关联的项目和运行时库存储在您的 Amazon S3 存储桶中。您可执行以下操作：
   + 访问 Amazon S3 存储桶中的运行时文件夹。
   + 按照文档中的 “构建和部署[现代化应用程序重构后” 来构建和部署应用程序](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow-build-deploy.html)。 AWS Transform 
   + 通过聊天界面，索取并下载样本 AWS CloudFormation AWS Cloud Development Kit (AWS CDK)、或 Hashicorp Terraform 模板。这些模板可以帮助您部署支持重构后的应用程序所需的 AWS 资源。
   + 使用 [Reforge](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-refactor-code-reforge) 通过使用大型语言模型来提高重构代码的质量 ()。LLMs在将 COBOL 转换为 Java 代码时，重构引擎保留了 COBOL 的功能等效性。Reforge 是一个可选步骤，可在转换后执行。此步骤用于重构代码 LLMs ，使其与原生 Java 非常相似，这样可以提高可读性和可维护性。Reforge 还会添加易于理解的注释，帮助您理解代码，并采用现代编码模式和最佳实践。

## 工具
<a name="modernize-carddemo-mainframe-app-tools"></a>

**AWS 服务**
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)使用 agentic AI 来帮助您加快传统工作负载（例如.NET、大型机和工作负载）的现代化。 VMware 
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)帮助您集中管理对您的应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**代码存储库 **

您可以将开源 AWS [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)大型机应用程序用作示例应用程序，开始大型机现代化。

## 最佳实践
<a name="modernize-carddemo-mainframe-app-best-practices"></a>
+ **从小**处着手 — 从不太复杂的小代码（15,000—20,000 行代码）开始，以了解如何 AWS Transform 分析和转换大型机应用程序。
+ **与人类专业知识相结合** — AWS Transform 用作加速器，同时应用人类专业知识以获得最佳结果。
+ **彻底审查和测试** – 务必仔细审查转换后的代码，并运行全面测试以验证转换后功能的等效性。
+ **提供反馈**-要提供反馈和改进建议，请使用中的**发送反馈**按钮 AWS 管理控制台 或使用创建案例[AWS 支持](https://support.console.aws.amazon.com/)。有关更多信息，请参阅[创建支持案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html)。您的意见对于改进服务和未来的产品开发非常宝贵。

## 操作说明
<a name="modernize-carddemo-mainframe-app-epics"></a>

### 准备大型机应用程序
<a name="prepare-the-mainframe-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建存储桶。 | 在启用该功能的相同 AWS 账户 区域中创建 Amazon S3 存储桶。 AWS Transform 您可以使用此存储桶存储大型机应用程序代码，并 AWS Transform 使用此存储桶存储生成的文档、重构后的代码以及与转换相关的其他文件。有关说明，请参阅 Amazon S3 文档中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。 | 常规 AWS | 
| 准备大型机应用程序 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | 应用程序开发者、 DevOps 工程师 | 

### 配置 IAM 身份中心和 AWS Transform
<a name="configure-sso-and-trn"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将用户添加到 IAM Identity Center。 | 将您的潜在用户添加到 IAM Identity Center。按照 AWS Transform 文档中在 [IAM 身份中心添加用户中的](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-management.html#transform-add-idc-users)说明进行操作。 | AWS 管理员 | 
| 启用 AWS Transform 和添加用户。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | AWS 管理员 | 
| 配置用户对 AWS Transform Web 应用程序的访问权限。 | 每个用户都必须接受访问该 AWS Transform Web 应用程序的邀请。按照 AWS Transform 文档中[接受邀请中的](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-onboarding.html#transform-user-invitation)说明进行操作。 | 应用程序开发人员、应用程序所有者 | 
| 登录 AWS Transform Web 应用程序。 | 按照[登录中的说明进行](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-onboarding.html#transform-user-signin)操作 AWS Transform。 | 应用程序开发人员、应用程序所有者 | 
| 设置工作区。 | 设置一个用户可以在 AWS Transform Web 应用程序中进行协作的工作区。按照 AWS Transform 文档中[启动项目中的](https://docs.aws.amazon.com/transform/latest/userguide/transform-environment.html#start-workflow)说明进行操作。 | AWS 管理员 | 

### 转换大型机应用程序
<a name="transform-the-mainframe-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建转换作业。 | 创建转型任务以实现 CardDemo 大型机应用程序的现代化。有关说明，请参阅 AWS Transform 文档中的[创建和启动作业](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-start-job)。当要求你在 AWS Transform 聊天界面中设置目标时，选择**执行大型机现代化（IBM z/OS 到 AWS）**，然后选择**分析代码、生成技术文档、业务逻辑、分解代码、规划迁移顺序和将代码转换**为 Java。 | 应用程序开发人员、应用程序所有者 | 
| 设置连接器。 | 建立指向包含 CardDemo 大型机应用程序的 Amazon S3 存储桶的连接器。此连接器 AWS Transform 允许访问存储桶中的资源并执行连续的转换功能。有关说明，请参阅 AWS Transform 文档[中的设置连接器](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector)。 | AWS 管理员 | 
| 执行代码分析。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关更多信息，请参阅 AWS Transform 文档中的[代码分析](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-code-analysis)。 | 应用程序开发人员、应用程序所有者 | 
| 生成技术文档。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关更多信息，请参阅[文档中的生成技术](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-generate-documentation) AWS Transform 文档。 | 应用程序开发人员、应用程序所有者 | 
| 提取业务逻辑。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关更多信息，请参阅 AWS Transform 文档中的[提取业务逻辑](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-extract-business-logic)。 | 应用程序开发人员、应用程序所有者 | 
| 分解代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关分解和种子的更多信息，请参阅文档中的[AWS Transform 分解](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-decomposition)。 | 应用程序开发人员、应用程序所有者 | 
| 规划迁移过程 | 规划 CardDemo 应用程序的迁移浪潮。按照 AWS Transform 文档中[迁移浪潮规划](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-wave-planning)中的说明查看和编辑波浪计划。 | 应用程序开发人员、应用程序所有者 | 
| 重构代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | 应用程序开发人员、应用程序所有者 | 
| （可选）使用 Reforge 改进 Java 代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关更多信息，请参阅 AWS Transform 文档中的 [Reforge](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-refactor-code-reforge)。 | 应用程序开发人员、应用程序所有者 | 
| 简化部署。 | AWS Transform 可以为 CloudFormation、 AWS CDK或 Terraform 提供基础设施即代码 (IaC) 模板。这些模板可帮助部署核心组件，包括计算、数据库、存储和安全资源。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)有关更多信息，请参阅 AWS Transform 文档中的[部署功能](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-features-deployment)。 | 应用程序开发人员、应用程序所有者 | 

## 问题排查
<a name="modernize-carddemo-mainframe-app-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 您无法在 AWS Transform Web 应用程序中查看源代码或生成的文档。 | 在 Amazon S3 存储桶的 CORS 权限中添加一项策略以允许其 AWS Transform 作为源。有关更多信息，请参阅 AWS Transform 文档[中的 S3 存储桶 CORS 权限](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector-s3)。 | 

## 相关资源
<a name="modernize-carddemo-mainframe-app-resources"></a>

**AWS 文档**
+ [大型机应用程序的转型](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html)（AWS Transform 文档）

**其他 AWS 资源**
+ [使用 AI 代理加速您的大型机现代化之旅 AWS Transform](https://aws.amazon.com/blogs/migration-and-modernization/accelerate-your-mainframe-modernization-journey-using-ai-agents-with-aws-transform/)（AWS 博客文章）
+ [AWS Transform FAQs](https://aws.amazon.com/transform/faq/)
+ [AWS IAM Identity Center FAQs](https://aws.amazon.com/iam/identity-center/faqs/)

**视频和教程**
+ [Amazon Q 开发者简介：转型](https://explore.skillbuilder.aws/learn/courses/21893/aws-flash-introduction-to-amazon-q-developer-transform)（AWS 技能生成器）
+ [AWS re: Invent 2024-使用 Amazon Q Developer 更快地实现大型机应用程序的现代化](https://www.youtube.com/watch?v=pSi0XtYfY4o) () YouTube
+ [AWS re: Invent 2024-自动化迁移和现代化](https://www.youtube.com/watch?v=9FjxnEoH5wg)以加快转型 () YouTube
+ [AWS re: Invent 2024-丰田利用一代人工智能推动创新并提高运营效率](https://www.youtube.com/watch?v=_NXc1MJenw4) () YouTube

**注意**  
AWS Transform 以前被称为 *Amazon Q 大型机开发人员转换*。

# 使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署
<a name="modernize-mainframe-app-transform-terraform"></a>

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

## Summary
<a name="modernize-mainframe-app-transform-terraform-summary"></a>

[AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)可以加速.NET、大型机和 VMware 工作负载的大规模现代化。它部署了专门的 AI 代理，可以自动执行评估、代码分析、重构、分解、依赖关系映射、验证、转型规划等复杂的任务。此模式演示了如何使用对大型机应用程序 AWS Transform 进行现代化改造，然后使用 [Hashic](https://developer.hashicorp.com/terraform/intro) orp Terraform 将其部署到 AWS 基础架构。这些 step-by-step说明可帮助您将开源大型机应用程序示例，从 COBOL 转换为[CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)现代 Java 应用程序。

## 先决条件和限制
<a name="modernize-mainframe-app-transform-terraform-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 创建 AWS 资源和部署应用程序的管理权限
+ [已配置](https://developer.hashicorp.com/terraform/tutorials/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) Terraform 版本 1.5.7 或更高版本
+ AWS [Terraform 的提供者，已配置](https://registry.terraform.io/providers/hashicorp/aws/2.36.0/docs#authentication)
+ [已启用](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-identity-center.html)AWS IAM Identity Center
+ [已启用](https://docs.aws.amazon.com/transform/latest/userguide/getting-started.html)AWS Transform
+ [已加入 AWS Transform 工作空间的](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-management.html)用户，其参与者角色可以运行转换作业

**限制**
+ AWS Transform 仅在某些版本中可用 AWS 区域。有关支持区域的完整列表，请参阅 [AWS Transform支持的区域](https://docs.aws.amazon.com/transform/latest/userguide/regions.html)。
+  AWS Transform对大型机转换功能设有服务配额。有关更多信息，请参阅 [AWS Transform配额](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html)。
+ 要在共享工作区上进行协作，所有用户都必须是与您 AWS IAM Identity Center 的 AWS Transform Web 应用程序实例关联的相同实例的注册用户。
+ 亚马逊简单存储服务 (Amazon S3) Semple Storage Service 存储桶 AWS Transform 必须位于 AWS 账户 相同的区域中。

## 架构
<a name="modernize-mainframe-app-transform-terraform-architecture"></a>

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

![\[AWS Transform 通过 Terraform 实现大型机应用程序和部署现代化。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/78bc1e6e-cd3d-4c6d-ae4b-0675a6898fd9/images/332ccf35-f55a-449e-a05d-7e321b3867b7.png)


下图显示了如下工作流：

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

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

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

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

1. VSAM 文件上传到 Amazon EC2，然后从 Amazon EC2 迁移到 Amazon RDS 数据库。

## 工具
<a name="modernize-mainframe-app-transform-terraform-tools"></a>

**AWS 服务**
+ [Amazon Elastic Compute Cloud（Amazon EC2）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。在此模式中，SQL Server 失效转移集群实例安装在 Amazon EC2 实例上。
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)帮助您集中管理对您的应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)可帮助您在 AWS 云中设置、操作和扩展关系数据库。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 可帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 进行的 API 调用，以便以编程方式检索此密钥。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)使用 agentic AI 来帮助您加快传统工作负载（例如.NET、大型机和工作负载）的现代化。 VMware 

**其他工具**
+ [Apache Maven](https://maven.apache.org/) 是一款适用于 Java 项目的开源软件项目管理和构建自动化工具。
+ [Apache Tomcat](https://tomcat.apache.org/) 是一款开源 Servlet 容器和用于 Java 代码的 Web 服务器。
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一款基础设施即代码（IaC）工具，可帮助您使用代码来预调配和管理云基础设施和资源。
+ [Spring Boot](https://spring.io/projects/spring-boot) 是一个开源框架，以 Java 的 Spring 框架为基础构建。

**代码存储库**

此模式的代码可在 GitHub [大型机转换 E2E](https://github.com/aws-samples/sample-mainframe-transformation-e2e) 存储库中找到。此模式使用开源 AWS [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)大型机应用程序作为示例应用程序。

## 最佳实践
<a name="modernize-mainframe-app-transform-terraform-best-practices"></a>
+ 分配要迁移的代码和资源的全部所有权。
+ 先开发并测试概念验证，再全面迁移。
+ 确保得到所有利益相关者的承诺。
+ 建立清晰的沟通渠道。
+ 定义并记录最简可行产品（MVP）要求。
+ 设定明确的成功标准。

## 操作说明
<a name="modernize-mainframe-app-transform-terraform-epics"></a>

### 准备并上传大型机应用程序代码
<a name="prepare-and-upload-the-mainframe-application-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建存储桶。 | 在已启用的相同 AWS 账户 区域中创建 Amazon S3 存储桶。 AWS Transform 您可以使用此存储桶存储构建和运行应用程序所需的大型机应用程序代码、数据和其他脚本。 AWS Transform 使用此存储桶存储重构后的代码和其他与转换相关的文件。有关说明，请参阅 Amazon S3 文档中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。 | 常规 AWS、AWS 管理员 | 
| 设置存储桶的 CORS 权限。 | 在设置存储桶以进行 AWS Transform 访问时，您需要为存储桶配置跨源资源共享 (CORS)。如果设置不正确，可能无法使用 AWS Transform的内联查看或文件比较功能。有关如何为存储桶配置 CORS 的说明，请参阅 Amazon S3 存储桶中的[使用跨域资源共享](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)。有关策略，请参阅 AWS Transform 文档[中的 S3 存储桶 CORS 权限](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector-s3)。 | 常规 AWS、AWS 管理员 | 
| 准备大型机应用程序代码示例。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 常规 AWS，应用程序开发人员 | 

### 转换大型机应用程序
<a name="transform-the-mainframe-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置作 AWS Transform 业。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、应用程序所有者 | 
| 设置连接器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、应用程序所有者 | 
| 转换代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、应用程序所有者 | 

### 通过 Terraform 部署基础设施
<a name="deploy-the-infrastructure-through-terraform"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更新模板。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html)对于生产或类似于生产的环境，请配置其他安全组件。例如，启用[针对应用程序负载均衡器的AWS WAF 保护](https://aws.amazon.com/about-aws/whats-new/2024/02/aws-application-load-balancer-one-click-waf-integrations/)。 | 常规 AWS、AWS 管理员 | 
| 部署基础设施。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | Terraform | 

### 在 Amazon EC2 实例上安装和配置 Apache Tomcat
<a name="install-and-configure-apache-tomcat-on-the-ec2-instance"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装所需软件： | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 
| 验证软件安装。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 

### 编译并打包完成现代化的应用程序代码
<a name="compile-and-package-the-modernized-application-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载并解压生成的代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 
| 构建现代化的应用程序。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 

### 迁移数据库
<a name="migrate-the-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建数据库和 JICS 架构。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 
| 验证数据库创建。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 
| 将数据迁移到 JICS 数据库。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 

### 安装现代化的应用程序
<a name="install-the-modernized-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon EC2 实例上安装现代化的应用程序 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、云架构师 | 
| 重新启动 Tomcat 服务器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、云架构师 | 
| 迁移 VSAM 数据集。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、迁移工程师 | 
| 更新 Groovy 脚本中的参数。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员 | 

### 测试应用程序
<a name="test-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试现代化的应用程序。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、测试工程师 | 
| 验证批处理脚本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 应用程序开发人员、测试工程师 | 

### 清理
<a name="clean-up"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备删除基础设施。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 常规 AWS | 
| 删除基础设施。 | 这些步骤将永久删除您的资源。在继续之前，请确保您已备份所有重要数据。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 常规 AWS | 

## 问题排查
<a name="modernize-mainframe-app-transform-terraform-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| Terraform 身份验证 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 
| Tomcat 相关错误 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 
| URL 名称未加载 | 确保在入站规则中，应用程序负载均衡器安全组将您的 IP 地址作为源。 | 
| Tomcat 日志中存在身份验证问题 | 确认中的数据库密钥密码 AWS Secrets Manager 和 **server.xml** 中的密码匹配。 | 

## 相关资源
<a name="modernize-mainframe-app-transform-terraform-resources"></a>

**AWS 规范性指导**
+ [使用 AWS Transform 实现 CardDemo 大型机应用程序的现代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)

**AWS 服务文档**
+ [AWS Blu Age Blusam 管理控制台](https://docs.aws.amazon.com/m2/latest/userguide/ba-shared-bac-userguide.html)
+ [AWS Blu Age Runtime（非托管）的基础架构设置要求](https://docs.aws.amazon.com/m2/latest/userguide/ba-infrastructure-setup.html)
+ [入门 AWS Blu Age 运行时](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-setup-onboard.html)
+ [大型机应用程序的现代化](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/transform-app-mainframe.html)
+ [为 AWS Blu Age Runtime 设置配置](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config.html)

**AWS 博客文章**
+ [使用 AI 代理加速您的大型机现代化之旅 AWS Transform](https://aws.amazon.com/blogs/migration-and-modernization/accelerate-your-mainframe-modernization-journey-using-ai-agents-with-aws-transform/)

# 使用 Rocket Enterprise Server 和 L PageCenter RS X 实现大型机输出管理的现代化 AWS
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx"></a>

*Shubham Roy，Amazon Web Services*

*Abraham Rondon，Micro Focus*

*Guy Tucker、Levi、Ray 和 Shoup Inc*

## Summary
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-summary"></a>

通过实现大型机输出管理的现代化，您可以通过 Amazon Web Services (AWS) 云原生技术节省成本，减轻维护传统系统的技术负担， DevOps 并提高弹性和灵活性。此模式将展示如何在 Amazon Web Services Cloud 上实现关键业务大型机输出管理工作负载的现代化。该模式使用[火箭企业服务器](https://www.rocketsoftware.com/en-us/products/enterprise-suite/enterprise-server)作为现代化大型机应用程序的运行时，Levi、Ray & Shoup, Inc.（LRS） VPSX/MFI （Micro Focus Interface）作为打印服务器，LRS PageCenter X作为存档服务器。LRS PageCenter X 提供输出管理解决方案，用于查看、索引、搜索、存档和保护对业务输出的访问。

该模式基于[更换平台](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)大型机现代化方法。大型机应用程序由 [AWS 大型机现代化](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)迁移到亚马逊弹性计算云 (Ama EC2 zon) 上。大型机输出管理工作负载迁移到亚马逊 EC2，大型机数据库（例如 IBM Db2 for）与适用于 Microsoft 的 AWS Directory z/OS, is migrated to Amazon Relational Database Service (Amazon RDS). The LRS Directory Integration Server (LRS/DIS Active Directory 的 AWS Directory 配合使用，用于输出管理工作流程的身份验证和授权。

## 先决条件和限制
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 大型机输出管理工作负载。
+ 有关如何重建和交付在 Rocket Enterprise Server 上运行的大型机应用程序的基础知识。有关更多信息，请参阅 Rocket Software 文档中的 [Rocket Enterprise Server](https://www.rocketsoftware.com/sites/default/files/resource_files/enterprise-server.pdf) 数据表。
+ LRS 云打印解决方案和概念的基础知识。有关详细信息，请参阅 LRS 文档中的*输出现代化*。
+ Rocket Enterprise Server 软件和许可证。有关更多信息，请联系 [Rocket Software](https://www.rocketsoftware.com/products/enterprise-suite/request-contact)。
+ LRS VPSX/MFI, LRS PageCenterX, LRS/Queue, and LRS/DIS 软件和许可证。有关更多信息，[请联系 LRS](https://www.lrsoutputmanagement.com/about-us/contact-us/)。您必须提供将安装 LRS 产品的 EC2 实例的主机名。


| 
| 
| 注意：有关大型机输出管理工作负载配置注意事项的更多信息，请参阅此模式[其他信息](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)部分中的*注意事项*。 | 
| --- |

**产品版本**
+ [Rocket Enterprise Server 10.0](https://www.rocketsoftware.com/products/enterprise-suite/enterprise-test-server)
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/modernization-products/)
+ [LRS PageCenter X V1R3](https://www.lrsoutputmanagement.com/products/content-management/pagecenterx-for-open-systems/) 或更高版本

## 架构
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-architecture"></a>

**源技术堆栈**
+ 操作系统 - IBM z/OS
+ 编程语言 - 面向业务的通用语言（COBOL）、作业控制语言（JCL）和客户信息控制系统（CICS）
+ 数据库 - IBM Db2 for z/OS、IBM Information Management System (IMS) 数据库和虚拟存储访问方法 (VSAM)
+ 安全 — 资源访问控制设施 (RACF)、适用于 z/OS 的 CA 绝密和访问控制设施 2 () ACF2
+ 打印和存档解决方案 — IBM 大型机 z/OS 输出和打印产品（适用于 z/OS、LRS 和 CA Deliver 的 IBM Infoprint 服务器）和归档解决方案（CA Deliver、ASG Mobius 或 CA Bundle）

**源架构**

下图显示了大型机输出管理工作负载的典型当前状态架构。

![\[大型机输出过程分为七步。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/d170394a-c9b2-43c0-a3d4-677b5f7c2473.png)


下图显示了如下工作流：

1. 用户在基于 COBOL 编写的 IBM CICS 应用程序构建的互动系统 (SoE) 上执行业务事务。

1. SoE 调用大型机服务，该服务将业务交易数据记录在 system-of-records (SoR) 数据库中，例如适用于 z/OS 的 IBM Db2。

1. SoR 保留来自 SoE 的业务数据。

1. 批处理作业调度程序启动批处理作业以生成打印输出。

1. 批处理作业从数据库中提取数据。并根据业务需求对数据进行格式化，然后生成业务输出（例如账单、身份证或贷款对账单）。最后，批处理作业将路由输出至输出管理，以便根据业务需求对输出进行格式化、发布和存储。

1. 输出管理接收批处理作业的输出。输出管理索引、排列输出并将其发布到输出管理系统中的指定目的地，例如 LRS PageCenter X 解决方案（如本模式所示）或 CA View。

1. 用户可以查看、搜索和检索输出。

**目标技术堆栈**
+ 操作系统 — 在亚马逊上运行的 Windows 服务器 EC2
+ 计算 — 亚马逊 EC2
+ 存储 — 亚马逊 Elastic Block Store (亚马逊 EBS) 和 FSx 适用于 Windows 文件服务器的亚马逊 Elastic Block Store
+ 编程语言 - COBOL、JCL 和 CICS
+ 数据库 - Amazon RDS
+ 安全性 - AWS 托管的 Microsoft AD
+ 打印和存档 — AWS 上的 LRS 打印 (VPSX) 和存档 (PageCenterX) 解决方案
+ 大型机运行时环境 - Rocket Enterprise Server

**目标架构**

下方图表显示了部署在 Amazon Web Services Cloud 中的大型机输出管理工作负载的架构。

![\[七步构建批处理应用程序和输出管理的目标架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/3e25ab03-bf3a-4fea-b5eb-38cea9e50138.png)


下图显示了如下工作流：

1. 批处理作业调度程序启动批处理作业来创建输出，例如账单、身份证或贷款报表。

1. 大型机批处理作业（[平台改编为 Amazon EC2](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)）使用 Rocket Enterprise Server 运行时从应用程序数据库中提取数据，对数据应用业务逻辑并格式化数据。然后，它使用 [Rocket Software 打印机退出模块](https://www.microfocus.com/documentation/enterprise-developer/ed100/ED-Eclipse/HCOMCMJCLOU020.html)将数据发送到输出目的地（OpenText Micro Focus 文档）。

1. 应用程序数据库（在 Amazon RDS 上运行的 SoR）保留打印输出的数据。

1. LRS VPSX/MFI 打印解决方案部署在亚马逊上 EC2，其操作数据存储在 Amazon EBS 中。LRS VPSX/MFI 使用TCP/IP-based LRS/Queue传输代理通过 Rocket Software JES Print Exit API 收集输出数据。

   LRS VPSX/MFI 会进行数据预处理，例如 EBCDIC 到 ASCII 的转换。它还可以执行更复杂的任务，包括将大型机专用的数据流（例如 IBM 高级功能演示 (AFP) 和 Xerox 行条件数据流 (LCDS)）转换为更常见的查看和打印数据流（例如打印机命令语言 (PCL) 和 PDF）。

   在 LRS PageCenter X 的维护窗口内，LRS 会 VPSX/MFI 保留输出队列并用作输出队列的备份。LRS 使用该协议 VPSX/MFI 连接并向 LRS PageCenter X 发送输出。 LRS/Queue LRS/Queue 交换任务的准备情况和完成情况，以帮助确保进行数据传输。

   **备注**：

   有关从 Rocket Software Print Exit 传递到 LRS/Queue LRS VPSX/MFI 支持的大型机批处理机制的*打印数据的更多信息，请参阅 “[其他信息](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)” 部分中的打印数据捕获*。

   LRS VPSX/MFI 可以在打印机队列级别执行运行状况检查。有关更多信息，请参阅此模式的[其他信息](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)部分中的*打印机队列运行状况检查*。

1. LRS PageCenter X 输出管理解决方案部署在亚马逊上 EC2，其操作数据存储在亚马 FSx 逊 Windows 文件服务器中。LRS PageCenter X 提供了一个中央报告管理系统，其中包含导入 LRS PageCenter X 的所有文件以及所有能够访问这些文件的用户。用户可以查看特定文件内容或跨多个文件执行搜索以查找匹配条件。

   该 LRS/NetX 组件是一个多线程 Web 应用程序服务器，它为 LRS PageCenter X 应用程序和其他 LRS 应用程序提供了一个通用的运行时环境。 LRS/Web Connect 组件安装在您的 Web 服务器上，它提供了从 Web 服务器到 LRS/NetX Web 应用程序服务器的连接器。

1. LRS PageCenter X 为文件系统对象提供存储。LRS PageCenter X 的操作数据存储在 Amazon for Window FSx s 文件服务器中。

1. 输出管理身份验证和授权由 AWS 托管 Microsoft AD 和 LRS/DIS 执行。

**注意**  
目标解决方案通常不需要更改应用程序来适应大型机格式化语言，例如 IBM AFP 或 Xerox LCDS。

**AWS 基础设施架构**

下图显示了适用于大型机输出管理工作负载的高可用性且安全的 AWS 基础设施架构。

![\[采用七步工作流的多可用区 AWS 基础设施。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/8d8aa995-b576-4ecd-8a7c-5f566740a515.png)


下图显示了如下工作流：

1. 批处理调度器启动批处理流程，并部署在 Amazon EC2 上的多个[可用区以实现高可用](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)性 (HA)。
**注意**  
此模式不涵盖批处理调度程序的实施。有关实施的详细信息，请参阅调度程序的软件供应商文档。

1. 大型机批处理作业（用 JCL 或 COBOL 等编程语言编写）使用核心业务逻辑来处理和生成打印输出，例如账单、身份证和贷款对账单。批处理任务部署在 Amazon 上， EC2 跨两个可用区进行高可用性。它使用 Rocket Software Print Exit API 将打印输出路由到 LRS VPSX/MFI 进行数据预处理。

1. LRS VPSX/MFI 打印服务器部署在 Amazon 上， EC2 跨两个可用区，用于 HA（主用-备用冗余对）。它使用 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) 作为操作数据存储。Network Load Balancer 对 LRS VPSX/MFI EC2 实例执行运行状况检查。如果活动实例处于运行状况不佳状态，负载均衡器会将流量路由到其他可用区中的热备用服务器实例。在每个实例中，打印请求都保存在本地的 LRS Job Queue 中。 EC2 如果发生故障，必须重新启动故障实例，然后 LRS 服务才能继续处理打印请求。
**注意**  
LRS 还 VPSX/MFI 可以在打印机队列级别执行运行状况检查。有关更多信息，请参阅此模式的[其他信息](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)部分中的*打印机队列运行状况检查*。

1. LRS PageCenter X 输出管理部署在 Amazon 上， EC2 跨两个可用区，用于 HA（活动-备用冗余对）。它使用[ FSx 适用于 Windows 的 Amazon 文件服务器](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)作为操作数据存储。如果活动实例处于不健康状态，则负载均衡器会对 LRS PageCenter X EC2 实例执行运行状况检查，并将流量路由到其他可用区的备用实例。

1. N [etwork Load Balanc](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) er 提供 DNS 名称以将 LRS VPSX/MFI 服务器与 L PageCenter RS X 集成
**注意**  
LRS PageCenter X 支持第 4 层负载均衡器。

1. LRS PageCenter X 使用 Amazon FSx for Windows File Server 作为操作数据存储，部署在两个可用区中以实现 HA。LRS PageCenter X 只能识别文件共享中的文件，而不能理解外部数据库中的文件。

1. [AWS 托管 Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) LRS/DIS 与一起用于执行输出管理工作流程身份验证和授权。有关更多信息，请参阅[其他信息](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)部分中的*打印输出身份验证和授权*。

## 工具
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-tools"></a>

**Amazon Web Services**
+ [适用于 Microsoft Active Directory 的 AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) 允许目录感知工作负载和 AWS 资源使用 Amazon Web Services Cloud 中的 Microsoft Active Directory。
+ [亚马逊弹性区块存储 (Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)) Block Store 提供块级存储卷，用于亚马逊弹性计算云 (Amazon) 实例。 EC2
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [弹性负载均衡(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) 将传入的应用程序或网络流量分配到多个目标。例如，您可以在一个或多个可用区的 Amazon EC2 实例、容器和 IP 地址之间分配流量。此模式使用网络负载均衡器。
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway) 提供的文件系统支持行业标准的连接协议，并可在 AWS 区域之间实现高可用性和复制。此模式使用 FSx 适用于 Windows 文件服务器的 Amazon。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。

**其他工具**
+ [LRS PageCenter X](https://www.lrsoutputmanagement.com/products/content-management/pagecenterx-for-open-systems/) 软件提供可扩展的文档和报告内容管理解决方案，通过自动索引、加密和高级搜索功能，帮助用户从信息中获得最大价值。
+ 由 [LRS 和 Rocket Software 共同开发的 LRS VPSX/MFI （Micro Focus Interface）](https://www.lrsoutputmanagement.com/products/modernization-products/)捕获火箭软件 JES 线轴的输出，并将其可靠地传送到指定的打印目的地。
+ LRS/Queue is a transmission agent that’s TCP/IP based. LRS VPSX/MFI uses LRS/Queue通过 Rocket Software JES 打印出口编程接口收集或捕获打印数据。
+ LRS 目录集成服务器 (LRS/DIS) 用于打印工作流期间的身份验证和授权。
+ [Rocket Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed80/ES-WIN/GUID-F7D8FD6E-BDE0-4169-8D8C-96DDFFF6B495.html) 是大型机应用程序的应用程序部署环境。它为使用任何版本的 Rocket Enterprise Developer 迁移或创建的大型机应用程序提供运行时系统环境。

## 操作说明
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-epics"></a>

### 设置 Rocket 运行时系统并部署大型机批处理应用程序
<a name="set-up-the-rocket-runtime-and-deploy-a-mainframe-batch-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置运行时系统并部署演示应用程序。 | 要在亚马逊上设置 Rocket Enterprise Server EC2 并部署 Rocket 软件 BankDemo 演示应用程序，请按照 AWS 大型机现代化[用户](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)指南中的说明进行操作。该 BankDemo 应用程序是一个大型机批处理应用程序，用于创建然后启动打印输出。 | 云架构师 | 

### 在亚马逊上设置 LRS 打印服务器 EC2
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建亚马逊 EC2 Windows 实例。 | 要启动亚马逊 EC2 Windows 实例，请按照亚马逊 EC2 文档中[启动亚马逊 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)中的说明进行操作。使用与 LRS 产品许可证相同的主机名。您的实例必须满足 LRS VPSX/MFI 的以下硬件和软件要求：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html)上述硬件和软件要求适用于小型打印机队列（大约 500-1000 台）。要获取完整的要求，请咨询您的 LRS 和 AWS 联系人。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 在 EC2 实例 VPSX/MFI 上安装 LRS。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 安装 LRS/队列。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 安装 LRS/DIS。 | 该 LRS/DIS 产品通常包含在 LRS VPSX 安装中。但是，如果 LRS/DIS 未与 LRS VPSX 一起安装，请使用以下步骤进行安装：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建目标组。 | 遵循[为您的网络负载均衡器创建目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)中的说明创建目标组。创建目标组时，请将 LRS VPSX/MFI EC2 实例注册为目标：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建网络负载均衡器。 | 要创建网络负载均衡器，请遵循[弹性负载均衡器文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)中的说明进行操作。您的网络负载均衡器将流量从 Rocket Enterprise Server 路由到 LRS VPSX/MFI EC2 实例。创建网络负载均衡器时，在**侦听器和路由**页面上选择以下值：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 将 Rocket Enterprise 服务器与 LRS V LRS/Queue PSX/MFI 集成
<a name="integrate-rocket-enterprise-server-with-lrs-queue-and-lrs-vpsx-mfi"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 Rocket 企业服务器进行 LRS/Queue 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 配置 Rocket 企业服务器以实现 LRS VPSX/MFI 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 设置打印队列和打印用户
<a name="set-up-the-print-queue-and-the-print-users"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Rocket Software Print Exit 模块与 Rocket Enterprise Server 批量打印机服务器执行进程关联。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 在 LRS 中创建打印输出队列 VPSX/MFI 并将其与 L PageCenter RS X 集成 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 在 LRS VPSX/MFI 中创建打印用户。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 在亚马逊上设置 LRS PageCenter X 服务器 EC2
<a name="set-up-an-lrs-pagecenterx-server-on-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建亚马逊 EC2 Windows 实例。 | 按照亚马逊 EC2 文档中的[步骤 1：启动实例中的说明启动](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)亚马逊 EC2 Windows 实例。使用与 LRS 产品许可证相同的主机名。您的实例必须满足 LRS PageCenter X 的以下硬件和软件要求：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html)上述硬件和软件要求适用于小型打印机队列（大约 500-1000 台）。要获取完整的要求，请咨询您的 LRS 和 AWS 联系人。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 在 EC2 实例上安装 LRS PageCenter X。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 安装 LRS/DIS。 | 该 LRS/DIS 产品通常包含在 LRS VPSX 安装中。但是，如果 LRS/DIS 未与 LRS VPSX 一起安装，请使用以下步骤进行安装：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建目标组。 | 遵循[为您的网络负载均衡器创建目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)中的说明创建目标组。创建目标组时，将 LRS PageCenter X EC2 实例注册为目标：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建网络负载均衡器。 | 要创建网络负载均衡器，请遵循[弹性负载均衡器文档](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)中的说明进行操作。您的 Network Load Balancer 将流量从 LRS 路由 VPSX/MFI 到 LRS PageCenter X 实例 EC2 。创建网络负载均衡器时，在**侦听器和路由**页面上选择以下值：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 在 LRS X 中设置输出管理功能 PageCenter
<a name="set-up-output-management-features-in-lrs-pagecenterx"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 LRS PageCenter X 中启用导入功能。 | 您可以使用 LRS PageCenter X Import 功能，通过作业名称或表单 ID 等标准来识别 LRS PageCenter X 上的输出。然后，您可以将输出路由到 LRS PageCenter X 中的特定文件夹。要启用“导入”函数，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 配置文档保留策略。 | LRS PageCenter X 使用文档保留政策来决定在 L PageCenter RS X 中保留文档多长时间。要配置文档保留策略，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建一条规则，将输出文档路由到 LRS PageCenter X 中的特定文件夹。 | 在 LRS PageCenter X 中，**目标**决定当**报告定义**调用此目标时，输出将发送到的文件夹路径。在此示例中，基于报告定义中的**表单 ID** 文件夹创建一个文件夹，并将输出保存到该文件夹。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 创建作业定义 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 设置输出管理的身份验证和授权
<a name="set-up-authentication-and-authorization-for-output-management"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用用户和组创建 AWS Managed Microsoft AD 域。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 将 EC2 实例加入到 AWS 托管的 Microsoft AD 域中。 | [自动](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-systems-manager-dx-domain/)将 LRS VPSX/MFI 和 LRS PageCenter X EC2 实例加入您的 AWS 托管微软 AD 域（AWS 知识中心文档）或[手动](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)加入（AWS Directory Service 文档）。 | 云架构师 | 
| 为 LRS PageCenter X EC2 实例配置并 LRS/DIS 与 AWS 托管的 Microsoft AD 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 配置导入组以将输出从 LRS VPSX 导入到 LRS X。 PageCenter | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 向安全组添加规则。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 在 LRS PageCenter X 中创建一个用户来执行从 LRS VPSX/MFI 导入输出。 | 在 LRS PageCenter X 中创建用户以执行输出导入时，用户名应与 LRS **VPSX/MFI 中打印输出队列的 VPSX ID** 相同。在本示例中，VPSX ID 为。**VPS1**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
| 将 LRS PageCenter X 导入用户添加到 “仅限导入” 组中。 | 要为从 LRS VPSX 导入到 LRS X 的文档提供必要的权限，请执行 PageCenter以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 
|  LRS/DIS 使用 AWS 托管的 Microsoft AD 为 LRS VPSX/MFI EC2 实例进行配置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 将 FSx 适用于 Windows 文件服务器的 Amazon 配置为 LRS PageCenter X 的操作数据存储
<a name="configure-amazon-fsx-for-windows-file-server-as-the-operational-data-store-for-lrs-pagecenterx"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 LRS PageCenter X 创建文件系统。 | 要在多可用区环境中使用 Amazon FSx for Windows 文件服务器作为 LRS PageCenter X 的操作数据存储，请按照[步骤 1：创建文件](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step1.html)系统中的说明进行操作。 | 云架构师 | 
| 将文件共享映射到 LRS PageCenter X EC2 实例。 | 要将上一步中创建的文件共享映射到 LRS PageCenter X EC2 实例，请按照[步骤 2：将您的文件共享映射到运行 Windows Server 的 EC2 实例](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step2.html)中的说明进行操作。 | 云架构师 | 
| 将 LRS PageCenter X 控制目录和主文件夹目录映射到 Amazon FSx 网络共享驱动器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 云架构师 | 

### 测试输出管理工作流
<a name="test-an-output-management-workflow"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Rocket Softwar BankDemo e 应用程序启动批量打印请求。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 测试工程师 | 
| 在 LRS PageCenter X 中检查打印输出 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 测试工程师 | 

## 相关资源
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-resources"></a>
+ [LRS](https://www.lrsoutputmanagement.com/products/modernization-products)
+ [Advanced Function Presentation 数据流](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)（IBM 文档）
+ [线路条件数据流 (LCDS)](https://www.compart.com/en/lcds)（比较文档）
+ [使用 Micro Focus 在 AWS 上为企业大型机工作负载提供支持](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)（博客文章）
+ [在 AWS 上实现大型机在线打印工作负载的现代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)（AWS Prescriptive Guidance）
+ [在 AWS 上实现大型机批量打印工作负载的现代化](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) (AWS Prescriptive Guidance)

## 附加信息
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional"></a>

**注意事项**

在现代化改造过程中，您可能会考虑对大型机批处理和在线流程及其生成的输出进行各种配置。每个使用大型机平台的客户和供应商都根据直接影响打印的特殊要求对平台进行了定制。例如，您当前的平台可能会将 IBM AFP 数据流或 Xerox LCDS 合并到当前工作流中。此外，[大型机回车控制字符](https://www.ibm.com/docs/en/cmofz/10.5.0?topic=tips-ansi-machine-carriage-controls)和[通道命令字](https://www.ibm.com/docs/en/zos/3.1.0?topic=devices-channel-command-words)可能会影响打印页面的外观，可能需要特殊处理。作为现代化规划过程的一部分，我们建议您评测并了解特定打印环境中的配置。 

**打印数据采集**

Rocket Software Print Exit 会传递必要的信息 VPSX/MFI ，让 LRS 有效地处理线轴文件。该信息由在相关控制块中传递的字段组成，如下所示：
+ JOBNAME
+ OWNER (USERID)
+ DESTINATION
+ FORM
+ FILENAME
+ WRITER

LRS VPSX/MFI 支持以下大型机批处理机制，用于从 Rocket Enterprise Server 捕获数据：
+ 使用标准 z/OS JCL SYS DD/OUTPUT OUT 语句进行批 print/spool 处理 COBOL 处理。
+ 使用标准 z/OS JCL CA-SPOOL SUBSYS DD 语句进行批 print/spool 处理 COBOL 处理。
+ IMS/COBOL print/spool使用 CBLTDLI 接口进行处理。有关支持的方法和编程示例的完整列表，请参阅产品许可证附带的 LRS 文档。

**打印机队列运行状况检查**

LRS VPSX/MFI (LRS LoadX) 可以执行深入的运行状况检查，包括设备管理和操作优化。设备管理可以检测打印机设备中的故障，并将打印请求路由到正常运行的打印机。有关打印机队列的深入运行状况检查的详细信息，请参阅产品许可证附带的 LRS 文档。

**打印身份验证和授权**

LRS/DIS enables LRS applications to authenticate user IDs and passwords by using Microsoft Active Directory or a Lightweight Directory Access Protocol (LDAP) server. In addition to basic print authorization, LRS/DIS还可以在以下用例中应用粒度级别的打印安全控制：
+ 管理谁可以浏览打印机作业。
+ 管理其他用户作业的浏览级别。
+ 管理操作任务，例如，命令级安全性，例如保留或释放、清除、修改、复制和重新路由。安全性可以通过用户 ID 或组进行设置，类似于活动目录安全组或 LDAP 组。

## 附件
<a name="attachments-f9ad041d-b9f0-4a9a-aba7-40fdc3088b27"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/attachments/attachment.zip)

# 使用 Rocket Enterprise Server 和 LRS V AWS PSX/MFI 实现大型机批量打印工作负载的现代化
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi"></a>

*Shubham Roy 和 Kevin Yung，Amazon Web Services*

*Abraham Rondon，Micro Focus*

*Guy Tucker、Levi、Ray 和 Shoup Inc*

## Summary
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-summary"></a>

此模式向您展示了如何使用 Rocket Enterprise Server 作为现代化大型机应用程序的运行时，将 LRS（Micro Focus Interface Interface）用作打印服务器，在亚马逊网络服务 VPSX/MFI (AWS) 云上实现业务关键型大型机批量打印工作负载的现代化。该模式基于[更换平台](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)大型机现代化方法。通过这种方法，您可以将大型机批处理任务迁移到亚马逊弹性计算云 (Amazon EC2)，然后将大型机数据库（ DB2 例如 IBM forz/OS, to Amazon Relational Database Service (Amazon RDS). The authentication and authorization for the modernized print workflow is performed by AWS Directory Service for Microsoft Active Directory, also known as AWS Managed Microsoft AD. The LRS Directory Information Server (LRS/DIS）与 AWS 托管 Microsoft AD 集成。通过实现批量打印工作负载的现代化，您可以降低 IT 基础设施成本，减轻维护传统系统的技术债务，消除数据孤岛，通过 DevOps 模型提高灵活性和效率，并利用 AWS 云中的按需资源和自动化。

## 先决条件和限制
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 大型机打印或输出管理工作负载
+ 有关如何重建和交付在 Rocket Enterprise Server 上运行的大型机应用程序的基本知识（有关详细信息，请参阅 Rocket 文档中的 [Rocket 企业服务器](https://www.rocketsoftware.com/sites/default/files/resource_files/enterprise-server.pdf)数据表。）
+ [LRS 云打印](https://www.lrsoutputmanagement.com/solutions/solutions-cloud-printing/)解决方案和概念的基础知识。
+ Rocket Enterprise Server 软件和许可证（有关更多信息，请联系 [Rocket 销售](https://www.rocketsoftware.com/en-us/products/enterprise-suite/request-contact)。）
+ LRS VPSX/MFI, LRS/Queue, and LRS/DIS 软件和许可证（欲了解更多信息，请联系 [LRS 销售人员](https://www.lrsoutputmanagement.com/about-us/contact-us/)。）

**注意**  
有关大型机批量打印工作负载配置注意事项的更多信息，请参阅此模式[其他信息](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional)部分中的*注意事项*。

**产品版本**
+ [Rocket Enterprise Server](https://www.microfocus.com/en-us/products/enterprise-server/overview?utm_campaign=7018e000000PgfnAAC&utm_content=SCH-BR-AMC-AppM-AMS&gclid=EAIaIQobChMIoZCQ6fvS9wIVxQN9Ch2MzAOlEAAYASAAEgKx2fD_BwE) 6.0（产品更新 7）
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/vpsx-enterprise/) 或更高版本

## 架构
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-architecture"></a>

**源技术堆栈**
+ 操作系统 - IBM z/OS
+ 编程语言 - 面向业务的通用语言（COBOL）、作业控制语言（JCL）和客户信息控制系统（CICS）
+ 数据库 — IBM DB2 fo z/OS r 和虚拟存储访问方法 (VSAM)
+ 安全 — 资源访问控制设施 (RACF)、适用于 z/OS 的 CA 绝密和访问控制设施 2 () ACF2
+ 打印和输出管理 — IBM 大型机 z/OS 打印产品（适用于 z/OS、LRS 和 CA View 的 IBM Tivoli 输出管理器）

**目标技术堆栈**
+ 操作系统 — 在亚马逊上运行的微软 Windows 服务器 EC2
+ 计算 — 亚马逊 EC2
+ 编程语言 - COBOL、JCL 和 CICS
+ 数据库 - Amazon RDS
+ 安全性 - AWS 托管的 Microsoft AD
+ 打印和输出管理 - AWS 上的 LRS 打印解决方案
+ 大型机运行时环境 - Rocket Enterprise Server

**源架构**

下图显示了大型机批量打印工作负载的典型当前状态架构：

![\[从用户到大型机服务，Db2 for z/OS、作业调度器、批处理作业和输出分为六步。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/83d82435-0aa6-4eb8-a5c8-0920102afb09.png)


下图显示了如下工作流：

1. 用户在基于 COBOL 编写的 IBM CICS 应用程序构建的互动系统 (SoE) 上执行业务事务。

1. SoE 调用大型机服务，该服务将业务交易数据记录在 system-of-records (SoR) 数据库中，例如 IBM DB2 for z/OS。

1. SoR 保留来自 SoE 的业务数据。

1. 批处理作业调度程序启动批处理作业以生成打印输出。

1. 批处理作业从数据库中提取数据，根据业务需求格式化数据，然后生成业务输出，例如账单、身份证或贷款报表。最后，批处理作业根据业务需求将输出路由到打印输出管理进行处理和输出交付。 

1. 打印输出管理接收批处理作业的打印输出，然后将该输出传递到指定的目标，例如电子邮件、使用安全 FTP 的文件共享、使用 LRS 打印解决方案的物理打印机（如本模式所示）或 IBM Tivoli。

**目标架构**

下图显示了部署在 Amazon Web Services Cloud 中的大型机批量打印工作负载的架构：

![\[在 AWS 上使用调度器、Rocket Enterprise Server 和数据库批量部署应用程序分为四步。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/8cdd4ef7-3cbd-476a-9aa4-c1c0924f17c6.png)


下图显示了如下工作流：

1. 批处理作业调度程序启动批处理作业来创建打印输出，例如账单、身份证或贷款报表。

1. 大型机批处理作业（[改编为 Amazon EC2](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)）使用 Rocket Enterprise Server 运行时从应用程序数据库中提取数据，对数据应用业务逻辑，格式化数据，然后使用 Rocket Soft [ware Print Exit（Micro Focus 文档）将数据发送到打印](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOU020.html)目的地。

1. 应用程序数据库（在 Amazon RDS 上运行的 SoR）保留打印输出的数据。

1. LRS VPSX/MFI 打印解决方案部署在亚马逊上，其操作数据存储在亚马逊 EC2 Elastic Block Store (Amazon EBS) 中。LRS VPSX/MFI 使用TCP/IP-based LRS/Queue传输代理通过 Rocket Software JES Print Exit API 收集打印数据，并将数据传送到指定的打印机目的地。

**注意**  
目标解决方案通常不需要更改应用程序来适应大型机格式化语言，例如 IBM Advanced Function Present（AFP）或 Xerox Line Condition Data Stream（LCDS）。有关在 AWS 上使用 Rocket Software 进行大型机应用程序迁移和现代化的更多信息，请参阅博客文章：[Empowering Enterprise Mainframe Workloads on AWS with Micro Focus](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)。

**AWS 基础设施架构**

下图显示了适用于大型机批量打印工作负载的高可用性且安全的 AWS 基础设施架构：

![\[通过 Rocket Software 和 LRS 组件在 AWS 上部署多可用区分为七步。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/287dd143-338c-4d83-a9b2-8e39214a81b0.png)


下图显示了如下工作流：

1. 批处理调度器启动批处理流程，并部署在 Amazon EC2 上的多个[可用区以实现高可用](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)性 (HA)。
**注意**  
此模式不涵盖批处理调度程序的实施。有关实现的详细信息，请参阅调度程序的软件供应商文档。

1. 大型机批处理作业（用 JCL 或 COBOL 等编程语言编写）使用核心业务逻辑来处理和生成打印输出，例如账单、身份证和贷款对账单。该任务部署在 Amazon 上， EC2 跨两个可用区，用于 HA，并使用 Rocket Software Print Exit 将打印输出路由到 LRS 以 VPSX/MFI 供最终用户打印。

1. LRS VPSX/MFI 使用TCP/IP-based LRS/Queue transmission agent to collect or capture print data from the Rocket Software JES Print Exit programming interface. Print Exit passes the necessary information to enable LRS VPSX/MFI to effectively process the spool file and dynamically build LRS/Queue命令。然后使用 Rocket Software 的标准内置函数运行命令。
**注意**  
有关从 Rocket Software Print Exit 传递到 LRS/Queue LRS VPSX/MFI 支持的大型机批处理机制的*打印数据的更多信息，请参阅此模式的 “[其他信息](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional)” 部分中的打印数据捕获*。

1. 
**注意**  
N [etwork Load Balanc](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) er 提供 DNS 名称，用于将 Rocket Enterprise Server 与 LRS 集成，VPSX/MFI. : LRS VPSX/MFI supports a Layer 4 load balancer. The Network Load Balancer also does a basic health check on LRS VPSX/MFI并将流量路由到运行状况良好的注册目标。

1. 
**注意**  
LRS VPSX/MFI 打印服务器部署在亚马逊上， EC2 跨两个可用区，用于 HA，并使用 [Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) 作为运营数据存储。LRS VPSX/MFI 支持主动-主动和主动-被动服务模式。此架构使用主动-被动对 AZs 中的多个作为主动和热备用。如果活动实例处于不健康状态，Network Load Balancer 会对 LRS VPSX/MFI EC2 实例执行运行状况检查，并将流量路由到另一个可用区的热备用实例。在每个实例中，打印请求都保存在本地的 LRS Job Queue 中。 EC2 在恢复的情况下，必须重新启动失败的实例，LRS 服务才能继续处理打印请求。: LRS 还 VPSX/MFI 可以在打印机机群级别执行运行状况检查。有关更多信息，请参阅此模式的[其他信息](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional)部分中的*打印机队列运行状况检查*。

1. [AWS 托管 Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) 与集成 LRS/DIS 以执行打印工作流程身份验证和授权。有关更多信息，请参阅此模式的[其他信息](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional)部分中的*打印身份验证和授权*。

1. LRS VPSX/MFI 使用 Amazon EBS 进行块存储。您可以将活动 EC2 实例中的 Amazon EBS 数据作为 point-in-time快照备份到 Amazon S3，然后将其恢复到热备用 EBS 卷。要自动创建、保留和删除 Amazon EBS 卷快照，您可以使用 [Amazon Data Lifecycle Manager](https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/) 设置自动快照的频率并根据 [RTO/RPO 要求](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)恢复快照。

## 工具
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-tools"></a>

**AWS 服务**
+ [Amazon Elastic Block Store (Amazon](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) EBS) 提供用于实例的块级存储卷。 EC2 EBS 卷的行为类似于原始、未格式化的块储存设备。您可以将这些卷作为设备挂载在实例上。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 在 AWS 云中提供可扩展的计算容量。您可以根据需要使用 Amazon EC2 启动任意数量或数量的虚拟服务器，也可以进行横向扩展或扩展。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)是一项 Web 服务，让用户能够在 AWS 云中更轻松地设置、操作和扩展关系数据库。它为行业标准的关系数据库提供了经济高效、可调整大小的容量，并管理常见的数据库管理任务。
+ [适用于 Microsoft Active Directory 的 AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) 允许目录感知工作负载和 AWS 资源使用 AWS 云中的 Microsoft Active Directory。

**其他工具**
+ [LRS VPSX/MFI（Micro Focus 接口）](https://www.lrsoutputmanagement.com/products/vpsx-enterprise/)由 LRS 和 Rocket Software 共同开发，可捕获 Rocket Enterprise Server JES 假脱机的输出，并将其可靠地传送到指定的打印目的地。
+ LRS 目录信息服务器 (LRS/DIS) 用于打印工作流期间的身份验证和授权。
+ TCP/IP-based LRS/Queue transmission agent is used by LRS VPSX/MFI通过 Rocket Software JES 打印出口编程接口收集或捕获打印数据。
+ [Rocket Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html) 是大型机应用程序的应用程序部署环境。它为使用任何版本的 Rocket Software Enterprise Developer 迁移或创建的大型机应用程序提供执行环境。

## 操作说明
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-epics"></a>

### 在亚马逊上设置 Rocket Enterprise Server EC2 并部署大型机批处理应用程序
<a name="set-up-rocket-enterprise-server-on-amazon-ec2-and-deploy-a-mainframe-batch-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Rocket Enterprise Server 并部署演示应用程序。 | 在亚马逊上设置 Rocket Enterprise Server EC2，然后在亚马逊上部署 Rocket Software BankDemo 演示应用程序 EC2。该 BankDemo 应用程序是一个大型机批处理应用程序，用于创建然后启动打印输出。 | 云架构师 | 

### 在亚马逊上设置 LRS 打印服务器 EC2
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获取用于打印的 LRS 产品许可证。 | 要获得 LRS 的 LRS 产品许可证VPSX/MFI, LRS/Queue, and LRS/DIS，请联系 [LRS 输出管理团队](https://www.lrsoutputmanagement.com/about-us/contact-us/)。您必须提供将安装 LRS 产品的 EC2 实例的主机名。 | 构建 lead | 
| 创建亚马逊 EC2 Windows 实例来安装 LRS VPSX/MFI。 | 按照亚马逊 EC2 文档中启动亚马逊[ EC2 实例中的说明启动亚马逊 EC2 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html) Windows 实例。您的实例必须满足 LRS VPSX/MFI 的以下硬件和软件要求： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)上述硬件和软件要求适用于小型打印机队列（大约 500-1000 台）。要获取完整的要求，请咨询您的 LRS 和 AWS 联系人。创建 Windows 实例时，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 在 EC2 实例 VPSX/MFI 上安装 LRS。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 安装 LRS/队列。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 安装 LRS/DIS。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 创建目标组并将 LRS 注册 VPSX/MFI EC2 为目标。 | 按照弹性负载均衡器文档中[为网络负载均衡器创建目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)的说明创建目标组。创建目标组时，请执行以下操作:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 创建网络负载均衡器。 | 按照弹性负载均衡器文档中[创建网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)的说明进行操作。您的 Network Load Balancer 会将流量从 R VPSX/MFI EC2 ocket Enterprise 服务器路由到创建网络负载均衡器时，在**侦听器和路由**页面上执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 将火箭企业服务器与 LRS VPSX/MFI 和 LRS/Queue 集成
<a name="integrate-rocket-enterprise-server-with-lrs-vpsx-mfi-and-lrs-queue"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 Rocket 企业服务器进行 LRS/Queue 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)LRS 目前支持 DNS 名称的最大字符限制为 50 个，但将来可能会发生变化。如果您的 DNS 名称字符数大于 50，则可以使用网络负载均衡器的 IP 地址作为替代。 | 云架构师 | 
| 为 LRS VPSX/MFI 集成配置 Rocket 企业服务器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 在 Rocket Enterprise Server 和 LRS VPSX/MFI 中设置打印机和打印用户
<a name="set-up-printers-and-print-users-in-rocket-enterprise-server-and-lrs-vpsx-mfi"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 Rocket Software Print Exit 模块关联到 Rocket Enterprise Server 批量打印机服务器执行进程。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)有关配置的更多信息，请参阅 Micro Focus 文档中的[使用退出](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOS025.html)。 | 云架构师 | 
| 在 LRS VPSX/MFI 中添加打印机。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 在 LRS VPSX/MFI 中创建打印用户。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 设置身份验证和授权
<a name="set-up-print-authentication-and-authorization"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用用户和组创建 AWS Managed Microsoft AD 域。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 加入 LRS 加 VPSX/MFI EC2 入 AWS 托管的微软 AD 域。 | [自动](https://repost.aws/knowledge-center/ec2-systems-manager-dx-domain)加入您的 AWS 托管微软 AD 域（AWS 知识中心文档）或[手动](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html)加入 LR VPSX/MFI EC2 S（AWS Directory Service 文档）。 | 云架构师 | 
| 配置并 LRS/DIS 与 AWS 托管的 Microsoft AD 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 测试打印工作流
<a name="test-a-print-workflow"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Rocket 软件 BankDemo 应用程序启动批量打印请求。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 测试工程师 | 
| 检查 LRS VPSX/MFI 中的打印输出。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)现在，您可以看到账户对账单的打印输出，其中包含**账户号码**、**描述**、**日期**、**金额**和**余额**列。有关示例，请参阅此模式的 **batch\$1print\$1output** 附件。 | 测试工程师 | 

## 相关资源
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-resources"></a>
+ [LRS 输出现代化](https://www.lrsoutputmanagement.com/)（LRS 文档）
+ [ANSI 和机器托架控制](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)（IBM 文档）
+ [通道命令字](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)（IBM 文档）
+ [使用 Micro Focus 在 AWS 上为企业大型机工作负载提供支持](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)（Amazon Web Services Partner Network 博客）
+ [使用 Amazon A EC2 uto Scaling 和 Systems Manager 构建 Micro Focus 企业服务器 PAC](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.html)（AWS Prescriptive Guidence 文档）
+ [Advanced Function Presentation (AFP)数据流](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)（IBM 文档）
+ [线路条件数据流 (LCDS)](https://www.compart.com/en/lcds)（比较文档）

## 附加信息
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional"></a>

**注意事项**

在现代化改造过程中，您可以考虑大型机批处理及其生成的输出的各种配置。每个使用大型机平台的客户和供应商都根据直接影响打印的特殊要求对平台进行了定制。例如，您当前的平台可能会将 IBM 高级功能演示 (AFP) 或 Xerox 线路条件数据流 (LCDS) 合并到当前工作流程中。此外，[大型机回车控制字符](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)和[通道命令字](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)可能会影响打印页面的外观，可能需要特殊处理。作为现代化规划过程的一部分，我们建议您评测并了解特定打印环境中的配置。

**打印数据采集**

Rocket Software Print Exit 传递必要的信息，使 LRS VPSX/MFI 能够有效地处理线轴文件。该信息由在相关控制块中传递的字段组成，例如：
+ JOBNAME
+ OWNER (USERID)
+ DESTINATION
+ FORM
+ FILENAME
+ WRITER

LRS VPSX/MFI 支持以下大型机批处理机制，用于从 Rocket Enterprise Server 捕获数据。
+ 使用标准 z/OS JCL SYSOUT 语句进行批 print/spool 处理 COBOL 处理 DD/OUTPUT 
+ 使用标准 z/OS JCL CA-SPOOL SUBSYS DD 语句进行批 print/spool 处理 COBOL 处理
+ IMS/COBOL print/spool使用 CBLTDLI 接口进行处理（有关支持的方法和编程示例的完整列表，请参阅产品许可证附带的 LRS 文档。）

**打印机队列运行状况检查**

LRS VPSX/MFI (LRS LoadX) 可以执行深入的运行状况检查，包括设备管理和操作优化。设备管理可以检测打印机设备中的故障，并将打印请求路由到正常运行的打印机。有关打印机队列的深入运行状况检查的详细信息，请参阅产品许可证附带的 LRS 文档。

**打印身份验证和授权**

LRS/DIS enables LRS applications to authenticate user IDs and passwords by using Microsoft Active Directory or an LDAP server. In addition to basic print authorization, LRS/DIS还可以在以下用例中应用粒度级别的打印安全控制：
+ 管理谁可以浏览打印机作业。
+ 管理其他用户作业的浏览级别。
+ 管理操作任务。例如，命令级安全性，例如保留/释放、清除、修改、复制和重新路由。安全性可以通过用户 ID 或组（类似于 AD 组或 LDAP 组）来设置。** **

## 附件
<a name="attachments-36de7312-4860-4702-a325-c01cf74c4f33"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/36de7312-4860-4702-a325-c01cf74c4f33/attachments/attachment.zip)

# 大型机现代化： AWS 使用 Rock DevOps et 软件企业套件开启
<a name="mainframe-modernization-devops-on-aws-with-micro-focus"></a>

*Kevin Yung，Amazon Web Services*

## Summary
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-summary"></a>

**客户面临的挑战**

在大型机硬件上运行核心应用程序的组织，在硬件需要纵向扩展以满足数字创新需求时，通常会遇到一些挑战。这些挑战包括以下制约因素。 
+ 由于大型机硬件组件不灵活，更换成本高昂，因此大型机开发和测试环境无法扩展。
+ 由于新开发人员对传统大型机开发工具不熟悉、不感兴趣，大型机开发正面临技能短缺的问题。诸如容器、持续 integration/continuous 交付 (CI/CD) 管道和现代测试框架之类的现代技术在大型机开发中不可用。

**模式结果**

为了应对这些挑战，Amazon Web Services (AWS) 和 AWS Partner Network (APN) 合作伙伴Rocket Software Micro Focus合作创建了这种模式。该解决方案旨在帮助您实现以下成果。
+ 提高开发人员的工作效率。开发人员可以在几分钟内获得新的大型机开发实例。
+ 使用创建 AWS 云 容量几乎无限的新大型机测试环境。
+ 快速配置新的大型机 CI/CD 基础架构。使用 AWS CloudFormation 和 AWS 可以在一小时内完成置备 AWS Systems Manager。
+ 原生使用大型机开发 AWS DevOps 工具，包括 AWS CodeBuild、、、和 Amazon Elastic Contain AWS CodePipeline er Re AWS CodeDeploy gistry (Amazon ECR) Registry。 AWS CodeCommit
+ 将大型机项目中的传统瀑布式开发转变为灵活开发。

**技术摘要**

在此模式中，目标堆栈包含以下组件。


| 
| 
| 逻辑组件 | 实施方案 | 说明 | 
| --- |--- |--- |
| 源代码存储库 | 火箭软件 AccuRev 服务器、 CodeCommit、亚马逊 ECR  | 源代码管理 - 该解决方案使用两种类型的源代码： 大型机源代码，例如 COBOL、JCL 等。 AWS 基础架构模板和自动化脚本 两种类型的源代码都需要版本控制，但它们的管理方式不同 SCMs。部署到大型机或火箭软件企业服务器中的源代码在 Rocket Software Micro Focus AccuRev 服务器中管理。 AWS 模板和自动化脚本在中进行管理 CodeCommit。Amazon ECR 用于 Docker 映像存储库。 | 
| 企业开发人员实例 | 亚马逊 Elastic Compute Cloud（亚马逊 EC2），Eclipse 的火箭软件企业开发者 | 大型机开发人员可以使用适用于 Eclipse EC2 的 Rocket Software Enterprise 开发者在亚马逊中开发代码。这样就无需依赖大型机硬件来编写和测试代码。  | 
| Rocket Software Enterprise Suite 许可证管理 | Rocket Software Enterprise Suite License Manager | 对于集中式 Rocket Software Enterprise Suite 许可证管理和治理，该解决方案使用 Rocket Software Enterprise Suite License Manager 来托管必要的许可证。 | 
| CI/CD 管道 | CodePipeline、、 CodeBuild CodeDeploy、容器里的 Rocket Software Enterprise Developer、容器中的 Rocket Software 企业测试服务器、 | 大型机开发团队需要 CI/CD 管道来执行代码编译、集成测试和回归测试。在 AWS， CodePipeline 并且 CodeBuild 可以在容器中使用 Rocket Software Enterprise 开发人员和企业测试服务器。 | 

## 先决条件和限制
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-prereqs"></a>

**先决条件**


| 
| 
| Name | 说明 | 
| --- |--- |
| py3270 | py3270 是 x3270（IBM 3270 终端模拟器）的 Python 接口。它为 x3270 或 s3270 子进程提供 API。 | 
| x3270 | x3270 是用于 X Window System 和 Windows 的 IBM 3270 终端模拟器。 开发人员可以使用它来进行本地单元测试。 | 
| 机器人框架-大型机-3270-库 | Mainframe3270 是基于 py3270 项目的 Robot Framework 库。 | 
| Rocket Software Verastream | Rocket Software Verastream 是一个集成平台，支持以测试移动应用程序、Web 应用程序和 SOA Web 服务的方式测试大型机资产。 | 
| Rocket Software Unified Functional Testing（UFT）安装程序和许可证 | Rocket Software Unified Functional Testing 是一款为软件应用程序和环境提供功能和回归测试自动化的软件。 | 
| Rocket Software Enterprise Server 软件和许可证 | Enterprise Server 为大型机应用程序提供运行时系统环境。 | 
| Rocket Software Enterprise Test Server 软件和许可证 | Rocket Software Enterprise Test Server 是一个 IBM 大型机应用程序测试环境。 | 
| Rocket Software 服务器 AccuRev 安装程序和许可证，以及 Rocket Software Micro Focus AccuRev 安装程序和 Windows  | AccuRev 提供源代码管理 (SCM)。该 AccuRev 系统专为一组正在开发一组文件的人员使用而设计。 | 
| Rocket Software Enterprise Developer for Eclipse 安装程序、修补程序和许可证 | Enterprise Developer 为大型机开发人员提供了一个平台，用于开发和维护核心大型机在线和批处理应用程序。 | 

**限制**
+ 中不支持构建 Windows Docker 镜像。 CodeBuild此[报告的问题](https://github.com/docker-library/docker/issues/49)需要 Windows Kernel/HCS 和 Docker 团队的支持。解决方法是使用 Systems Manager 创建 Docker 映像构建运行手册。此模式使用变通方法构建 Rocket Software Enterpise Developer for Eclipse 和 Rocket Software Micro Focus Enterprise Test Server Container 映像。 
+ Windows 尚不支持来自 CodeBuild 的虚拟私有云 (VPC) 连接，因此该模式不使用 Rocket 软件许可证管理器来管理 Rocket Software Enterprise Developer 和 OpenText Rocket Software 企业测试服务器容器中的许可证。

**产品版本**
+ Rocket Software Enterprise Developer 5.5 或更高版本
+ Rocket Software Enterprise Test Server 5.5 或更高版本
+ Rocket Software Enterprise Server 5.5 或更高版本
+ 火箭软件 AccuRev 7.x 或更高版本
+ 适用于 Rocket Software Enterprise Developer 和 Enterprise Test Server 的 Windows Docker 基础映像：**microsoft/dotnet-framework-4.7.2-runtime**
+ **适用于 AccuRev 客户的 Linux Docker 基础镜像：amazonlinux: 2**

## 架构
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-architecture"></a>

**大型机环境**

在传统的大型机开发中，开发人员需要使用大型机硬件来开发和测试程序。它们面临容量限制，例如 dev/test 环境限制每秒百万条指令 (MIPS)，并且必须依赖大型机计算机上可用的工具。

在许多组织中，大型机开发遵循瀑布式开发方法，团队依靠较长的周期来发布变更。这些产品的发布周期通常长于数字产品开发。  

下图显示了多个大型机项目共享大型机硬件进行开发的情况。在大型机硬件中，为更多项目横向扩展开发和测试环境的成本很高。

![\[Diagram showing mainframe architecture with z/OS, databases, programming languages, and user groups.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/84e717fc-5aea-41a6-977a-d7e7a7ca5da7.png)


 

 

*AWS*** 架构**

此模式将大型机开发扩展到 AWS 云。首先，它使用 AccuRev SCM 托管大型机源代码。 AWS然后，它让 Enterprise Developer 和 Enterprise Test Server 可用于在 AWS上构建和测试大型机代码。 

下文将介绍该模式的三个主要组成部分。

**1。SCM **

在中 AWS，该模式用于 AccuRev 为大型机源代码创建一组 SCM 工作空间和版本控制。其基于流的架构可实现多个团队的并行大型机开发。要合并更改，请 AccuRev 使用升级概念。要将该更改添加到其他工作空间，请 AccuRev 使用更新概念。

在项目级别，每个团队可以创建一个或多个直播 AccuRev 来跟踪项目级别的变化。这些被称为项目流。这些项目流继承自同一父流。父流用于合并来自不同项目流的更改。

每个项目流都可以将代码提升到 AccuRev，并且设置了提升后触发器来启动 C AWS I/CD 管道。项目流更改的成功生成可以提升到其父流，以进行更多回归测试。 

通常，父流被称为系统集成流。当从项目流升级到系统集成流时，升级后触发器会启动另一个 CI/CD 管道来运行回归测试。

除大型机代码外，此模式还包括 AWS CloudFormation 模板、Systems Manager Automation 文档和脚本。遵循 infrastructure-as-code最佳实践，它们在中受版本控制。 CodeCommit 

如果您需要将大型机代码同步回大型机环境进行部署，Rocket Software 提供了企业同步解决方案，该解决方案可以将代码从 SCM 同步回大型机 AccuRev SCM。

**2。开发人员和测试环境**

在大型组织中，要扩展成百甚至上千名大型机开发人员是一项挑战。为了解决这一限制，该模式使用亚马逊 EC2 Windows 实例进行开发。在实例上，安装了 Enterprise Developer for Eclipse 工具。开发人员可以在实例上本地执行所有大型机代码测试和调试。 

AWS Systems Manager 状态管理器和自动化文档用于自动配置开发人员实例。创建开发者实例的平均时间在 15 分钟以内。准备了以下软件和配置：
+ AccuRev Windows 客户端，用于检出源代码并将其提交到 AccuRev
+ Enterprise Developers for Eclipse 工具，用于在本地编写、测试和调试大型机代码
+ 开源测试框架 Python 行为驱动开发 (BDD) 测试框架 Behave、py3270 和 x3270 模拟器，用于创建脚本来测试应用程序
+ 一个 Docker 开发人员工具，用于生成企业测试服务器 Docker 映像并在企业测试服务器 Docker 容器中测试应用程序 

在开发周期中，开发人员使用该 EC2 实例在本地开发和测试大型机代码。成功测试本地更改后，开发人员会将更改推广到 AccuRev 服务器。 

**3。 CI/CD 管道**

在这种模式中，在部署到生产环境之前， CI/CD 管道用于集成测试和回归测试。 

正如 SCM 部分所述， AccuRev 使用两种类型的流：项目流和集成流。每个直播都与 CI/CD 管道相连。为了在 AccuRev 服务器和之间执行集成 AWS CodePipeline，该模式使用升级 AccuRev 后脚本创建一个事件来启动 CI/CD。

例如，当开发者在中宣传对项目流的更改时 AccuRev，它会启动一个升级后脚本以在 AccuRev Server 中运行。然后，该脚本将更改的元数据上传到 Amazon Simple Storage Service (Amazon S3)桶以创建 Amazon S3 事件。此事件将启动 CodePipeline 已配置的管道运行。 

集成流及其关联的管道使用相同的事件启动机制。 

在 CI/CD 管道中， CodeBuild 与 AccuRev Linux 客户端容器一起 CodePipeline 使用来查看 AccuRev 流中的最新代码。然后，管道开始 CodeBuild 使用企业开发人员 Windows 容器来编译源代码，并使用中的企业测试服务器 Windows 容器 CodeBuild 来测试大型机应用程序。

 CI/CD 管道使用 CloudFormation 模板构建，蓝图将用于新项目。通过使用模板，项目只需不到一个小时即可在中创建新 CI/CD 管道 AWS。

为了扩展你的大型机测试能力 AWS，该模式构建了 Rocket Software DevOps 测试套件、Verastream 和 UFT 服务器。通过使用现代 DevOps 工具，您可以根据 AWS 需要运行任意数量的测试。

下图显示了开启 Rocket Softwar AWS e 的大型机开发环境示例。

![\[AWS development pipeline with shared components for multiple project teams.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/27da6a52-4573-44cb-8716-1ac49430f618.png)


 

*目标技术堆栈 *

本节将详细介绍该模式中每个组件的架构。

**1。源代码存储库 — AccuRev SCM**

AccuRev SCM 的设置是为了管理大型机源代码版本。为了获得高可用性， AccuRev 支持主模式和副本模式。操作员在主节点上执行维护时可以故障转移到副本。 

为了加快 CI/CD 管道的响应速度，该模式使用 Amazon E CloudWatch vents 来检测源代码更改并启动管道的启动。

1. 管道设置为使用 Amazon S3 源。

1. 设置 CloudWatch 事件规则是为了从源 S3 存储桶中捕获 S3 事件。

1.  CloudWatch 事件规则为管道设置了目标。

1. AccuRev SCM 配置为在升级完成后在本地运行升级后脚本。

1. AccuRev SCM 生成一个包含促销元数据的 XML 文件，脚本会将该 XML 文件上传到源 S3 存储桶。

1. 上传后，源 S3 存储桶发送事件以匹配 CloudWatch 事件规则， CloudWatch 事件规则启动管道以运行。 

当管道运行时，它会启动一个 CodeBuild 项目，使用 AccuRev Linux 客户端容器从关联 AccuRev 的流中查看最新的大型机代码。  

下图显示了 AccuRev 服务器设置。

![\[AWS 云 diagram showing AccuRev setup with primary and replica instances across availability zones.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/e60345cc-2283-4b03-8f57-e3dac1770978.png)


**2。企业开发人员模板** 

该模式使用 Amazon EC2 模板来简化开发者实例的创建。通过使用状态管理器，它可以一致地将软件和许可证设置应用于 EC2 实例。

Amazon EC2 模板在其 VPC 上下文设置和默认实例设置中构建，并且遵循企业标签要求。通过使用模板，团队可以创建自己的新开发实例。 

当开发人员实例启动时，通过与标签关联，Systems Manager 使用 State Manager 来应用自动化。自动化包括以下常规步骤。

1. 安装 Enterprise Developer 软件并安装补丁。

1. 安装适用于 Windows 的 AccuRev 客户端。

1. 安装预先配置的脚本以供开发者加入 AccuRev 直播。初始化 Eclipse 工作区。

1. 安装开发工具，包括 x3270、py3270 和 Docker。

1. 将许可证设置配置为指向 License Manager 负载均衡器。

下图显示了由 Amazon EC2 模板创建的企业开发者实例，状态管理器将软件和配置应用于该实例。企业开发者实例连接到 AWS License Manager 以激活其许可证。

![\[AWS 云 diagram showing Enterprise Developer Instance setup with License Manager and Systems Manager components.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/7ca8f538-8362-4a11-a842-7ecff6fa0248.png)


 

**3。 CI/CD 管道**

如 AWS 架构部分所述，在模式中，有项目级 CI/CD 管道和系统集成管道。每个大型机项目团队都会创建一个或多个 CI/CD 管道，用于构建他们在项目中开发的程序。这些项目 CI/CD 管道从关联的 AccuRev 流中检出源代码。 

在项目团队中，开发人员在关联的 AccuRev 流中推广他们的代码。然后，升级将启动项目管道以生成代码并运行集成测试。 

每个项目 CI/CD 管道都使用带有企业开发者工具 Amazon ECR 映像和企业测试服务器工具 Amazon ECR 映像的 CodeBuild 项目。 

CodePipeline 并 CodeBuild 用于创建 CI/CD 管道。因为 CodeBuild 并且 CodePipeline 没有预付费用或承诺，因此您只需为实际使用量付费。与大型机硬件相比，该 AWS 解决方案大大缩短了硬件配置提前期，降低了测试环境的成本。

在现代开发中，使用了多种测试方法。例如，测试驱动开发 (TDD)、BDD 和机器人框架。通过此模式，开发人员可以使用这些现代工具进行大型机测试。例如，通过使用 x3270、py3270 和行为 python 测试工具，可以定义联机应用程序的行为。您还可以在这些 CI/CD 管道中使用构建大型机 3270 机器人框架。

下图显示了团队直播 CI/CD 管道。 

![\[AWS 云 CI/CD pipeline showing CodeCommit, CodePipeline, and CodeBuild with Micro Focus tools integration.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/da59f837-2f23-404f-948b-41402cc6fe0c.png)


下图显示了 Mainframe3270 Robot Frame CodePipeline work 中生成的项目 CI/CD 测试报告。

![\[Test report summary showing 100% pass rate for 3 test cases in 2.662 seconds.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/4752321a-c60d-455c-ac2f-6f0e2bc3dca0.png)


下图显示了在 Py3270 和 Behave BDD CodePipeline 中生成的项目 CI/CD 测试报告。

![\[Test report summary showing 100% pass rate for 2 test cases in a pipeline.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/d005466e-aeb8-4fd6-8342-743ed049f98a.png)


成功通过项目级测试后，将测试的代码手动提升到 AccuRev SCM 中的集成流。在团队对其项目管道的测试覆盖率有信心后，可以自动执行此步骤。

提升代码后，系统集成 CI/CD 管道会检查合并后的代码并执行回归测试。合并的代码将从所有并行项目流中提升。

根据对测试环境的要求程度，客户可以在不同的环境中拥有更多的系统集成 CI/CD 管道，例如 UAT、Pre-Production。 

在此模式中，系统集成管道中使用的工具包括 Enterprise Test Server、UFT Server 和 Verastream。所有这些工具都可以部署到 Docker 容器中并与一起 CodeBuild使用。

成功测试大型机程序后，构件将通过版本控制存储在 S3 存储桶中。 

下图显示了系统集成 CI/CD 管道。

![\[CI/CD pipeline showing AWS 服务 and Micro Focus tools for source, build, test, and promote stages.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/693212e5-1cd0-4f82-a910-39b00d977c38.png)


 

在系统集成 CI/CD 管道中成功测试工件后，可以将其提升为生产部署。 

如果您需要将源代码部署回大型机，Rocket Software提供了企业同步解决方案，可以将源代码从Mainframe Endeavor同步 AccuRev 回Mainframe Endeavor。

下图显示了将构件部署到企业服务器的生产 CI/CD 管道。在此示例中， CodeDeploy 协调了将经过测试的大型机工件部署到企业服务器中的过程。

![\[CI/CD pipeline diagram showing CodePipeline, CodeBuild, and CodeDeploy stages for artifact deployment.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/56749c2a-e038-4e56-9487-b2ff83894725.png)


除了 CI/CD 管道的架构演练外，有关在和中[测试大型机应用程序的更多信息，请参阅 AWS DevOps 博客文章 “ AWS 使用 Micro Focus Enterprise Suite 自动执行数千个](https://aws.amazon.com/blogs/devops/automate-mainframe-tests-on-aws-with-micro-focus/)大型机测试”。 CodeBuild CodePipeline（Micro Focus 现更名为 Rocket Software。） 有关在上进行大型机测试的最佳实践和详细信息，请参阅博客文章。 AWS

## 工具
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-tools"></a>

**AWS 自动化工具**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [亚马逊 CloudWatch 活动](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)

**Rocket Software 工具**
+ [Rocket Enterprise Developer for Eclipse](https://www.microfocus.com/documentation/enterprise-developer/ed60/ED-Eclipse/GUID-8D6B7358-AC35-4DAF-A445-607D8D97EBB2.html)
+ [Rocket Enterprise Test Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ETS-help/GUID-ECA56693-D9FE-4590-8798-133257BFEBE7.html)
+ [Rocket Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/es_60/)（生产部署）
+ [火箭软件 AccuRev](https://supportline.microfocus.com/documentation/books/AccuRev/AccuRev/6.2/webhelp/wwhelp/wwhimpl/js/html/wwhelp.htm)
+ [Rocket Software Enterprise Suite License Manager](https://www.microfocus.com/documentation/slm/)
+ [Rocket Software Verastream Host Integrator](https://www.microfocus.com/documentation/verastream-host-integrator/)
+ [Rocket Software UFT One](https://admhelp.microfocus.com/uft/en/24.4/UFT_Help/Content/User_Guide/Ch_UFT_Intro.htm)

**其他工具**
+ x3270
+ [py3270](https://pypi.org/project/py3270/)
+ [机器人框架-大型机-3270-库](https://github.com/Altran-PT-GDC/Robot-Framework-Mainframe-3270-Library)

## 操作说明
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-epics"></a>

### 创建 AccuRev SCM 基础架构
<a name="create-the-accurev-scm-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 CloudFormation部署主 AccuRev SCM 服务器。 |  | AWS CloudFormation | 
| 创建 AccuRev 管理员用户。 | 登录 AccuRev SCM 服务器，然后运行 CLI 命令创建管理员用户。 | AccuRev SCM 服务器管理员 | 
| 创建 AccuRev 直播。 | 按顺序创建 AccuRev 从上层流继承的直播：制作、系统集成、团队直播。 | AccuRev SCM 管理员 | 
| 创建开发者 AccuRev 登录账户。 | 使用 AccuRev SCM CLI 命令为大型机开发人员创建 AccuRev 用户登录帐户。 | AccuRev SCM 管理员 | 

### 创建企业开发者 Amazon EC2 启动模板
<a name="create-the-enterprise-developer-ec2-launch-template"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用部署 Amazon EC2 启动模板 CloudFormation。 | 用于 CloudFormation 为企业开发者实例部署 Amazon EC2 启动模板。模板包括 Rocket Enterprise Developer 实例的 Systems Manager Automation 文档。 | AWS CloudFormation | 
| 使用 Amazon EC2 模板创建企业开发者实例。 |  | AWS 管理控制台登录和大型机开发人员技能 | 

### 创建 Enterprise Developer 工具 Docker 映像
<a name="create-the-enterprise-developer-tool-docker-image"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Enterprise Developer 工具 Docker 映像。 | 使用 Docker 命令和 Enterprise Developer 工具 Dockerfile 创建 Docker 映像。 | Docker | 
| 在 Amazon ECR 中创建 Docker 存储库。 | 在 Amazon ECR 控制台上，为 Enterprise Developer Docker 映像创建存储库。 | Amazon ECR | 
| 将 Enterprise Developer 工具 Docker 映像推送到 Amazon ECR。 | 运行 Docker push 命令以推送企业开发人员工具 Docker 映像，以将其保存在 Amazon ECR 的 Docker 存储库中。 | Docker | 

### 创建 Enterprise Test Server Docker 映像
<a name="create-the-enterprise-test-server-docker-image"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Enterprise Test Server Docker 映像。 | 使用 Docker 命令和 Enterprise Test Server Dockerfile 创建 Docker 映像。 | Docker | 
| 在 Amazon ECR 中创建 Docker 存储库。 | 在 Amazon ECR 控制台上，为 Enterprise Test Server Docker 映像创建 Amazon ECR 存储库。 | Amazon ECR | 
| 将 Enterprise Test Server Docker 映像推送到 Amazon ECR。 | 运行 Docker push 命令以在 Amazon ECR 中推送和保存企业测试服务器 Docker 映像。 | Docker | 

### 创建团队直播 CI/CD 管道
<a name="create-the-team-stream-ci-cd-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 CodeCommit 存储库。 | 在 CodeCommit 控制台上，为基础架构和 CloudFormation 代码创建基于 Git 的存储库。 | AWS CodeCommit | 
| 将 CloudFormation 模板和自动化代码上传到 CodeCommit 存储库。 | 运行 Git push 命令将 CloudFormation 模板和自动化代码上传到存储库。 | Git | 
| 使用部署团队直播 CI/CD 管道 CloudFormation。 | 使用准备好的 CloudFormation 模板部署团队直播 CI/CD 管道。 | AWS CloudFormation | 

### 创建系统集成 CI/CD 管道
<a name="create-the-system-integration-ci-cd-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 UFT Docker 映像。 | 使用 Docker 命令和 UFT Dockerfile 创建 Docker 映像。 | Docker | 
| 在 Amazon ECR 中为 UFT 映像创建 Docker 存储库。 | 在 Amazon ECR 控制台上，为 UFT 映像创建 Docker 存储库。 | Amazon ECR | 
| 将 UFT Docker 映像推送到 Amazon ECR。 | 运行 Docker push 命令以在 Amazon ECR 中推送和保存企业测试服务器 Docker 映像。 | Docker | 
| 创建 Verastream Docker 映像。 | 使用 Docker 命令和 Verastream Dockerfile 创建 Docker 映像。 | Docker | 
| 在 Amazon ECR 中为 Verastream 映像创建 Docker 存储库。 | 在 Amazon ECR 控制台上，为 Verastream 映像创建 Docker 存储库。 | Amazon ECR | 
| 使用部署系统集成 CI/CD 管道 CloudFormation。 | 使用准备好的 CloudFormation 模板部署系统集成 CI/CD 管道。 | AWS CloudFormation | 

### 创建生产部署 CI/CD 管道
<a name="create-production-deployment-ci-cd-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用 AWS 快速入门部署企业服务器。 | 要使用部署企业服务器 CloudFormation，请在 “ AWS 快速入门” 中启动企业服务器。 | AWS CloudFormation | 
| 部署生产部署 CI/CD 管道。 | 在 CloudFormation 控制台上，使用 CloudFormation 模板部署生产部署 CI/CD 管道。 | AWS CloudFormation | 

## 相关资源
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-resources"></a>

**参考**
+ [AWS DevOps 博客-使用 Micro Focus 企业套件自动执行数千次大型机测试（Micro](https://aws.amazon.com/blogs/devops/automate-mainframe-tests-on-aws-with-micro-focus/) Focus 现在是 Rocket Software。） AWS 
+ [py3270/py3270存储库 GitHub ](https://github.com/py3270/py3270)
+ [Altran-pt-GDC/robot-Framework-Mainframe-3270-Librar GitHub ](https://github.com/Altran-PT-GDC/Robot-Framework-Mainframe-3270-Library)
+ [欢迎浏览 behave！](https://behave.readthedocs.io/en/latest/index.html)
+ [APN 合作伙伴博客 - 标签：Micro Focus](https://aws.amazon.com/blogs/apn/tag/micro-focus/)（Micro Focus 现更名为 Rocket Software。）
+ [从启动模板启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)

**AWS Marketplace**
+ [Rocket Software UFT One](https://aws.amazon.com/marketplace/pp/B01EGCA5OS?ref_=srh_res_product_title)

**AWS 快速入门**
+ [Rocket 企业服务器开启 AWS](https://aws.amazon.com/quickstart/architecture/micro-focus-enterprise-server/)

# 使用 Micro Focus 企业服务器和 LRS VPSX/MFI 在 AWS 上实现大型机在线打印工作负载的现代化
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi"></a>

*Shubham Roy 和 Kevin Yung，Amazon Web Services*

*Abraham Rondon，Micro Focus*

*Guy Tucker、Levi、Ray 和 Shoup Inc*

## Summary
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-summary"></a>

此模式向您展示了如何使用 Micro Focus Enterprise Server 作为现代化大型机应用程序的运行时，将 LRS（Micro Focus Interface Interface）用作打印服务器，在亚马逊网络服务 VPSX/MFI (AWS) 云上实现业务关键型大型机在线打印工作负载的现代化。该模式基于[更换平台](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)大型机现代化方法。通过这种方法，您可以将大型机在线应用程序迁移到亚马逊弹性计算云 (Amazon EC2)，并将您的大型机数据库（例如 IBM DB2 forz/OS, to Amazon Relational Database Service (Amazon RDS). The authentication and authorization for the modernized print workflow is performed by AWS Directory Service for Microsoft Active Directory, also known as AWS Managed Microsoft AD. The LRS Directory Information Server (LRS/DIS）与 AWS 托管 Microsoft AD 集成，用于打印工作流程的身份验证和授权。通过实现在线打印工作负载的现代化，您可以降低 IT 基础设施成本，减轻维护传统系统的技术债务，消除数据孤岛，通过 DevOps 模型提高灵活性和效率，并利用 AWS 云中的按需资源和自动化。

## 先决条件和限制
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 大型机联机打印或输出管理工作负载
+ 有关如何重建和交付在 Micro Focus 企业服务器上运行的大型机应用程序的基本知识（有关详细信息，请参阅 Micro Focus 文档中的[企业服务器](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)数据表。）
+ LRS 云打印解决方案和概念的基本知识（有关更多信息，请参阅 LRS 文档中的[输出现代化](https://www.lrsoutputmanagement.com/products/modernization-products)。）
+ Micro Focus Enterprise Server 软件和许可证（有关更多信息，请联系 [Micro Focus 销售](https://www.microfocus.com/en-us/contact/contactme)。）
+ LRS VPSX/MFI, LRS/Queue, and LRS/DIS 软件和许可证（欲了解更多信息，请联系 [LRS 销售人员](https://www.lrsoutputmanagement.com/about-us/contact-us/)。）

**注意**  
有关大型机联机打印工作负载的配置注意事项的更多信息，请参阅此模式*其他信息*部分中的*注意事项*。

**产品版本**
+ [Micro Focus Enterprise Server](https://www.microfocus.com/en-us/products/enterprise-server/overview?utm_campaign=7018e000000PgfnAAC&utm_content=SCH-BR-AMC-AppM-AMS&gclid=EAIaIQobChMIoZCQ6fvS9wIVxQN9Ch2MzAOlEAAYASAAEgKx2fD_BwE) 8.0 或更高版本
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/modernization-products/) V1R3 或更高版本

## 架构
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-architecture"></a>

**源技术堆栈**
+ 操作系统 - IBM z/OS
+ 编程语言 - 面向业务的通用语言 (COBOL) 和客户信息控制系统 (CICS) 
+ 数据库 — DB2 适用于 IB z/OS M 的 IBM 信息管理系统 (IMS) 和虚拟存储访问方法 (VSAM)
+ 安全 — 资源访问控制设施 (RACF)、适用于 z/OS 的 CA 绝密和访问控制设施 2 () ACF2
+ 打印和输出管理 — IBM 大型机 z/OS 打印产品（适用于 z/OS、LRS 和 CA View 的 IBM Infoprint 服务器）

**目标技术堆栈**
+ 操作系统 — 在亚马逊上运行的微软 Windows 服务器 EC2
+ 计算 — 亚马逊 EC2
+ 编程语言 - COBOL 和 CICS
+ 数据库 - Amazon RDS
+ 安全性 - AWS 托管的 Microsoft AD
+ 打印和输出管理 - AWS 上的 LRS 打印解决方案
+ 大型机运行时环境 - Micro Focus 企业服务器

**源架构**

下图显示了大型机在线打印工作负载的典型当前状态架构。

![\[生成可视输出的六步流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/293368f5-d102-4f4e-b290-71da4aeff347.png)


下图显示了如下工作流：

1. 用户在基于 COBOL 编写的 IBM CICS 应用程序构建的互动系统 (SoE) 上执行业务事务。

1. SoE 调用大型机服务，该服务将业务交易数据记录在 system-of-records (SoR) 数据库中，例如 IBM DB2 for z/OS。

1. SoR 保留来自 SoE 的业务数据。

1. 用户发起请求以从 CICS SoE 生成打印输出，CICS SoE 启动打印事务应用程序来处理打印请求。 

1. 打印事务应用程序（例如 CICS 和 COBOL 程序）从数据库中提取数据，根据业务需求格式化数据，并生成业务输出（打印数据），例如账单、身份证或贷款对账单。然后，应用程序使用虚拟电信访问方法 (VTAM) 发送打印请求。 z/OS 打印服务器（例如 IBM Infoprint Server）使用 NetSpool 或类似的 VTAM 组件来拦截打印请求，然后使用 JES 输出参数在 JES 缓冲池上创建打印输出数据集。JES 输出参数指定打印服务器用于将输出传输到特定网络打印机的路由信息​​。术语 *VTAM* 是指 z/OS 的 z/OS 通信服务器和系统网络架构 (SNA) 服务元素。

1. 打印输出传输组件将输出打印数据集从 JES 假脱机传输到远程打印机或打印服务器，例如 LRS（如此模式中所示）、IBM Infoprint Server 或电子邮件目标。

**目标架构**

下图显示了部署在 Amazon Web Services Cloud 中的大型机在线打印工作负载的架构：

![\[从启动打印请求到在 AWS 上处理，再到 LRS 打印，流程分为四步。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/07c97b6f-1a86-493d-a4e0-b8321b46f9b7.png)


下图显示了如下工作流：

1. 用户从在线 (CICS) 用户界面发起打印请求以创建打印输出，例如账单、身份证或贷款对账单。

1. 大型机在线应用程序（已[重定向 Amazon EC2](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/)）使用 Micro Focus Enterprise Server 运行时从应用程序数据库中提取数据，对数据应用业务逻辑，格式化数据，然后使用 [Micro Focus CICS 打印出口 (DFHUPRNT) 将数据发送到打印](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOU020.html)目的地。 

1. 应用程序数据库（在 Amazon RDS 上运行的 SoR）保留打印输出的数据。

1. LRS VPSX/MFI 打印解决方案部署在亚马逊上 EC2，其操作数据存储在亚马逊 Elastic Block Store (Amazon EBS) 中。LRS VPSX/MFI 使用TCP/IP-based LRS/Queue transmission agent to collect print data through the Micro Focus CICS Print Exit API (DFHUPRNT) and deliver the data to a specified printer destination. The original TERMID (TERM) that’s used in the modernized CICS application is used as the VPSX/MFI队列名称。 

**注意**  
目标解决方案通常不需要更改应用程序来适应大型机格式化语言，例如 IBM Advanced Function Present（AFP）或 Xerox Line Condition Data Stream（LCDS）。有关在 AWS 上使用 Micro Focus 进行大型机应用程序迁移和现代化的更多信息，请参阅 AWS 文档中的[使用 Micro Focus 在 AWS 上为企业大型机工作负载提供支持](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)。

**AWS 基础设施架构**

下图显示了适用于大型机在线打印工作负载的高可用性且安全的 AWS 基础设施架构：

![\[两个可用区，开启 Micro Focus Enterprise 服务器 EC2、Amazon RDS 和 LRS 打印。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/093555a1-342c-420c-bb90-e9440d2e8650.png)


下图显示了如下工作流：

1. 大型机在线应用程序（用 CICS 或 COBOL 等编程语言编写）使用核心业务逻辑来处理和生成打印输出，例如账单、身份证和贷款对账单。该在线应用程序 EC2 跨两个[可用区 (AZ) 部署在亚马逊上以实现高可用性](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) (HA)，并使用 Micro Focus CICS Print Exit 将打印输出路由到 LRS 以 VPSX/MFI 供最终用户打印。

1. LRS VPSX/MFI 使用TCP/IP-based LRS/Queue transmission agent to collect or capture print data from the Micro Focus online Print Exit programming interface. Online Print Exit passes the necessary information to enable LRS VPSX/MFI to effectively process the print file and dynamically build LRS/Queue命令。
**注意**  
有关用于打印的各种 CICS 应用程序编程方法，以及 Micro Focus Enterprise 服务器和 LRS VPSX/MFI 如何支持它们的更多信息，请参阅此模式*其他信息*部分中的*打印数据捕获*。

1. 
**注意**  
N [etwork Load Balanc](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) er 提供 DNS 名称，用于将 Micro Focus Enterprise Server 与 LRS 集成，VPSX/MFI. : LRS VPSX/MFI supports a Layer 4 load balancer. The Network Load Balancer also does a basic health check on LRS VPSX/MFI并将流量路由到运行状况良好的注册目标。

1. LRS VPSX/MFI 打印服务器部署在亚马逊上， EC2 跨两个可用区，用于 HA，并使用 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) 作为运营数据存储。LRS VPSX/MFI 支持主动-主动和主动-被动服务模式。该架构使用主动-被动对中的多个可用区作为活动和热备用服务器。如果活动实例处于不健康状态，Network Load Balancer 会对 LRS VPSX/MFI EC2 实例执行运行状况检查，并将流量路由到另一个可用区的热备用实例。在每个实例中，打印请求都保存在本地的 LRS Job Queue 中。 EC2 在恢复的情况下，必须重新启动失败的实例，LRS 服务才能继续处理打印请求。
**注意**  
LRS 还 VPSX/MFI 可以在打印机机群级别执行运行状况检查。有关更多信息，请参阅此模式的*其他信息*部分中的*打印机队列运行状况检查*。

1. [AWS 托管 Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) 与集成 LRS/DIS 以执行打印工作流程身份验证和授权。有关更多信息，请参阅此模式的*其他信息*部分中的*打印身份验证和授权*。

1. LRS VPSX/MFI 使用 Amazon EBS 进行块存储。您可以将活动 EC2 实例中的 Amazon EBS 数据作为 point-in-time快照备份到 Amazon S3，然后将其恢复到热备用 EBS 卷。要自动创建、保留和删除 Amazon EBS 卷快照，您可以使用 [Amazon Data Lifecycle Manager](https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/) 设置自动快照的频率并根据 [RTO/RPO 要求](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)恢复快照。

## 工具
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-tools"></a>

**AWS 服务**
+ [Amazon Elastic Block Store (Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) EBS) 提供用于亚马逊实例的块级存储卷。 EC2 EBS 卷的行为类似于原始、未格式化的块储存设备。您可以将这些卷作为设备挂载在实例上。
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。
+ [适用于 Microsoft Active Directory (AD) 的 AWS Directory Service](https://aws.amazon.com/directoryservice/active-directory/)，也称为 AWS Managed Microsoft Active Directory，可使您的目录感知工作负载和 AWS 资源在 AWS 中使用托管 Active Directory。

**其他工具**
+ [LRS VPSX/MFI（Micro Focus 接口）](https://www.lrsoutputmanagement.com/products/modernization-products/)由 LRS 和 Micro Focus 共同开发，可捕获 Micro Focus Enterprise Server JES 假脱机的输出，并将其可靠地传送到指定的打印目的地。
+ LRS 目录信息服务器 (LRS/DIS) 用于打印工作流期间的身份验证和授权。
+ LRS/Queue is a TCP/IP-based LRS/Queue transmission agent, used by LRS VPSX/MFI，通过 Micro Focus 在线 Print Exit 编程接口收集或捕获打印数据。
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html) 是大型机应用程序的应用程序部署环境。它为使用任何版本的 Micro Focus Enterprise Developer 迁移或创建的大型机应用程序提供执行环境。

## 操作说明
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-epics"></a>

### 在 Amazon 上设置 Micro Focus 企业服务器 EC2 并部署大型机在线应用程序
<a name="set-up-micro-focus-enterprise-server-on-amazon-ec2-and-deploy-a-mainframe-online-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Micro Focus Enterprise Server 并部署演示在线应用程序。 | 在亚马逊上设置 Micro Focus Enterprise Server EC2，然后 EC2 按照 Micro Focus 文档中的[教程：CICS Support 中的说明在亚马逊上部署 Micro Focus 账户演示应用程序（ACC](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GMWALK00.html) T 演示）。ACCT 演示应用程序为大型机在线 (CICS) 应用程序，用于创建并启动打印输出。 | 云架构师 | 

### 在亚马逊上设置 LRS 打印服务器 EC2
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获取用于打印的 LRS 产品许可证。 | 要获得 LRS 的 LRS 产品许可证VPSX/MFI, LRS/Queue, and LRS/DIS，请联系 [LRS 输出管理团队](https://www.lrsoutputmanagement.com/about-us/contact-us/)。您必须提供将安装 LRS 产品的 EC2 实例的主机名。 | 构建 lead | 
| 创建亚马逊 EC2 Windows 实例来安装 LRS VPSX/MFI。 | 按照亚马逊 EC2 文档中的[步骤 1：启动实例中的说明启动](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)亚马逊 EC2 Windows 实例。您的实例必须满足 LRS VPSX/MFI 的以下硬件和软件要求： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)上述硬件和软件要求适用于小型打印机队列（大约 500-1000 台）。要获取完整的要求，请咨询您的 LRS 和 AWS 联系人。创建 Windows 实例时，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 在 EC2 实例 VPSX/MFI 上安装 LRS。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 安装 LRS/队列。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 安装 LRS/DIS。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 创建目标组并将 LRS 注册 VPSX/MFI EC2 为目标。 | 按照弹性负载均衡器文档中[为网络负载均衡器创建目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)的说明创建目标组。创建目标组时，请执行以下操作:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 创建网络负载均衡器。 | 按照弹性负载均衡器文档中[创建网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)的说明进行操作。您的 Network Load Balancer 将流量从 Micro Focus 企业服务器路由到 LRS VPSX/MFI EC2。创建网络负载均衡器时，在**侦听器和路由**页面上执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 将 Micro Focus 企业服务器与 LRS VPSX/MFI 和 LRS/Queue
<a name="integrate-micro-focus-enterprise-server-with-lrs-vpsx-mfi-and-lrs-queue"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 Micro Focus 企业服务器以进行 LRS/Queue 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 使 CICS 打印出口 (DFHUPRNT) 可用于 Micro Focus Enterprise Server 初始化。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)**验证 Micro Focus Enterprise Server 是否已检测到 CICS Print Exit (DFHUPRNT)**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 将 CICS 打印机的终端 ID (TERMIDs) 定义为 Micro Focus 企业服务器。 | **在 Micro Focus Enterprise Server 中启用 3270 打印**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)**在 Micro Focus Enterprise Server 中定义 CICS 打印机终端**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 在 Micro Focus Enterprise Server 和 LRS VPSX/MFI 中设置打印机和打印用户
<a name="set-up-printers-and-print-users-in-micro-focus-enterprise-server-and-lrs-vpsx-mfi"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 LRS VPSX 中创建打印队列。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)打印队列必须等同于 Micro Focus Enterprise Server 中 TERMIDs 创建的打印队列。 | 云架构师 | 
| 在 LRS VPSX/MFI 中创建打印用户。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 设置身份验证和授权
<a name="set-up-print-authentication-and-authorization"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用用户和组创建 AWS Managed Microsoft AD 域。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 
| 加入 LRS 加 VPSX/MFI EC2 入 AWS 托管的微软 AD 域。 | [自动](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-systems-manager-dx-domain/)加入您的 AWS 托管微软 AD 域（AWS 知识中心文档）或[手动](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)加入 LR VPSX/MFI EC2 S（AWS Directory Service 文档）。 | 云架构师 | 
| 配置并 LRS/DIS 与 AWS 托管的 Microsoft AD 集成。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 云架构师 | 

### 测试在线打印工作流
<a name="test-an-online-print-workflow"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 从 Micro Focus ACCT 演示应用程序发起在线打印请求。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)“打印请求已安排”消息出现在屏幕底部。这证实了在线打印请求是从 ACCT Demo 应用程序生成的，并已发送到 LRS VPS/MFI 进行打印处理。  | 云架构师 | 
| 检查 LRS VPSX/MFI 中的打印输出。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)现在，您可以看到账户对账单的打印输出，其中包含账号、姓氏、名字、地址、电话、发卡数量、发行日期、金额和余额等列。有关示例，请参阅此模式的 **online\$1print\$1output** 附件。 | 测试工程师 | 

## 相关资源
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-resources"></a>
+ [LRS 输出现代化](https://www.lrsoutputmanagement.com/products/modernization-products)（LRS 文档）
+ [VTAM 网络概念](https://www.ibm.com/docs/en/zos/2.1.0?topic=guide-vtam-networking-concepts)（IBM 文档）
+ [逻辑单元 (LU) 类型摘要](https://www.ibm.com/docs/en/wsfz-and-o/1.1?topic=installation-summary-logical-unit-lu-types)（IBM 文档）
+ [ANSI 和机器托架控制](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)（IBM 文档）
+ [使用 Micro Focus 在 AWS 上为企业大型机工作负载提供支持](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)（Amazon Web Services Partner Network 博客）
+ [使用 Amazon A EC2 uto Scaling 和 Systems Manager 构建 Micro Focus 企业服务器 PAC](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.html)（AWS Prescriptive Guidence 文档）
+ [Advanced Function Presentation (AFP)数据流](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)（IBM 文档）
+ [线路条件数据流 (LCDS)](https://www.compart.com/en/lcds)（比较文档）

## 附加信息
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-additional"></a>

**注意事项**

在现代化改造过程中，您可以考虑大型机联机流程的各种配置及其生成的输出。每个使用大型机平台的客户和供应商都根据直接影响打印的特殊要求对平台进行了定制。例如，您当前的平台可能会将 IBM 高级功能演示 (AFP) 或 Xerox 线路条件数据流 (LCDS) 合并到当前工作流程中。此外，[大型机回车控制字符](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)和[通道命令字](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)可能会影响打印页面的外观，可能需要特殊处理。作为现代化规划过程的一部分，我们建议您评测并了解特定打印环境中的配置。

**打印数据采集**

本节总结了可在 IBM 大型机环境中用于打印的 CICS 应用程序编程方法。LRS VPSX/MFI 组件提供了允许相同的应用程序以相同的方式创建数据的技术。下表描述了在 AWS 和带有 LR VPSX/MFI S 打印服务器的 Micro Focus Enterprise Server 中运行的现代化 CICS 应用程序如何支持每种应用程序编程方法。


| 
| 
| 方法 | 说明 | 在现代化环境中支持该方法 | 
| --- |--- |--- |
| 执行 CICS 发送文本或执行 CICS 发送地图。 | 这些 CICS 和 VTAM 方法负责创建 3270/SCS 打印数据流并将其传送到 LUTYPE0 和打印设备。 LUTYPE1 LUTYPE3  | Micro Focus 在线打印出口 (DFHUPRNT) 应用程序接口 (API) 允许 VPSX/MFI 在使用这两种方法创建 3270/SCS 打印数据流之前处理打印数据。 | 
| 执行 CICS SEND TEXT 或执行 CICS SEND MAP（使用第三方 IBM 大型机软件）。 | CICS 和 VTAM 方法负责创建 3270/SCS 打印数据流并将其传送到 LUTYPE0 和打印设备。 LUTYPE1 LUTYPE3 第三方软件产品拦截打印数据，将数据转换为带有 ASA/MCH 控制字符的标准打印格式数据，并将数据放在 JES 线轴上，由使用 JES 的大型机打印系统进行处理。 | Micro Focus 在线打印退出 (DFHUPRNT) API 允许 VPSX/MFI 在使用这两种方法创建 3270/SCS 打印数据流之前处理打印数据。 | 
| 执行 CICS SPOOLOPEN  | CICS 应用程序使用此方法将数据直接写入 JES 假脱机。然后，这些数据就可以由使用 JES 的基于大型机的打印系统进行处理。 | Micro Focus Enterprise Server 将数据假脱机到企业服务器缓冲池，在那里可以通过批量打印出口 () 进行处理， VPSX/MFI 批量打印出口 (LRSPRTE6) 将数据后台处理到 VPSX。 | 
| DRS/API | LRS 提供的编程接口用于将打印数据写入 JES。 | VPSX/MFI 提供了一个替换接口，可将打印数据直接后台打印到 VPSX。 | 

**打印机队列运行状况检查**

LRS VPSX/MFI (LRS LoadX) 可以执行深入的运行状况检查，包括设备管理和操作优化。设备管理可以检测打印机设备中的故障，并将打印请求路由到正常运行的打印机。有关打印机队列的深入运行状况检查的详细信息，请参阅产品许可证附带的 LRS 文档。

**打印身份验证和授权**

LRS/DIS enables LRS applications to authenticate user IDs and passwords by using Microsoft Active Directory or an LDAP server. In addition to basic print authorization, LRS/DIS还可以在以下用例中应用粒度级别的打印安全控制：
+ 管理谁可以浏览打印机作业。
+ 管理其他用户作业的浏览级别。
+ 管理操作任务。例如，命令级安全，例如保留/释放、清除、修改、复制和重新路由。安全性可以通过用户 ID 或组（类似于 AD 组或 LDAP 组）来设置。 

## 附件
<a name="attachments-924cdae7-9265-4fc9-8e5e-bb2da5368e7e"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/attachments/attachment.zip)

# 使用 Transfer Family 将大型机文件直接移动到 Amazon S3
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family"></a>

*Luis Gustavo Dantas，Amazon Web Services*

## Summary
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-summary"></a>

作为现代化之旅的一部分，您可能会面临在本地服务器和 Amazon Web Services (AWS) 云之间传输文件的挑战。从大型机传输数据可能是一项重大挑战，因为大型机通常无法访问 Amazon Simple Storage Service (Amazon S3)、Amazon Elastic Block Store (Amazon EBS) 或 Amazon Elastic File System (Amazon EFS) 等现代数据存储。

许多客户使用中间暂存资源（如本地 Linux、Unix 或 Windows 服务器）将文件传输到 AWS Cloud。您可以通过使用 AWS Transfer Family 和 Secure Shell (SSH) 文件传输协议 (SFTP) 将大型机文件直接上传到 Amazon S3 来避免这种间接方法。

## 先决条件和限制
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 具有可由您的旧平台访问的子网的虚拟私有云（VPC）
+ 您 VPC 的 Transfer Family 端点
+ 大型机虚拟存储访问方法 (VSAM) 文件转换为[连续的固定长度文件](https://www.ibm.com/docs/en/zos/2.1.0?topic=reports-converting-vb-fb)（IBM 文档）

**限制**
+ SFTP 默认以二进制模式传输文件，这意味着文件上传到 Amazon S3 时会保留 EBCDIC 编码。如果您的文件不包含二进制或打包数据，那么您可以使用 **sftp**[ ascii 子命令](https://www.ibm.com/docs/en/zos/2.3.0?topic=version-what-zos-openssh-supports)（IBM 文档）在传输过程中将文件转换为文本。
+ 您必须[解压包含打包和二进制内容的大型机文件](https://apg-library.amazonaws.com/content/f5907bfe-7dff-4cd0-8523-57015ad48c4b) (AWS Prescriptive Guidance)，才能在目标环境中使用这些文件。
+ Amazon S3 对象的大小范围从最小 0 字节到最大 5 TB。有关 Amazon S3 功能的更多信息，请参阅[亚马逊 S3 FAQs](https://aws.amazon.com/s3/faqs/?nc1=h_ls)。

## 架构
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-architecture"></a>

**源技术堆栈**
+ 作业控制语言 (JCL)
+ z/OS Unix shell 和 ISPF
+ SFTP
+ VSAM 和平面文件

**目标技术堆栈**
+ Transfer Family
+ Amazon S3
+ Amazon Virtual Private Cloud(Amazon VPC)

**目标架构**

下图显示了将 Transfer Family 与 SFTP 结合使用以将大型机文件直接上传到 S3 存储桶的参考架构。

![\[结合使用 Transfer Family 与 SFTP，将大型机文件直接上传至 S3 存储桶\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/1f4fa1fd-b681-41bc-81d8-d556426b14c2/images/110491d5-b58d-4451-8de9-e742756bb192.png)


下图显示了如下工作流：

1. 您可以使用 JCL 作业通过 Direct Connect 将大型机文件从旧版大型机传输到 Amazon Web Services Cloud。

1. Direct Connect 使您的网络流量能够保留在 AWS 全球网络上，并绕过公共互联网。Direct Connect 还提高了网络速度，从 50 Mbps 开始，扩展到 100 Gbps。

1. VPC 端点无需使用公共互联网即可在您的 VPC 资源和支持的服务之间建立连接。对 Transfer Family 和 Amazon S3 的访问通过位于两个私有子网和可用区中的弹性网络接口实现高可用性。

1. Transfer Family 对用户进行身份验证，并使用 SFTP 从旧环境接收文件并将其移动到 S3 存储桶。

**自动化和扩缩**

Transfer Family 服务到位后，您可以使用 JCL 作业作为 SFTP 客户端，将无限数量的文件从大型机传输到 Amazon S3。当您准备好传输大型机文件时，还可以使用大型机批处理作业计划程序运行 SFTP 作业，从而自动执行文件传输。

## 工具
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-tools"></a>
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 可帮助您将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络类似于您在自己的数据中心内运行的传统网络，具有使用 AWS 可扩展基础设施的优势。
+ [AWS Transfer Fam](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html) ily 使您能够使用 SFTP、FTPS 和 FTP 协议安全地将定期 business-to-business文件传输扩展到亚马逊 S3 和亚马逊 EFS。

## 操作说明
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-epics"></a>

### 创建 S3 存储桶和访问策略
<a name="create-the-s3-bucket-and-the-access-policy"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | [创建一个 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)来托管您从旧环境传输的文件。 | 常规 AWS | 
| 创建 IAM 角色和策略。 | Transfer Family 使用您的 AWS Identity and Access Management (IAM) 角色授予对您之前创建的 S3 存储桶的访问权限。[创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)，包含以下 [IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)：<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "UserFolderListing",<br />            "Action": [<br />                "s3:ListBucket",<br />                "s3:GetBucketLocation"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": [<br />                "arn:aws:s3:::<your-bucket-name>"<br />            ]<br />        },<br />        {<br />            "Sid": "HomeDirObjectAccess",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",<br />                "s3:GetObjectAcl",<br />                "s3:GetObject",<br />                "s3:DeleteObjectVersion",<br />                "s3:DeleteObject",<br />                "s3:PutObjectAcl",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": "arn:aws:s3:::<your-bucket-name>/*"<br />        }<br />    ]<br />}</pre>您必须在创建 IAM 角色时选择“传输使用案例”。 | 常规 AWS | 

### 定义传输服务
<a name="define-the-transfer-service"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 SFTP 服务器。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html)有关如何设置 SFTP 服务器的更多信息，请参阅[创建启用了 SFTP 的服务器](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)（AWS Transfer Family 用户指南）。 | 常规 AWS | 
| 获取服务器地址。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 常规 AWS | 
| 创建 SFTP 客户端密钥对。 | 为[微软 Windows](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#windows-ssh) 或创建 SSH 密钥对[macOS/Linux/UNIX](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#macOS-linux-unix-ssh)。 | 常规 AWS、SSH | 
| 创建 SFTP 用户。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 常规 AWS | 

### 传输大型机文件
<a name="transfer-the-mainframe-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将 SSH 私钥发送到大型机。 | 使用 SFTP 或 SCP 将 SSH 私钥发送到旧版环境。SFTP 示例：<pre>sftp [USERNAME@mainframeIP]<br />[password]<br />cd [/u/USERNAME]<br />put [your-key-pair-file]</pre>SCP 示例：<pre>scp [your-key-pair-file] [USERNAME@MainframeIP]:/[u/USERNAME]</pre>接下来，将 SSH 密钥存储在 z/OS Unix 文件系统中，该用户名稍后将运行文件传输批处理作业（例如，`/u/CONTROLM`）。 有关 z/OS Unix 外壳的更多信息，请参见外[ z/OS 壳简介](https://www.ibm.com/docs/en/zos/2.2.0?topic=shells-introduction-zos)（IBM 文档）。 | 大型机、 z/OS Unix 外壳、FTP、SCP | 
| 创建 JCL SFTP 客户端。 | 由于大型机没有本机 SFTP 客户端，因此必须使用 BPXBATCH 实用程序从 Unix 外壳中运行 SFTP 客户端。 z/OS 在 ISPF 编辑器中，创建 JCL SFTP 客户端。例如：<pre>//JOBNAM JOB ...<br />//**********************************************************************<br />//SFTP EXEC PGM=BPXBATCH,REGION=0M <br />//STDPARM DD * <br />SH cp "//'MAINFRAME.FILE.NAME'" filename.txt; <br />echo 'put filename.txt' > uplcmd; <br />sftp -b uplcmd -i ssh_private_key_file ssh_username@<transfer service ip or DNS>; <br />//SYSPRINT DD SYSOUT=* <br />//STDOUT DD SYSOUT=* <br />//STDENV DD * <br />//STDERR DD SYSOUT=*</pre>有关如何在 z/OS Unix 外壳中运行命令的更多信息，请参阅 [BPXBATCH 实用程序](https://www.ibm.com/docs/en/zos/2.2.0?topic=ispf-bpxbatch-utility)（IBM 文档）。有关如何在 z/OS 中创建或编辑 JCL 作业的更多信息，请参阅[什么是 ISPF？](https://www.ibm.com/docs/en/zos-basic-skills?topic=interfaces-what-is-ispf)和 [ISPF 编辑器](https://www.ibm.com/docs/en/zos-basic-skills?topic=ispf-editor)（IBM 文档）。 | JCL、大型机、Unix 外壳 z/OS  | 
| 运行 JCL SFTP 客户端。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html)有关如何检查批处理作业活动的更多信息，请参阅 [z/OS SDSF 用户指南](https://www.ibm.com/docs/en/zos/2.4.0?topic=sdsf-zos-users-guide)（IBM 文档）。 | 大型机、JCL、ISPF | 
| 验证文件传输。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 常规 AWS | 
| 自动执行 JCL SFTP 客户端。 | 使用作业调度程序自动触发 JCL SFTP 客户端。您可以使用大型机作业调度程序（例如 [BMC Control-M](https://www.bmcsoftware.pt/it-solutions/control-m.html) 或 [CA Workload Automation](https://www.broadcom.com/products/mainframe/workload-automation/ca7)），根据时间和其他批处理作业依赖性自动执行文件传输的批处理作业。 | 作业调度程序 | 

## 相关资源
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-resources"></a>
+ [AWS Transfer Family 的工作原理](https://docs.aws.amazon.com/transfer/latest/userguide/how-aws-transfer-works.html)

# 优化 AWS Blu Age 现代化应用程序的性能
<a name="optimize-performance-aws-blu-age-modernized-application"></a>

*Vishal Jaswani、Manish Roy 和 Himanshu Sah，Amazon Web Services*

## Summary
<a name="optimize-performance-aws-blu-age-modernized-application-summary"></a>

使用 AWS Blu Age 进行现代化改造的大型机应用程序需要在部署到生产环境之前进行功能和性能等效性测试。在性能测试中，经过现代化的应用程序的运行速度可能比传统系统慢，尤其是在处理复杂的批处理作业时。之所以存在这种差异，是因为大型机应用程序采用单体架构，而现代应用程序则采用多层架构。这种模式提供了一些优化技术，可以解决通过在 Blu Age 中使用[自动重构实现现代化的应用程序的 AWS](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)这些性能差距。

该模式使用具有原生 Java 和数据库调整功能的 AWS Blu Age 现代化框架来识别和解决性能瓶颈。该模式描述了如何使用分析和监控来识别性能问题，包括指标（例如 SQL 执行时间、内存利用率和 I/O 模式）。然后阐述了如何实施针对性优化，包括数据库查询重构、缓存技术应用以及业务逻辑优化。

批处理时间的缩短和系统资源使用率的提升，助您在现代化系统中实现与大型机相当的性能水平。在向基于云的现代架构过渡期间，这种方法保持了功能等效性。

要使用此模式，请按照[操作说明](#optimize-performance-aws-blu-age-modernized-application-epics)部分的说明，设置系统并识别性能热点，然后应用[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分详述的优化技术。

## 先决条件和限制
<a name="optimize-performance-aws-blu-age-modernized-application-prereqs"></a>

**先决条件**
+  AWS 蓝光时代的现代化应用程序
+ 许可[JProfiler 证](https://www.ej-technologies.com/store/jprofiler)
+ 安装数据库客户端和性能分析工具的管理权限
+ AWS Blu Age [3 级认证](https://bluinsights.aws/certification/)
+ 对 AWS Blu Age 框架、生成的代码结构和 Java 编程有中级水平的了解

**限制**

以下优化功能和特性超出此模式的范围：
+ 应用程序层之间的网络延迟优化
+ 通过亚马逊弹性计算云 (Amazon) 实例类型和存储优化实现基础设施级优化 EC2
+ 并发用户负载测试和压力测试

**产品版本**
+ JProfiler 版本 13.0 或更高版本（我们推荐最新版本）
+ pgAdmin 版本 8.14 或更高版本

## 架构
<a name="optimize-performance-aws-blu-age-modernized-application-architecture"></a>

此模式使用 JProfiler 和 pgadmin 等工具为 AWS Blu Age 应用程序设置分析环境。它支持通过 B AWS lu Age APIs 提供的 DAOManager 和 SQLExecution生成器进行优化。

本节剩余部分将详细说明如何识别现代化应用程序的性能热点，并提供相应的优化策略及示例。执行[操作说明](#optimize-performance-aws-blu-age-modernized-application-epics)部分的步骤时，可参考此信息以获取进一步指导。

**识别现代化大型机应用程序中的性能热点**

在现代化大型机应用程序中，*性能热点*是代码中导致严重降速或效率低下的特定区域。这些热点通常是大型机与现代化应用程序之间的架构差异造成的。要识别这些性能瓶颈并优化现代化应用程序的性能，您可以使用三种技术：SQL 日志记录、查询`EXPLAIN`计划和 JProfiler 分析。

*热点识别技术：SQL 日志记录*

现代 Java 应用程序，包括那些使用 AWS Blu Age 实现现代化的应用程序，都具有记录 SQL 查询的内置功能。您可以在 Bl AWS u Age 项目中启用特定的记录器来跟踪和分析应用程序执行的 SQL 语句。这种技术对于识别效率低下的数据库访问模式（例如单个查询过多、数据库调用结构不佳）特别有用，可通过批量处理或改进查询来优化。

要在 AWS Blu Age 现代化应用程序中实现 SQL 日志记录，请将`application.properties`文件中 SQL 语句`DEBUG`的日志级别设置为，以捕获查询执行的详细信息：

```
level.org.springframework.beans.factory.support.DefaultListableBeanFactory : WARN
level.com.netfective.bluage.gapwalk.runtime.sort.internal: WARN
level.org.springframework.jdbc.core.StatementCreatorUtils: DEBUG
level.com.netfective.bluage.gapwalk.rt.blu4iv.dao: DEBUG
level.com.fiserv.signature: DEBUG
level.com.netfective.bluage.gapwalk.database.support.central: DEBUG
level.com.netfective.bluage.gapwalk.rt.db.configuration.DatabaseConfiguration: DEBUG
level.com.netfective.bluage.gapwalk.rt.db.DatabaseInteractionLoggerUtils: DEBUG
level.com.netfective.bluage.gapwalk.database.support.AbstractDatabaseSupport: DEBUG
level.com.netfective.bluage.gapwalk.rt: DEBUG
```

利用记录的数据监控高频和低效的查询，从而确定优化目标。请重点关注批处理过程中的查询，因为它们通常对性能影响最大。

*热点识别技术：查询 EXPLAIN 计划*

此方法使用了关系数据库管理系统的查询规划功能。可以使用不同命令（例如 PostgreSQL 或 MySQL 中的 `EXPLAIN`、Oracle 中的 `EXPLAIN PLAN`）检查您的数据库打算如何运行给定查询。这些命令的输出结果能提供有关查询执行策略的宝贵信息，包括是否会使用索引或执行全表扫描。这些信息对于优化查询性能至关重要，尤其是在适当建立索引能显著缩短执行时间的情况下。

使用特定于您的数据库的 `EXPLAIN` 命令，从应用程序日志中提取重复性最高的 SQL 查询，并分析低效查询的执行路径。以下是 PostgreSQL 数据库的示例。

查询：

```
SELECT * FROM tenk1 WHERE unique1 < 100;
```

`EXPLAIN` 命令：

```
EXPLAIN SELECT * FROM tenk1 where unique1 < 100;
```

输出：

```
Bitmap Heap Scan on tenk1 (cost=5.06..224.98 rows=100 width=244) 
Recheck Cond: (unique1 < 100) 
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..5.04 rows=100 width=0)
Index Cond: (unique1 < 100)
```

可以如下所示解释 `EXPLAIN` 输出：
+ 请从最内层开始，按照由内而外的方式阅读 `EXPLAIN` 计划的操作流程（从下至上）。
+ 寻找关键术语。例如，`Seq Scan` 表示全表扫描，`Index Scan` 显示索引使用情况。
+ 检查成本值：第一个数字是启动成本，第二个数字是总成本。
+ 如需预计的输出行数，请参阅 `rows` 值。

在这个示例中，查询引擎使用索引扫描来查找匹配的行，然后仅获取这些行（`Bitmap Heap Scan`）。尽管单行访问的成本更高，但比整表扫描更高效。

`EXPLAIN` 计划输出中的表扫描操作表明缺少索引。优化时需要创建适当的索引。

*热点识别技术： JProfiler 分析*

JProfiler 是一款全面的 Java 分析工具，可通过识别缓慢的数据库调用和 CPU 密集型调用来帮助您解决性能瓶颈。该工具在识别低效的 SQL 查询和内存使用问题方面尤为有效。

查询分析示例：

```
select evt. com.netfective.bluage.gapwalk.rt.blu4iv.dao.Blu4ivTableManager.queryNonTrasactional
```

“ JProfiler 热点” 视图提供以下信息：
+ **时间**列
  + 显示执行总时长（例如 329 秒）
  + 显示占应用程序总时间的百分比（例如 58.7%）
  + 帮助确定最耗时的操作
+ **平均时间**列
  + 显示每次执行的持续时间（例如 2,692 微秒）
  + 表示单个操作的性能
  + 帮助发现运行缓慢的单个操作
+ **事件**列
  + 显示执行次数（例如 122,387 次）
  + 表示操作频率
  + 帮助识别频繁调用的方法

对于结果示例：
+ 高频：122,387 次执行表明存在优化空间
+ 性能隐忧：平均时间为 2,692 微秒表明效率低下
+ 严重影响：占总时间的 58.7% 表明存在重大瓶颈

JProfiler 可以分析应用程序的运行时行为，以揭示通过静态代码分析或 SQL 日志记录可能不明显的热点。这些指标可帮助识别需要优化的操作，并确定最有效的优化策略。有关 JProfiler 功能的更多信息，请参阅[JProfiler 文档](https://www.ej-technologies.com/resources/jprofiler/help/doc/main/introduction.html)。

将这三种技术（SQL 日志记录、查询`EXPLAIN`计划和 JProfiler）结合使用时，可以全面了解应用程序的性能特征。通过识别和解决最关键的性能热点，可以弥合原始大型机应用程序与基于云的现代化系统之间的性能差距。

确定应用程序的性能热点后，可以应用优化策略，我们将在下一节进行相关介绍。

**针对大型机现代化的优化策略**

本节主要概述针对大型机系统中已现代化的应用程序的关键优化策略。它侧重于三种策略：使用现有缓存 APIs、实现有效缓存和优化业务逻辑。

*优化策略：使用现有的 APIs*

AWS Blu Age 提供了几个强大 APIs 的 DAO 接口，你可以用它们来优化性能。两个主要接口—— DAOManager 和 SQLExecution生成器——提供了增强应用程序性能的功能。

**DAOManager**

DAOManager 充当现代化应用程序中数据库操作的主要接口。其中提供多种方法来增强数据库操作和提升应用程序性能，尤其适用于简单的创建、读取、更新和删除（CRUD）操作以及批量处理。
+ **使用 SetMaxResults。**在 DAOManager API 中，您可以使用**SetMaxResults**方法指定在单个数据库操作中要检索的最大记录数。默认情况下，一次只能 DAOManager 检索 10 条记录，这在处理大型数据集时可能会导致多次数据库调用。当您的应用程序需要处理大量记录，并且当前正在发出多个数据库调用来检索这些记录时，请使用此优化。这在批处理场景中特别有用，尤其是在遍历大型数据集时。在以下示例中，左侧代码（优化前）使用默认的数据检索值：10 条记录。右边的代码（优化后）设置**setMaxResults**为一次检索 100,000 条记录。  
![\[使用 SetMaxResults 避免多次数据库调用的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/beb9623e-e7a8-45ef-adc6-19a249224b05.png)
**注意**  
请谨慎选择较大的批处理大小并检查对象尺寸，因为此优化会增加内存占用。
+ **替换 SetOnGreatorOrEqual 为 SetOnEqual。**这种优化涉及更改用于设置记录检索条件的方法。该**SetOnGreatorOrEqual**方法检索大于或等于指定值的记录，而仅**SetOnEqual**检索与指定值完全匹配的记录。

  当您知道需要精确匹配并且当前正在使用**SetOnEqual**后面跟着 **readNextEqual()** 的**SetOnGreatorOrEqual**方法时，请按以下代码示例所示使用。这种优化可以减少不必要的数据检索。  
![\[使用 SetOnEqual 根据精确匹配检索记录的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/5ce0dac9-f281-4862-a71f-1614493a83f0.png)
+ **使用批量写入和更新操作。**可以使用批量操作将多个写入或更新操作组合成一个数据库事务。这样可以减少数据库调用次数，并显著提高涉及多条记录的操作的性能。

  在以下示例中，左侧代码在一个循环中执行写入操作，这会降低应用程序的性能。可以使用批量写入操作来优化此代码：在 `WHILE` 循环的每次迭代中，将记录添加到批次中，直到批次大小达到预定大小 100。然后，当批次达到预定的批次大小时，您可以将其刷新，然后将剩余的记录刷新到数据库中。这在处理需要更新的大型数据集时尤其有用。  
![\[将多个操作组合成一个数据库事务的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/e3bd60d4-06f5-4c1c-9cbd-463f6835a1ba.png)
+ **添加索引。**添加索引属于数据库级别的优化，可以显著提高查询性能。索引可助力数据库快速定位具有特定列值的行，而无需扫描整个表。对 `WHERE` 子句、`JOIN` 条件或 `ORDER BY` 语句中经常使用的列使用索引。在处理大型数据表或需要快速数据检索时，这一点尤为重要。

**SQLExecution生成器**

SQLExecutionBuilder 是一个灵活的 API，您可以使用它来控制将要执行的 SQL 查询，`INSERT`通过使用和使用`SELECT`动态表名仅获取某些列。在以下示例中， SQLExecutorBuilder 使用您定义的自定义查询。

![\[在自定义查询中使用 SQLExecutor Builder 的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/364e9fb1-0cbc-47d0-936d-46fb3b48b608.png)


**在 DAOManager 和 SQLExecution生成器之间进行选择**

这两者之间的选择 APIs 取决于您的具体用例：
+  DAOManager 当你希望 AWS Blu Age Runtime 生成 SQL 查询而不是自己编写查询时使用。
+ 当您需要编写 SQL 查询以利用数据库特定的功能或编写最佳 SQL 查询时，请选择 B SQLExecution uilder。

*优化策略：应用缓存技术*

在现代化应用程序中，实施有效的缓存策略可以显著减少数据库调用次数并提高响应速度。这有助于弥合大型机与云环境之间的性能差距。

在 AWS Blu Age 应用程序中，简单的缓存实现使用内部数据结构，例如哈希映射或数组列表，因此您不必设置需要成本和代码重组的外部缓存解决方案。这种方法对经常被访问但变更频率较低的数据特别有效。在实施缓存策略时，请考虑内存限制和更新模式，以确保缓存的数据保持一致并带来实际的性能优势。

成功缓存的关键在于确定要缓存哪些数据。在以下示例中，左侧代码始终从表中读取数据，而右侧代码仅在本地哈希映射中没有给定键的值时才从表中读取数据。`cacheMap` 是一个哈希映射对象，在程序上下文中创建，并在程序上下文的清理方法中清除。

使用以下方法进行缓存 DAOManager：

![\[使用 DAOManager进行缓存优化的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/4efd3d22-c694-4f7d-a543-2bed341d1651.png)


使用 SQLExecution生成器缓存：

![\[使用 SQLExecution Builder 进行缓存优化的示例。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/c8964804-96eb-4e26-b2bf-8742e62b4c33.png)


*优化策略：业务逻辑优化*

业务逻辑优化的重点是重构从 AWS Blu Age 自动生成的代码，以更好地与现代架构功能保持一致。当生成的代码保持与传统大型机代码相同的逻辑结构时，这就变得必要了，因为这种逻辑结构可能并不适用于现代系统。目标是在保持与原应用程序功能等效性的同时，提高性能。

这种优化方法不限于简单的 API 调整和缓存策略。还涉及更改应用程序处理数据以及与数据库交互的方式。常见的优化措施包括：避免为简单更新执行不必要的读取操作、删除冗余的数据库调用，以及重组数据访问模式，以更好地与现代应用程序架构保持一致。下面是几个示例：
+ **直接在数据库中更新数据。**使用直接 SQL 更新来重构业务逻辑，而不是使用循环进行多项 DAOManager 操作。例如，以下代码（左侧）会进行多次数据库调用，并占用过多内存。具体而言，它在循环中执行多次数据库读写操作，采用逐条更新而非批量处理，且每次迭代都会创建不必要的对象。

  以下经过优化的代码（右侧）仅使用一次直接 SQL 更新操作。具体来说，它使用单个数据库调用（而非多个调用），并且不需要循环，因为所有更新都在单个语句中处理。这种优化提高了性能和资源利用率，并降低了复杂性。它能防止 SQL 注入，提供更好的查询计划缓存，并有助于提高安全性。  
![\[使用直接 SQL 更新而不是循环 DAOManager 操作来重构代码。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/7d0a7879-8db2-4cc5-b41c-ee370b3f22e5.png)
**注意**  
始终使用参数化查询来防止 SQL 注入，并确保适当管理事务。
+ **减少冗余的数据库调用。**冗余的数据库调用会严重影响应用程序性能，尤其是在循环中发生时。一种简单但有效的优化技巧是，避免多次重复执行相同的数据库查询。以下代码比较演示了将 `retrieve()` 数据库调用移至循环之外可如何防止重复执行相同的查询，从而提高效率。  
![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/da9c15f4-bcf1-4827-b91a-73212fe35cca.png)
+ **使用 SQL `JOIN` 子句减少数据库调用****。**实现 SQLExecution Builder 以最大限度地减少对数据库的调用。 SQLExecutionBuilder 可以更好地控制 SQL 的生成，对于 DAOManager 无法有效处理的复杂查询特别有用。例如，以下代码使用多个 DAOManager 调用：

  ```
  List<Employee> employees = daoManager.readAll();
  for(Employee emp : employees) {
      Department dept = deptManager.readById(emp.getDeptId());  // Additional call for each employee
      Project proj = projManager.readById(emp.getProjId());     // Another call for each employee
      processEmployeeData(emp, dept, proj);
  }
  ```

  优化的代码在 SQLExecution Builder 中使用单个数据库调用：

  ```
  SQLExecutionBuilder builder = new SQLExecutionBuilder();
  builder.append("SELECT e.*, d.name as dept_name, p.name as proj_name");
  builder.append("FROM employee e");
  builder.append("JOIN department d ON e.dept_id = d.id");
  builder.append("JOIN project p ON e.proj_id = p.id");
  builder.append("WHERE e.status = ?", "ACTIVE");
  
  List<Map<String, Object>> results = builder.execute();  // Single database call
  for(Map<String, Object> result : results) {
      processComplexData(result);
  }
  ```

*组合使用优化策略*

这三种策略协同作用： APIs 提供高效数据访问的工具，缓存可减少重复数据检索的需求，业务逻辑优化可确保以最有效的方式使用 APIs 这些工具。定期监控和调整这些优化措施可确保持续提升性能，同时保持现代化应用程序的可靠性和功能。成功的关键在于，了解何时以及如何根据应用程序的特征和性能目标应用每种策略。

## 工具
<a name="optimize-performance-aws-blu-age-modernized-application-tools"></a>
+ [JProfiler](https://www.ej-technologies.com/jprofiler)是一款专为开发人员和性能工程师设计的 Java 分析工具。它分析 Java 应用程序并帮助识别性能瓶颈、内存泄漏和线程问题。 JProfiler 提供 CPU、内存和线程分析以及数据库和 Java 虚拟机 (JVM) 监控，以深入了解应用程序行为。
**注意**  
作为替代方案 JProfiler，你可以使用 [Java Visual](https://visualvm.github.io/) VM。这是适用于 Java 应用程序的免费开源性能分析和监控工具，可实时监控 CPU 使用率、内存消耗、线程管理和垃圾回收统计信息。由于 Java VisualVM 是一个内置的 JDK 工具，因此它比 JProfiler 满足基本分析需求更具成本效益。
+ [pgAdmin](https://www.pgadmin.org/) 是 PostgreSQL 的开源管理和开发工具。它提供了一个图形界面，可帮助您创建、维护和使用数据库对象。可以使用 pgAdmin 执行各种任务，从编写简单的 SQL 查询，到开发复杂的数据库，不一而足。其功能包括：突出显示语法的 SQL 编辑器、服务器端代码编辑器、SQL/Shell/批处理任务的调度代理，以及对 PostgreSQL 所有功能的支持，适合新手和经验丰富的 PostgreSQL 用户。

## 最佳实践
<a name="optimize-performance-aws-blu-age-modernized-application-best-practices"></a>

确定性能热点：
+ 在开始优化之前，记录基准性能指标。
+ 根据业务需求设定明确的绩效改进目标。
+ 进行基准测试时，禁用详细日志记录，因为这可能影响性能。
+ 设置性能测试套件并定期运行。
+ 使用最新版本的 pgAdmin。（旧版本不支持 `EXPLAIN` 查询计划。）
+ 对于基准测试，请在优化完成 JProfiler 后分离，因为这会增加延迟。
+ 对于基准测试，请确保在启动模式（而非调试模式）下运行服务器，因为调试模式会增加延迟。

优化策略：
+ 在`application.yaml`文件中配置**SetMaxResults**值，根据您的系统规格指定大小合适的批次。
+ 根据数据量和内存限制配置**SetMaxResults**值。
+ 更改**SetOnGreatorOrEqual**为 “**SetOnEqual**仅在后续调用时” `.readNextEqual()`。
+ 在批量写入或更新操作中，请单独处理最后一个批次，因为它可能小于配置的批次大小，并且可能会被写入或更新操作遗漏。

缓存：
+ 在 `processImpl` 中引入用于缓存的字段，这些字段会在每次执行时发生变异，应始终在该 `processImpl` 的上下文中定义。也应使用 `doReset()` 或 `cleanUp()` 方法清除这些字段。
+ 实施内存缓存时，请正确调整缓存的大小。存储在内存中的超大缓存会占用所有资源，这可能会影响应用程序的整体性能。

SQLExecution生成器：
+ 对于计划在 SQLExecution Builder 中使用的查询，请使用密钥名称，例如`PROGRAMNAME_STATEMENTNUMBER`。
+ 使用 SQLExecution Builder 时，请务必检查该`Sqlcod`字段。此字段包含一个值，用于指定查询被正确执行，还是否遇到任何错误。
+ 可使用参数化查询防止 SQL 注入。

业务逻辑优化：
+ 重构代码时保持功能等效性，并对相关程序子集进行回归测试和数据库比较。
+ 保留分析快照以供比较。

## 操作说明
<a name="optimize-performance-aws-blu-age-modernized-application-epics"></a>

### 安装 JProfiler 和 pgadmin
<a name="install-jprofiler-and-pgadmin"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 安装和配置 JProfiler。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 应用程序开发人员 | 
| 安装和配置 pgAdmin。 | 在此步骤中，您需要安装并配置用于查询数据库的数据库客户端。这种模式使用 PostgreSQL 数据库，并采用 pgAdmin 作为数据库客户端。如果使用的是其他数据库引擎，请依相应数据库客户端的文档操作。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 应用程序开发人员 | 

### 确定热点
<a name="identify-hotspots"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在您的 AWS Blu Age 应用程序中启用 SQL 查询日志记录。 | 在 Bl AWS u Age 应用程序`application.properties`的文件中启用 SQL 查询日志记录器，如[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分所述。 | 应用程序开发人员 | 
| 生成和分析查询 `EXPLAIN` 计划，以确定数据库性能热点。 | 有关详细信息，请参阅[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)一节。 | 应用程序开发人员 | 
| 创建 JProfiler 快照以分析执行缓慢的测试用例。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 应用程序开发人员 | 
| 分析 JProfiler 快照以确定性能瓶颈。 | 按照以下步骤分析 JProfiler 快照。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html)有关使用的更多信息 JProfiler，请参阅 “[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)” 部分和[JProfiler 文档](https://www.ej-technologies.com/jprofiler/docs)。 | 应用程序开发人员 | 

### 建立基线
<a name="establish-a-baseline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在实施优化之前，应先建立性能基准。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 应用程序开发人员 | 

### 应用优化策略
<a name="apply-optimization-strategies"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 优化读取调用。 | 使用该 DAOManager **SetMaxResults**方法优化数据检索。有关此方法的更多信息，请参阅[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分。 | 应用程序开发者， DAOManager | 
| 重构业务逻辑以避免多次调用数据库。 | 使用 SQL `JOIN` 子句减少数据库调用次数。有关详细信息和示例，请参阅[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分的*业务逻辑优化*。 | 应用程序开发者、 SQLExecution生成器 | 
| 重构代码，使用缓存来降低读取调用的延迟。 | 有关此技巧的更多信息，请参阅[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分的*缓存*。 | 应用程序开发人员 | 
| 重写使用多个 DAOManager 操作进行简单更新操作的低效代码。 | 有关直接在数据库中更新数据的更多信息，请参阅[架构](#optimize-performance-aws-blu-age-modernized-application-architecture)部分的*业务逻辑优化*。 | 应用程序开发人员 | 

### 成本优化策略
<a name="test-optimization-strategies"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在保持功能等效性的同时，以迭代方式验证每项优化更改。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html)使用基准指标作为参考，可以确保准确衡量每次优化的影响，同时保持系统可靠性。 | 应用程序开发人员 | 

## 问题排查
<a name="optimize-performance-aws-blu-age-modernized-application-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 当您运行现代应用程序时，会看到带 `Query_ID not found` 错误的异常。 | 要解决此问题，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 
| 您已添加索引，但未见性能提升。 | 请执行以下步骤，确保查询引擎正在使用索引：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 
| 你遇到了一个 out-of-memory例外。 | 验证代码是否释放了数据结构占用的内存。 | 
| 批量写入操作会导致表中缺少记录 | 查看代码，确保在批处理计数不为零时执行额外的写入操作。 | 
| SQL 日志记录不会显示在应用程序日志中。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 

## 相关资源
<a name="optimize-performance-aws-blu-age-modernized-application-resources"></a>
+ 使用 [AWS Blu Age 自动重构应用程序](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)（*AWS Mainframe Modernization 用户*指南）
+ [pgAdmin 文档](https://www.pgadmin.org/docs/)
+ [JProfiler 文档](https://www.ej-technologies.com/jprofiler/docs)

# 使用可信上下文在 AWS 上的 Db2 联合身份验证数据库中保护和简化用户访问
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts"></a>

*Sai Parthasaradhi，Amazon Web Services*

## Summary
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-summary"></a>

许多公司正在将其传统的大型机工作负载迁移至 Amazon Web Services (AWS)。此次迁移包括在亚马逊弹性计算云（亚马逊）上将 z/OS 数据库的IBM Db2转移到适用于Linux、Unix和Windows的Db2（LUW）。 EC2在分阶段从本地迁移到 AWS 期间，用户可能需要访问 IBM Db2 z/OS 和 Amazon 上的 Db2 LUW 中的数据， EC2 直到所有应用程序和数据库完全迁移到 Db2 LUW。鉴于不同平台使用不同身份验证机制，故在该远程数据访问场景中进行用户身份验证可能具有挑战性。

此模式介绍如何在 Db2 上为 LUW 设置联合服务器，将 Db2 设置 z/OS 为远程数据库。该模式使用可信上下文将用户的身份从 Db2 LUW 传播到 Db2， z/OS 而无需在远程数据库上重新进行身份验证。有关可信上下文的更多信息，请参阅[其他信息](#secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional)部分。

## 先决条件和限制
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户
+ 在 Amazon EC2 实例上运行的 Db2 实例
+ 用于在本地运行的 z/OS 数据库的远程 Db2
+ 通过 AWS [ Site-to-SiteVPN](https://aws.amazon.com/vpn/) 或 AWS Di [rect Connect 连接到 AWS](https://aws.amazon.com/directconnect/) 的本地网络

## 架构
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-architecture"></a>

**目标架构**

![\[本地大型机通过本地 Db2 服务器和 VPN 连接到上的 Db2 数据库。 EC2\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/9e04f0fe-bae2-412a-93ac-83da50222017/images/0a384695-7907-4fb8-bb7e-d170dcc114af.png)


## 工具
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-tools"></a>

**AWS 服务**
+ [亚马逊弹性计算云 (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 在 AWS 云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器，并快速纵向扩展或缩减这些服务器。
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 可帮助您在您在 AWS 上启动的实例和您自己的远程网络之间传递流量。

**其他工具**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli) 是 Db2 交互式命令行界面（CLI） 命令。

## 操作说明
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-epics"></a>

### 在 AWS 上运行的 Db2 LUW 数据库上启用联合身份验证
<a name="enable-federation-on-the-db2-luw-database-running-on-aws"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 DB2 LUW 数据库上启用联合。 | 要在 DB2 LUW 上启用联合，请运行以下命令。<pre>update dbm cfg using federated YES</pre> | 数据库管理员 | 
| 重新启动数据库。 | 若要重新启动数据库，请运行以下命令。<pre>db2stop force;<br />db2start;</pre> | 数据库管理员 | 

### 对远程数据库编目
<a name="catalog-the-remote-database"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 对远程 Db2 z/OS 子系统进行编目。 | 要对在 AWS 上运行的 Db2 LUW 上的远程 Db2 z/OS 数据库进行编目，请使用以下示例命令。<pre>catalog TCPIP NODE tcpnode REMOTE mainframehost SERVER mainframeport</pre> | 数据库管理员 | 
| 对远程数据库编目。 | 要对远程数据库进行编目，请使用以下示例命令。<pre>catalog db dbnam1 as ndbnam1 at node tcpnode</pre> | 数据库管理员 | 

### 创建远程服务器定义
<a name="create-the-remote-server-definition"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 收集远程 Db2 z/OS 数据库的用户凭证。 | 在继续执行后续步骤前，请收集以下信息：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.html) | 数据库管理员 | 
| 创建 DRDA 包装器。 | 若要创建 DRDA 角色，请运行以下命令。<pre>CREATE WRAPPER DRDA;</pre> | 数据库管理员 | 
| 创建服务器定义。 | 若要创建服务器定义，请运行以下示例命令。<pre>CREATE SERVER ndbserver<br />TYPE DB2/ZOS VERSION 12<br />WRAPPER DRDA<br />AUTHORIZATION "dbuser1" PASSWORD "dbpasswd" OPTIONS ( DBNAME 'ndbnam1',FED_PROXY_USER 'ZPROXY' );</pre>在此定义中，`FED_PROXY_USER`指定将用于建立与 Db2 z/OS 数据库的可信连接的代理用户。只有在 Db2 LUW 数据库中创建远程服务器对象时，才需要授权用户 ID 和密码。将来不用于运行时。 | 数据库管理员 | 

### 创建用户映射
<a name="create-user-mappings"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为代理用户创建用户映射。 | 若要创建代理用户的用户映射，请运行以下命令。<pre>CREATE USER MAPPING FOR ZPROXY SERVER ndbserver OPTIONS (REMOTE_AUTHID 'ZPROXY', REMOTE_PASSWORD 'zproxy');</pre> | 数据库管理员 | 
| 在 Db2 LUW 上为每个用户创建用户映射。 | 为 AWS 上 Db2 LUW 数据库中所有需要通过代理用户访问远程数据的用户创建用户映射。若要创建用户组映射，请运行以下命令。<pre>CREATE USER MAPPING FOR PERSON1 SERVER ndbserver OPTIONS (REMOTE_AUTHID 'USERZID', USE_TRUSTED_CONTEXT 'Y');</pre>该语句指定 Db2 LUW (`PERSON1`) 上的用户可以与远程 Db2 z/OS 数据库 () 建立可信连接。`USE_TRUSTED_CONTEXT 'Y'`通过代理用户建立连接后，用户可以使用 Db2 z/OS 用户 ID (`REMOTE_AUTHID 'USERZID'`) 访问数据。 | 数据库管理员 | 

### 创建可信上下文对象
<a name="create-the-trusted-context-object"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建可信上下文对象 | 要在远程 Db2 z/OS 数据库上创建可信上下文对象，请使用以下示例命令。<pre>CREATE TRUSTED CONTEXT CTX_LUW_ZOS<br />BASED UPON CONNECTION USING SYSTEM AUTHID ZPROXY<br />ATTRIBUTES (<br />ADDRESS '10.10.10.10'<br />)<br />NO DEFAULT ROLE<br />ENABLE<br />WITH USE FOR PUBLIC WITHOUT AUTHENTICATION;</pre>在此定义中，`CTX_LUW_ZOS` 是可信上下文对象的任意名称。该对象包含代理用户 ID 以及可信连接的必需服务器的 IP 地址。在此示例中，服务器为 AWS 上的 Db2 LUW 数据库。您可以使用域名，而不是 IP 地址。该子句 `WITH USE FOR PUBLIC WITHOUT AUTHENTICATION` 表示允许在可信连接上切换每个用户 ID。不需要提供密码。 | 数据库管理员 | 

## 相关资源
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-resources"></a>
+ [IBM 资源访问控制设施 (RACF)](https://www.ibm.com/products/resource-access-control-facility)
+ [IBM Db2 LUW 联合身份验证](https://www.ibm.com/docs/en/db2/11.5?topic=federation)
+ [可信上下文](https://www.ibm.com/docs/en/db2-for-zos/13?topic=contexts-trusted)

## 附加信息
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional"></a>

**Db2 可信上下文**

可信上下文是定义了联合服务器和远程数据库服务器的信任关系的 Db2 数据库对象。若要定义信任关系，则利用可信上下文指定信任属性。有三类可信属性：
+ 发出初始数据库连接请求的系统授权 ID
+ 建立连接的 IP 地址或域名
+ 数据库服务器和数据库客户端之间的数据通信加密设置

当连接请求的所有属性都与服务器上定义的任何可信上下文对象中指定的属性匹配时，就会建立可信连接。有两类可信连接：隐式连接与显式连接。建立隐式可信连接后，用户将继承在该可信连接定义范围之外无法使用的角色。建立显式可信连接后，无论是否进行身份验证，都可在同一个物理连接上切换用户。此外，可向 Db2 用户授予用于指定仅限可信连接使用的权限的角色。此模式使用了显式可信连接。

*此模式下的可信上下文*

模式完成后， PERSON1 在 Db2 上，LUW 使用联合的可信上下文访问 z/OS 来自 Db2 的远程数据。如果连接来自 PERSON1 可信上下文定义中指定的 IP 地址或域名，则通过代理用户建立连接。建立连接后，无需重新验证即可切换相应 PERSON1的 Db2 z/OS 用户 ID，用户可以根据为该用户设置的 Db2 权限访问数据或对象。

*联合可信上下文的优势*
+ 此方法坚持了最低权限原则，避免了通用用户 ID 或应用程序 ID 获取所有用户所需权限的超集。
+ 在联合身份验证数据库和远程数据库执行事务的用户的真实身份始终为已知并可予以审计。
+ 性能得到提高，因为用户之间可以重复使用物理连接，无需联合服务器重新进行身份验证。

# 以 CSV 文件形式将大规模 Db2 z/OS 数据传输到亚马逊 S3
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files"></a>

*Bruno Sahinoglu、Abhijit Kshirsagar 和 Ivan Schuster，Amazon Web Services*

## Summary
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-summary"></a>

在许多企业中，大型机仍然是一个记录系统，它包含大量数据，包括含有当前和历史业务交易记录的主数据实体。它通常是孤立的，不容易从同一企业中的分布式系统访问。随着云技术的出现和大数据的民主化，企业有兴趣利用隐藏在大型机数据中的见解来开发新的业务能力。

为了实现这一目标，企业希望将其大型机 Db2 数据开放到他们的 Amazon Web Services（AWS）Cloud 环境。业务原因有几个，传输方法因案例而异。您可能更喜欢将应用程序直接连接到大型机，或者您可能更喜欢近乎实时地复制数据。如果用例是为数据仓库或数据湖提供数据，那么拥有 up-to-date副本就不再是一个问题，此模式中描述的过程可能就足够了，尤其是在您想避免任何第三方产品许可成本的情况下。另一个使用案例可能是迁移项目的大型机数据传输。在迁移场景中，执行功能等效性测试需要数据。本文中描述的方法是将 Db2 数据传输到 AWS 云环境的一种经济高效的方法。

由于亚马逊简单存储服务 (Amazon S3) Simple Service 是集成度最高的 AWS 服务之一，因此您可以使用其他 AWS 服务（例如亚马逊 Athena、AWS Lambda 函数或亚马逊）直接从那里访问数据并收集见解。 QuickSight 您也可以使用 AWS Glue 或 AWS Database Migration Service（AWS DMS）将数据加载到 Amazon Aurora 或 Amazon DynamoDB。考虑到这一目标，本文描述了如何在大型机上以 ASCII 格式卸载 CSV 文件中的 Db2 数据，然后将文件传输到 Amazon S3。

为此，开发了[大型机脚本](https://github.com/aws-samples/unloaddb2-samples)来帮助生成作业控制语言 (JCLs)，以便根据需要卸载和传输任意数量的 Db2 表。

## 先决条件和限制
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-prereqs"></a>

**先决条件**
+ 有权运行重构扩展执行器 (REXX) 和 JCL 脚本的 IBM z/OS 操作系统用户。
+ 访问 z/OS Unix 系统服务 (USS) 以生成 SSH（安全外壳）私钥和公钥。
+ 一个可写的 S3 存储桶。有关更多信息，请参阅 Amazon S3 文档中的[创建第一个 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)。
+ 一台启用 AWS Transfer Family SSH 文件传输协议 (SFTP) 的服务器，使用**托管服务**作为身份提供者，使用 Amazon S3 作为 AWS 存储服务。有关更多信息，请参阅 AWS Transfer Family 文档中的[创建启用 SFTP 的服务器](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)。

**限制**
+ 这种方法不适用于近实时或实时的数据同步。
+ 只能将数据从 Db2 移动 z/OS 到 Amazon S3，反之亦然。

## 架构
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-architecture"></a>

**源技术堆栈**
+ 在 z/OS 上运行 Db2 的大型机

**目标技术堆栈**
+ AWS Transfer Family
+ Amazon S3
+ Amazon Athena
+ Amazon QuickSight
+ AWS Glue
+ Amazon Relational Database Service（Amazon RDS）
+ Amazon Aurora
+ Amazon Redshift

**源架构和目标架构**

下图显示了生成、提取采用 ASCII CSV 格式的 Db2 z/OS 数据并将其传输到 S3 存储桶的过程。

![\[Data flow from corporate data center to AWS 云, showing mainframe extraction and cloud processing steps.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/66e6fa1a-1c7d-4b7a-8404-9ba85e433b24/images/87b13e0d-0be9-4462-bdbf-67342334416c.png)


1. 从 Db2 目录中选择用于数据迁移的表列表。

1. 该列表用于驱动具有外部格式的数字列和数据列的卸载作业的生成。

1. 然后，使用 AWS Transfer Family 将数据传输到 Amazon S3。

1. AWS Glue 提取、转换、加载（ETL）作业可以转换数据并将其加载到指定格式的已处理存储桶，或者 AWS Glue 可以将数据直接馈送到数据库中。

1. Amazon Athena 和 A QuickSight mazon 可用于查询和呈现数据以推动分析。

下图是整个过程的逻辑流程。

![\[Flowchart showing JCL process with TABNAME, REXXEXEC, and JCL decks steps, including inputs and outputs.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/66e6fa1a-1c7d-4b7a-8404-9ba85e433b24/images/d72f2572-10c9-43f9-b6c9-7e57c9a69d52.png)


1. 第一个 JCL 名为 TABNAME，它将使用 Db2 实用程序 DSNTIAUL 来提取和生成您计划从 Db2 卸载的表的列表。要选择表，必须手动调整 SQL 输入以选择并添加筛选条件以包含一个或多个 Db2 架构。

1. 第二个 JCL 名为 REXXEXEC，它将使用提供的 JCL 骨架和 REXX 程序来处理由 JCL TABNAME 创建的表列表并为每个表名生成一个 JCL。每个 JCL 都将包含一个用于卸载表的步骤和另一个使用 SFTP 协议将文件发送到 S3 存储桶的步骤。

1. 最后一步包括运行 JCL 以卸载表，然后将文件传输到 AWS。整个过程都可以在本地或 AWS 上使用计划程序自动完成。

## 工具
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-tools"></a>

**Amazon Web Services**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 是一种交互式查询服务，使您可使用标准 SQL 直接分析 Amazon Simple Storage Service（Amazon S3）中的数据。
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) 是与 MySQL 和 PostgreSQL 兼容的完全托管式的云端关系数据库引擎。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) 是一项完全托管的提取、转换、加载（ETL）服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) 是一项云规模的商业智能 (BI) 服务，可帮助您在单个控制面板中可视化、分析和报告数据。
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) 是在 AWS 云端托管的 PB 级数据仓库服务。
+ [Amazon Relational Database Service（Amazon RDS）](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)可帮助您在 AWS 云端设置、操作和扩展关系数据库。
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Transfer Family](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html) 是一种安全的传输服务，使您能够将文件传入和传出 AWS 存储服务。

**大型机工具**
+ [SSH 文件传输协议 (SFTP)](https://www.ssh.com/academy/ssh/sftp-ssh-file-transfer-protocol)是一种安全的文件传输协议，允许远程登录服务器并在服务器之间传输文件。SSH 通过加密所有流量来提供安全性。
+ [DSNTIAUL](https://www.ibm.com/docs/en/db2-for-zos/11?topic=dpasp-dsntiaul-sample-program) 是 IBM 提供的用于卸载数据的示例程序。
+ [DSNUTILB](https://www.ibm.com/docs/en/db2-for-zos/11?topic=sharing-recommendations-utilities-in-coexistence) 是 IBM 提供的实用程序批处理程序，用于从 DSNTIAUL 中卸载具有不同选项的数据。
+ [z/OS OpenSSH](https://www.ibm.com/docs/en/zos/2.4.0?topic=zbed-zos-openssh) 是在 IBM 操作系统网络下的 Unix 系统服务上运行的开源软件 SSH 端口。z/OS. SSH is a secure, encrypted connection program between two computers running on a TCP/IP它提供了多种实用程序，包括 ssh-keygen。
+ [REXX（重构扩展执行程序）](https://www.ibm.com/docs/en/zos/2.1.0?topic=guide-learning-rexx-language)脚本用于通过 Db2 卸载和 SFTP 步骤自动生成 JCL。

**代码**

此模式的代码可在 GitHub [unloadd](https://github.com/aws-samples/unloaddb2-samples) b2 存储库中找到。

## 最佳实践
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-best-practices"></a>

对于第一次卸载，生成的 JCLs 应该卸载整个表数据。

第一次完全卸载后，执行增量卸载以提高性能和节省成本。更新模板 JCL deck 中的 SQL 查询以适应对卸载过程的任何更改。

您可以手动转换架构，也可以在 Lambda 上使用脚本将 Db2 SYSPUNCH 作为输入。对于工业流程，[AWS Schema Conversion Tool（SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2zOS.html) 是首选。

最后，使用基于大型机的计划程序或在 AWS 上的计划程序（在大型机上装有代理）来帮助管理和自动化整个流程。

## 操作说明
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-epics"></a>

### 设置 S3 存储桶
<a name="set-up-the-s3-bucket"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 S3 存储桶。 | 有关说明，请参阅[创建第一个 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)。 | 常规 AWS | 

### 设置 Transfer Family 服务器
<a name="set-up-the-transfer-family-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建启用 SFTP 的服务器。 | 要在 [AWS Transfer Family 控制台](https://console.aws.amazon.com/transfer/)上打开并创建 SFTP 服务器，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html) | 常规 AWS | 
| 为 Transfer Family 创建 IAM 角色。 | 要创建 AWS Identity and Access Management（IAM）角色以供 Transfer Family 访问 Amazon S3，请按照[创建 IAM 角色和策略](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-roles.html)中的说明操作。 | AWS 管理员 | 
| 添加 Amazon S3 服务托管用户。 | 要添加 Amazon S3 服务托管用户，请按照 [AWS 文档](https://docs.aws.amazon.com/transfer/latest/userguide/service-managed-users.html#add-s3-user)中的说明进行操作，并使用大型机用户 ID。 | 常规 AWS | 

### 保护通信协议
<a name="secure-the-communication-protocol"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 SSH 密钥。 | 在您的大型机 USS 环境中，运行如下命令。<pre>ssh-keygen -t rsa</pre>当提示输入密码时，请将其留空。 | 大型机开发人员 | 
| 为 SSH 文件夹和密钥文件提供正确的授权级别。 | 默认情况下，公有密钥和私有密钥将存储在用户目录 `/u/home/username/.ssh` 中。您必须为密钥文件授权 644，对文件夹授权 700。<pre>chmod 644 .ssh/id_rsa<br />chmod 700 .ssh</pre> | 大型机开发人员 | 
| 将公有密钥内容复制到 Amazon S3 服务托管用户。 | 要复制 USS 生成的公有密钥内容，请打开 [AWS Transfer Family 控制台](https://console.aws.amazon.com/transfer/)。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html) | 大型机开发人员 | 

### 生成 JCLs
<a name="generate-the-jcls"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 生成范围内 Db2 表列表。 | 提供输入 SQL 以创建限定数据迁移范围的表的列表。此步骤要求您使用 SQL where 子句指定查询 Db2 目录表 SYSIBM.SYSTABLES 的选择标准。可以对过滤器进行自定义，使其包含以特定前缀开头或基于增量卸载的时间戳开头的特定架构或表名。输出是在大型机上的物理序列 (PS) 数据集中捕获的。该数据集将作为 JCL 生成下一阶段的输入。在使用 JCL TABNAME（如有必要，可以对其进行重命名）之前，请进行以下更改：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**Db2 表列表提取作业**<pre><Jobcard><br />//* <br />//* UNLOAD ALL THE TABLE NAMES FOR A PARTICULAR SCHEMA<br />//* <br />//STEP01  EXEC PGM=IEFBR14<br />//* <br />//DD1      DD  DISP=(MOD,DELETE,DELETE),<br />//         UNIT=SYSDA,<br />//         SPACE=(1000,(1,1)),<br />//         DSN=<HLQ1>.DSN81210.TABLIST<br />//* <br />//DD2      DD  DISP=(MOD,DELETE,DELETE),<br />//         UNIT=SYSDA,<br />//         SPACE=(1000,(1,1)),<br />//         DSN=<HLQ1>.DSN81210.SYSPUNCH <br />//* <br />//UNLOAD  EXEC PGM=IKJEFT01,DYNAMNBR=20 <br />//SYSTSPRT DD  SYSOUT=* <br />//STEPLIB  DD  DISP=SHR,DSN=DSNC10.DBCG.SDSNEXIT<br />//         DD  DISP=SHR,DSN=DSNC10.SDSNLOAD<br />//         DD  DISP=SHR,DSN=CEE.SCEERUN <br />//         DD  DISP=SHR,DSN=DSNC10.DBCG.RUNLIB.LOAD <br />//SYSTSIN  DD  *<br />  DSN SYSTEM(DBCG) <br />  RUN  PROGRAM(DSNTIAUL) PLAN(DSNTIB12) PARMS('SQL') - <br />       LIB('DSNC10.DBCG.RUNLIB.LOAD')<br />  END<br />//SYSPRINT DD SYSOUT=*<br />//* <br />//SYSUDUMP DD SYSOUT=*<br />//* <br />//SYSREC00 DD DISP=(NEW,CATLG,DELETE),<br />//            UNIT=SYSDA,SPACE=(32760,(1000,500)),<br />//            DSN=<HLQ1>.DSN81210.TABLIST <br />//* <br />//SYSPUNCH DD DISP=(NEW,CATLG,DELETE), <br />//            UNIT=SYSDA,SPACE=(32760,(1000,500)),<br />//            VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=12 <br />//            DSN=<HLQ1>.DSN81210.SYSPUNCH <br />//* <br />//SYSIN    DD * <br />   SELECT CHAR(CREATOR), CHAR(NAME)<br />     FROM SYSIBM.SYSTABLES <br />    WHERE OWNER = '<Schema>' <br />      AND NAME LIKE '<Prefix>%' <br />      AND TYPE = 'T'; <br />/* </pre> | 大型机开发人员 | 
| 修改 JCL 模板。 | 此模式提供的 JCL 模板包含通用作业卡和库名称。但是，对于数据集名称、库名称和作业卡，大多数大型机站点都有自己的命名标准。例如，可能需要特定的作业类才能运行 Db2 作业。Job Entry Subsystem 实现 JES2 并 JES3 可以施加其他更改。标准负载库的第一个限定符可能与 IBM 默认值 `SYS1` 不同。因此，在运行模板之前，请根据贵站点特定标准对其进行自定义。在骨架 JCL UNLDSKEL 中进行以下更改：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**卸载和 SFTP JCL 骨架**<pre>//&USRPFX.U JOB (DB2UNLOAD),'JOB',CLASS=A,MSGCLASS=A, <br />//         TIME=1440,NOTIFY=&USRPFX<br />//* DELETE DATASETS<br />//STEP01   EXEC PGM=IEFBR14<br />//DD01     DD DISP=(MOD,DELETE,DELETE),<br />//            UNIT=SYSDA,<br />//            SPACE=(TRK,(1,1)),<br />// DSN=&USRPFX..DB2.PUNCH.&JOBNAME<br />//DD02     DD DISP=(MOD,DELETE,DELETE),<br />//            UNIT=SYSDA,<br />//            SPACE=(TRK,(1,1)),<br />// DSN=&USRPFX..DB2.UNLOAD.&JOBNAME<br />//*<br />//* RUNNING DB2 EXTRACTION BATCH JOB FOR AWS DEMO<br />//*<br />//UNLD01   EXEC PGM=DSNUTILB,REGION=0M,<br />// PARM='<DSN>,UNLOAD'<br />//STEPLIB  DD  DISP=SHR,DSN=DSNC10.DBCG.SDSNEXIT<br />//         DD  DISP=SHR,DSN=DSNC10.SDSNLOAD<br />//SYSPRINT DD  SYSOUT=*<br />//UTPRINT  DD  SYSOUT=*<br />//SYSOUT   DD  SYSOUT=*<br />//SYSPUN01 DD  DISP=(NEW,CATLG,DELETE),<br />//             SPACE=(CYL,(1,1),RLSE),<br />// DSN=&USRPFX..DB2.PUNCH.&JOBNAME<br />//SYSREC01 DD  DISP=(NEW,CATLG,DELETE),<br />//             SPACE=(CYL,(10,50),RLSE),<br />// DSN=&USRPFX..DB2.UNLOAD.&JOBNAME<br />//SYSPRINT DD SYSOUT=*<br />//SYSIN    DD *<br />  UNLOAD<br />  DELIMITED COLDEL ','<br />  FROM TABLE &TABNAME<br />  UNLDDN SYSREC01<br />  PUNCHDDN SYSPUN01<br />  SHRLEVEL CHANGE ISOLATION UR;<br /> /*<br />//*<br />//* FTP TO AMAZON S3 BACKED FTP SERVER IF UNLOAD WAS SUCCESSFUL<br />//*<br />//SFTP EXEC PGM=BPXBATCH,COND=(4,LE),REGION=0M<br />//STDPARM DD *<br /> SH cp "//'&USRPFX..DB2.UNLOAD.&JOBNAME'"<br />   &TABNAME..csv;<br /> echo "ascii             " >> uplcmd;<br /> echo "PUT &TABNAME..csv " >>>> uplcmd;<br /> sftp -b uplcmd -i .ssh/id_rsa &FTPUSER.@&FTPSITE;<br /> rm &TABNAME..csv;<br /> //SYSPRINT DD SYSOUT=*<br /> //STDOUT DD SYSOUT=*<br /> //STDENV DD *<br /> //STDERR DD SYSOUT=*                                                </pre>  | 大型机开发人员 | 
| 生成“批量卸载 JCL”。 | 此步骤涉及使用 JCL 在 ISPF 环境下运行 REXX 脚本。提供在第一步中创建的范围内表的列表，根据 `TABLIST DD` 名称进行批量生成 JCL 的输入。JCL 将在根据 `ISPFILE DD` 名称指定的用户指定的分区数据集中为每个表名生成一个新的 JCL。事先分配这个库。每个新 JCL 都将分为两个步骤：一个步骤将 Db2 表卸载到文件中，另一个步骤将文件发送到 S3 存储桶。在 JCL REXXEXEC 中进行以下更改（您可以更改名称）：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**批量 JCL 生成作业**<pre>//RUNREXX JOB (CREATEJCL),'RUNS ISPF TABLIST',CLASS=A,MSGCLASS=A,      <br />//         TIME=1440,NOTIFY=&SYSUID<br />//* Most of the values required can be updated to your site specific<br />//* values using the command 'TSO ISRDDN' in your ISPF session. <br />//* Update all the lines tagged with //update marker to desired<br />//* site specific values. <br />//ISPF EXEC PGM=IKJEFT01,REGION=2048K,DYNAMNBR=25<br />//SYSPROC   DD DISP=SHR,DSN=USER.Z23D.CLIST<br />//SYSEXEC   DD DISP=SHR,DSN=<HLQ1>.TEST.REXXLIB<br />//ISPPLIB   DD DISP=SHR,DSN=ISP.SISPPENU<br />//ISPSLIB   DD DISP=SHR,DSN=ISP.SISPSENU<br />//          DD DISP=SHR,DSN=<HLQ1>.TEST.ISPSLIB<br />//ISPMLIB   DD DSN=ISP.SISPMENU,DISP=SHR<br />//ISPTLIB   DD DDNAME=ISPTABL<br />//          DD DSN=ISP.SISPTENU,DISP=SHR<br />//ISPTABL   DD LIKE=ISP.SISPTENU,UNIT=VIO<br />//ISPPROF   DD LIKE=ISP.SISPTENU,UNIT=VIO<br />//ISPLOG    DD SYSOUT=*,RECFM=VA,LRECL=125<br />//SYSPRINT  DD SYSOUT=*<br />//SYSTSPRT  DD SYSOUT=*<br />//SYSUDUMP  DD SYSOUT=*<br />//SYSDBOUT  DD SYSOUT=*<br />//SYSTSPRT  DD SYSOUT=*<br />//SYSUDUMP  DD SYSOUT=*<br />//SYSDBOUT  DD SYSOUT=*<br />//SYSHELP   DD DSN=SYS1.HELP,DISP=SHR <br />//SYSOUT    DD SYSOUT=*<br />//* Input list of tablenames<br />//TABLIST   DD DISP=SHR,DSN=<HLQ1>.DSN81210.TABLIST<br />//* Output pds<br />//ISPFILE   DD DISP=SHR,DSN=<HLQ1>.TEST.JOBGEN<br />//SYSTSIN   DD *<br />ISPSTART CMD(ZSTEPS <MFUSER> <FTPUSER> <AWS TransferFamily IP>)<br />/*</pre>使用 REXX 脚本之前，请执行以下更改：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**ZSTEPS REXX 脚本**<pre>/*REXX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */<br />/* 10/27/2021 - added new parms to accommodate ftp */<br />Trace "o" <br />    parse arg usrpfx ftpuser ftpsite<br />    Say "Start"<br />    Say "Ftpuser: " ftpuser "Ftpsite:" ftpsite<br />    Say "Reading table name list"<br />    "EXECIO * DISKR TABLIST (STEM LINE. FINIS"<br />    DO I = 1 TO LINE.0<br />      Say I<br />      suffix = I<br />      Say LINE.i<br />      Parse var LINE.i schema table rest<br />      tabname = schema !! "." !! table<br />      Say tabname<br />      tempjob= "LOD" !! RIGHT("0000" !! i, 5) <br />      jobname=tempjob<br />      Say tempjob<br />      ADDRESS ISPEXEC "FTOPEN "<br />      ADDRESS ISPEXEC "FTINCL UNLDSKEL"<br />      /* member will be saved in ISPDSN library allocated in JCL */<br />      ADDRESS ISPEXEC "FTCLOSE NAME("tempjob")"<br />    END<br /><br />    ADDRESS TSO "FREE F(TABLIST) "<br />    ADDRESS TSO "FREE F(ISPFILE) "<br /><br />exit 0</pre> | 大型机开发人员 | 

### 运行 JCLs
<a name="run-the-jcls"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行 Db2 卸载步骤。 | 生成 JCL 后，将有 JCLs 尽可能多的表需要卸载。本情节使用 JCL 生成的示例来解释结构和最重要的步骤。您无需执行任何操作。以下信息仅供参考。如果您打算提交在上 JCLs 一步中生成的内容，请跳至*提交 LODnnnnn JCLs*任务。使用带有 IBM 提供的 DSNUTILB Db2 实用程序的 JCL 卸载 Db2 数据时，必须确保卸载的数据不包含压缩的数字数据。为此，请使用 DSNUTILB `DELIMITED` 参数。该 `DELIMITED` 参数支持卸载 CSV 格式的数据，方法是为文本字段添加一个字符作为分隔符和双引号，删除 VARCHAR 列中的填充，并将所有数值字段（包括日期字段）转换为外部格式。以下示例使用逗号字符作为分隔符，显示生成的 JCL 中的卸载步骤是什么样子。<pre>                            <br /> UNLOAD<br /> DELIMITED COLDEL ',' <br /> FROM TABLE SCHEMA_NAME.TBNAME<br /> UNLDDN SYSREC01<br /> PUNCHDDN SYSPUN01<br /> SHRLEVEL CHANGE ISOLATION UR;</pre> | 大型机开发人员、系统工程师 | 
| 执行 SFTP 步骤。 | 要使用 JCL 中的 SFTP 协议，请使用 BPXBATCH 实用程序。 SFTP 实用程序无法直接访问 MVS 数据集。您可以使用复制命令（`cp`）将顺序文件 `&USRPFX..DB2.UNLOAD.&JOBNAME` 复制到 USS 目录中，它将在那里变成 `&TABNAME..csv`。使用私有密钥（`id_rsa`）并使用 RACF 用户 ID 作为用户名运行 `sftp` 命令，以连接到 AWS Transfer Family IP 地址。<pre>SH cp "//'&USRPFX..DB2.UNLOAD.&JOBNAME'"<br />   &TABNAME..csv;<br /> echo "ascii             " >> uplcmd;<br /> echo "PUT &TABNAME..csv " >>>> uplcmd;<br /> sftp -b uplcmd -i .ssh/id_rsa &FTPUSER.@&FTP_TF_SITE;<br /> rm &TABNAME..csv; </pre> | 大型机开发人员、系统工程师 | 
| 提交 LODnnnnn JCLs. | 之前的 JCL 已经生成了所有需要卸载、转换为 CSV 并传输到 S3 存储桶的 LODnnnnn JCL 表。对所有已生成的内容运行 JCLs 该`submit`命令。 | 大型机开发人员、系统工程师 | 

## 相关资源
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-resources"></a>

有关本文档中使用的不同工具和解决方案的更多信息，请参阅以下内容：
+ [z/OS OpenSSH 用户指南](https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R4sc276806/$file/foto100_v2r4.pdf)
+ [Db2 z/OS — 卸载控制语句示例](https://www.ibm.com/docs/en/db2-for-zos/11?topic=unload-sample-control-statements)
+ [Db2 z/OS -卸载分隔文件](https://www.ibm.com/docs/en/db2-for-zos/11?topic=unload-unloading-delimited-files)
+ [Transfer Family – 创建一台启用 SFTP 的服务器](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)
+ [Transfer Family – 与服务托管用户合作](https://docs.aws.amazon.com/transfer/latest/userguide/service-managed-users.html)

## 附加信息
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-additional"></a>

在 Amazon S3 上获得 Db2 数据后，您可以通过多种方式获得新的见解。由于 Amazon S3 与 AWS 数据分析服务集成，因此您可以在分布式端自由使用或公开这些数据。例如，您可以执行以下操作：
+ [在 Amazon S3 上构建数据湖](https://aws.amazon.com/products/storage/data-lake-storage/)，无需移动数据 query-in-place，即可使用分析和机器学习工具提取宝贵的见解。
+ 通过设置与 AWS Transfer Family 集成的上传后处理工作流程来启动 [Lambda 函数](https://aws.amazon.com/lambda/)。
+ 使用 [AWS Glue](https://aws.amazon.com/glue/) 开发新的微服务，以用于访问 Amazon S3 或[完全托管数据库](https://aws.amazon.com/free/database/?trk=ps_a134p000007CdNEAA0&trkCampaign=acq_paid_search_brand&sc_channel=PS&sc_campaign=acquisition_FR&sc_publisher=Google&sc_category=Database&sc_country=FR&sc_geo=EMEA&sc_outcome=acq&sc_detail=amazon%20relational%20database%20service&sc_content=Relational%20Database_e&sc_matchtype=e&sc_segment=548727697660&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Database|Solution|FR|EN|Text&s_kwcid=AL!4422!3!548727697660!e!!g!!amazon%20relational%20database%20service&ef_id=CjwKCAjwzt6LBhBeEiwAbPGOgcGbQIl1-QsbHfWTgMZSSHEXzSG377R9ZyK3tCcbnHuT45L230FufxoCeEkQAvD_BwE:G:s&s_kwcid=AL!4422!3!548727697660!e!!g!!amazon%20relational%20database%20service)中的数据。AWS Glue 是一项无服务器数据集成服务，可轻松发现、准备和组合数据，以用于分析、机器学习和应用程序开发。

在迁移使用案例中，由于您可以将任何数据从大型机传输到 S3，因此您可以执行以下操作：
+ 停用物理基础设施，使用 Amazon S3 Glacier 和 S3 Glacier Deep Archive 创建经济实惠的数据存档策略。 
+ 使用 Amazon S3 和其他 Amazon Web Services （例如 S3 Glacier 和 Amazon Elastic File System（Amazon EFS））构建可扩展、耐用、安全的备份和恢复解决方案，以增强或取代现有的本地功能。

# 使用自定义语言将 Easytrieve 转换为现代语言 AWS Transform
<a name="transform-easytrieve-modern-languages"></a>

*Shubham Roy、Subramanyam Malisetty 和 Amazon Web Services 的 Harshitha Shashidhar*

## Summary
<a name="transform-easytrieve-modern-languages-summary"></a>

[这种模式为使用自定义转换对大型机 Broadcom [Easytrieve 报告生成器](https://techdocs.broadcom.com/us/en/ca-mainframe-software/devops/ca-easytrieve-report-generator/11-6.html) (EZT) 工作负载进行更快、风险更低的转型提供了规范性指导。AWS Transform](https://aws.amazon.com/transform/custom/) language-to-language它解决了对利基市场和专有大型机 EZT 工作负载进行现代化改造所面临的挑战，这些工作负载通常用于批量数据处理和报告生成。该模式将依赖专有工具和罕见的大型机专业知识的昂贵、漫长且容易出错的迁移方法替换为您创建的代理人工智能自动化解决方案。 AWS Transform

此模式为 EZT 转换提供了一个随时可用的自定义转换定义。该定义使用多个转换输入：
+ [使用AWS Transform 大型机提取的 EZT 业务规则](https://aws.amazon.com/transform/mainframe/)
+ EZT 编程参考文档
+ EZT 源代码
+ 大型机输入和输出数据集

AWS Transform custom 使用这些输入以现代目标语言（例如 Java 或 Python）生成功能等效的应用程序。

转换过程使用智能测试执行、自动调试和迭代修复功能，根据预期输出验证功能等效性。它还支持持续学习，使自定义变换定义能够提高连续转换的准确性和一致性。使用这种模式，组织可以减少迁移工作量和风险，解决利基大型机技术债务，并对EZT工作负载进行现代化改造， AWS 以提高敏捷性、可靠性、安全性和创新性。

## 先决条件和限制
<a name="transform-easytrieve-modern-languages-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户 
+ 包含输入和输出数据的大型机 EZT 工作负载 

**限制**

*范围限制*
+ **语言支持**-此特定转换模式仅支持 EZT 到 Java 的转换。 
+ **超出范围** — 其他大型机编程语言的转换需要在自定义中 AWS Transform 使用新的自定义转换定义。

*流程限制*
+ **验证依赖关系**-如果没有基线输出数据，则无法验证转换。 
+ **专有逻辑** — 高度具体的定制开发实用程序需要额外的用户文档和参考材料，AI 代理才能正确解释。

*技术限制*
+ **服务限制**-有关 AWS Transform 自定义服务限制和配额，请参阅[AWS Transform 用户指南-配额](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html)和[AWS 一般参考-转换配额](https://docs.aws.amazon.com/general/latest/gr/aws-transform.html)。

**产品版本**
+ AWS Transform CLI — 最新版本
+ Node.js — 版本 20 或更高版本
+ Git — 最新版本
+ 目标环境
  + Java — 版本 17 或更高版本
  + Spring Boot — 版本 3.x 是重构应用程序的主要目标
  + Maven — 版本 3.6 或更高版本

## 架构
<a name="transform-easytrieve-modern-languages-architecture"></a>

**源技术堆栈**
+ **操作系统** — IBM z/OS
+ **编程语言** — Easytrieve，作业控制语言 (JCL)
+ **数据库** — DB2 适用于 z/OS 的 IBM、虚拟存储访问方法 (VSAM)、大型机平面文件

**目标技术堆栈**
+ **操作系统** — 亚马逊 Linux
+ **计算** — 亚马逊弹性计算云 (Amazon EC2) Amazon EC2
+ **编程语言** — Java
+ **数据库**亚马逊关系数据库服务 (Amazon RDS)

**目标架构**

![\[使用 AWS Transform 自定义将 EZT 转换为现代代码的目标架构图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/71f15422-42cb-4c7e-94fa-051a4f130445/images/eb89eed0-dd55-485c-a433-9869162eaad9.png)


**Workflow (工作流程)**

该解决方案使用 AWS Transform 自定义 language-to-language迁移转换模式，通过四步自动化工作流程，将大型机 Easytrieve (EZT) 应用程序现代化为 Java。

*第 1 步 — 将您的旧代码提供给 Main AWS Transform frame，其中：*
+ 分析代码
+ 提取高级业务逻辑
+ 提取详细的业务逻辑。

*第 2 步-创建包含所需输入内容的文件夹：*
+ 使用AWS Transform 大型机提取的 EZT 业务规则 
+ EZT 编程参考文档 
+ EZT 源代码
+ 大型机输入和输出数据集

*步骤 3-创建并运行自定义转换定义*

1. 使用 C AWS Transform LI 用自然语言描述转型目标。 AWS Transform 自定义分析 BRE、源代码和 EZT 编程指南，生成自定义转换定义供开发人员审查和批准。

1. 然后，使用项目源代码调用 AWS Transform CLI。 AWS Transform custom 创建转换计划，在批准后将 EZT 转换为 Java，生成支持文件，生成可执行的 JAR，并验证退出标准。

1. 使用验证代理根据大型机输出测试功能等效性。自调试器代理会自动修复问题。最终交付内容包括经过验证的 Java 代码和 HTML 验证报告。

**自动化和扩展**
+ Agentic AI 多模式执行架构 — AWS Transform 自定义利用具有 3 种执行模式（对话式、交互式、完全自动化）的 agentic AI 来自动执行复杂的转换任务，包括代码分析、重构、转换计划和测试。
+ 自适应学习反馈系统 — 该平台通过代码样本分析、文档解析以及将开发者反馈与版本化转换定义集成来实现持续学习机制。
+ 并行应用程序处理架构 — 该系统支持在可扩展基础架构中同时分布式并行执行多个应用程序转换操作。

## 工具
<a name="transform-easytrieve-modern-languages-tools"></a>

**AWS 服务  **
+ [AWS Transform custom](https://docs.aws.amazon.com/transform/latest/userguide/custom.html) 是一项代理人工智能服务，用于将传统的 EZT 应用程序转换为现代编程语言。 
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)使用 agentic AI 来帮助您加快传统工作负载（例如.NET、大型机和工作负载）的现代化。 VMware 
+ AWS Transform for [mainframe](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html) 用于分析传统的 EZT 应用程序，以提取嵌入式业务逻辑并生成全面的业务规则文档，包括逻辑摘要、缩略词定义和结构化知识库。这些用作 AWS Transform 自定义的输入数据。 
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。Amazon S3 充当 AWS Transform 自定义的主要存储服务，用于存储转换定义、代码存储库和处理结果。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。IAM 为转换操作的 AWS Transform 自定义、管理权限和访问控制提供了安全框架。

**其他工具**
+ [AWS Transform CLI](https://docs.aws.amazon.com/transform/latest/userguide/custom-command-reference.html) 是 AWS Transform 自定义的命令行界面，使开发人员能够通过自然语言对话和自动执行模式定义、执行和管理自定义代码转换。 AWS Transform custom 支持交互式会话（atx custom def exec）和自主转换，以实现代码库的可扩展现代化。
+ [Git](https://git-scm.com/doc) 版本控制系统用于在自动修复应用期间提供分支保护、变更跟踪和回滚功能。 
+ [Java](https://www.java.com/en/) 是这种模式中使用的编程语言和开发环境。 

**代码存储库**

此模式的代码可在开启 “[AWS Transform 自定义” 的 Easytrieve 到现代语言的转换](https://github.com/aws-samples/sample-mainframe-easytrieve-transform?tab=readme-ov-file#easytrieve-to-modern-languages-transformation-with-aws-transform-custom)中找到。 GitHub

## 最佳实践
<a name="transform-easytrieve-modern-languages-best-practices"></a>
+ 建立标准化的项目结构 — 创建四文件夹结构（源代码、bre-doc、输入数据、输出数据），验证完整性，并在转换前记录内容。
+ 使用基准文件进行验证-使用生产基准输入文件，与基准输出进行 byte-by-byte比较，接受对偏差的零容忍。
+ 使用所有可用的参考文档 — 为了提高转换的准确性，请提供所有可用的参考文档，例如业务需求和编码清单。
+ 为质量改进提供意见 — c AWS Transform ustom 会自动从转换执行中提取经验教训（开发者反馈、代码问题），并为其创建知识项目。每次成功转换后，请查看知识项目并批准您希望在将来的执行中使用的知识项目。这提高了 future 转型的质量。

## 操作说明
<a name="transform-easytrieve-modern-languages-epics"></a>

### 生成业务规则摘录 (BRE)
<a name="generate-a-business-rule-extract-bre"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
|  AWS Transform 为大型机进行配置。 | 设置环境和所需的 AWS Identity and Access Management (IAM) 权限以支持大型机现代化工作流程。有关更多信息，请参阅 AWS 文档[中的大型机应用程序转换](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html)。 | 应用程序开发人员 | 
| 生成业务规则摘录 (BRE) 文档。 | 从源 EZT 或 COBOL 代码中提取业务逻辑以生成功能文档。有关如何启动提取过程和查看输出的说明，请参阅 AWS Transform 文档中的[提取业务逻辑](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-extract-business-logic)。 | 应用程序开发人员 | 

### 设置 AWS Transform 自定义
<a name="set-up-trn-custom"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为 AWS Transform 自定义配置基础架构。 | 部署托管安全转型环境所需的生产就绪型基础架构。这包括一个私有 Amazon EC2 实例，该实例配置了用于转换 Easytrieve 代码的必要工具、IAM 权限和网络设置。要使用基础设施即代码 (IaC) 配置环境，请按照 [Easytrieve 使用自定义存储库向现代语言转型中的部署说明进行 AWS Transform](https://github.com/aws-samples/sample-mainframe-easytrieve-transform)操作。 GitHub  | AWS 开发人员、AWS 管理人 | 
| 准备要转换的输入材料。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 应用程序开发人员 | 

###  创建自定义转换定义
<a name="create-a-custom-transformation-definition"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建转换定义。 | 按照以下步骤创建带有功能验证的 EZT 到 Java 转换的自定义转换定义。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 应用程序开发人员 | 
| 发布转换定义。 | 查看并验证转换定义后，您可以使用自然语言提示将其发布到 AWS Transform自定义注册表，并提供定义名称，例如 *easytrieve*-to-Java-Migration。 | 应用程序开发人员 | 

### 准备用于验证的基准数据。
<a name="prepare-baseline-data-for-validation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看转换验证摘要。 | 在执行 AWS Transform自定义转换之前，请验证该`input-data`文件夹是否包含在执行大型机批处理作业之前捕获的所需数据文件。执行大型机批处理作业后，请确保该`output-data`文件夹捕获生成的文件。根据执行要求，所有文件均采用 Sequential/Text/DB 2 种格式，使用 EBCDIC 编码。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 应用程序开发人员 | 
| 运行自定义转换作业。 | 执行 AWS Transform CLI 命令，选择非交互式或交互式选项：<pre>:# Non-interactive execution (fully autonomous):<br />atx custom def exec \<br />  --transformation-name "Easytrieve-to-Java-Migration" \<br />  --code-repository-path ~/root/transform-workspace/mainframe-source/source-code \<br />  --build-command "mvn clean install" \<br />  --non-interactive \<br />  --trust-all-tools \<br /><br /># Interactive execution (with human oversight):<br />atx custom def exec \<br />  -n "Easytrieve-to-Java-Migration" \<br />  -p ~/root/transform-workspace/mainframe-source/source-code \<br />  -c "mvn clean install"<br /><br /># Resume interrupted execution:<br />atx -resume<br /># OR<br />atx --conversation-id <conversation-id><br /></pre>AWS Transform 在转换执行期间通过 build/test 命令自动验证。 | 应用程序开发人员 | 

### 验证并交付经过测试的代码
<a name="validate-and-deliver-tested-code"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看转换验证摘要。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 应用程序开发人员 | 
| 访问验证报告。 | 输入以下命令以查看详细的验证工件：<pre># Full validation report<br />cat ~/.aws/atx/custom/$LATEST_SESSION/artifacts/validation_report.html<br /><br /># Generated code location<br />ls ~/.aws/atx/custom/$LATEST_SESSION/generated/<br /><br /># Execution logs<br />cat ~/.aws/atx/custom/$LATEST_SESSION/logs/execution.log</pre> | 应用程序开发人员 | 
| 启用知识项目以进行持续学习。 | 通过将建议的知识项提升到您的永久配置中，提高 future 转换的准确性。转换后，代理会将已识别的模式和映射规则存储在您的本地会话目录中。要查看和应用这些学习内容，请在您的 Amazon EC2 实例上运行以下命令：<pre># List all knowledge items for a specific transformation definition<br />atx custom def list-ki -n <transformation-name><br /><br /># Retrieve the details of a specific knowledge item<br />atx custom def get-ki -n <transformation-name> --id <id><br /><br /># Update the status of a knowledge item (ENABLED or DISABLED)<br />atx custom def update-ki-status -n <transformation-name> --id <id> --status ENABLED<br /><br /># Update the knowledge item configuration to enable auto-approval<br />atx custom def update-ki-config -n <transformation-name> --auto-enabled TRUE</pre> | 应用程序开发人员 | 

## 问题排查
<a name="transform-easytrieve-modern-languages-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| *输入和输出路径配置*输入文件未被读取，或者输出文件写入不正确。  | 指定存储输入文件的完整目录路径，并明确指明应写入输出的位置。确保为这些目录配置了正确的访问权限。 最佳做法包括使用绝对路径而不是相对路径来避免歧义，以及验证所有指定路径是否存在并具有适当 read/write 权限。  | 
| *恢复中断的执行*执行已中断或需要从停止的地方继续执行 | 通过在 CLI 命令中提供会话 ID，您可以从上次中断的地方继续执行。在您上一次执行尝试的日志中找到对话 ID。   | 
| *解决内存限制*执行期间出现内存不足错误。 | 您可以要求 AWS Transform 共享当前的内存中 JVM 大小，然后根据此信息增加内存分配。这种调整有助于适应更大的处理要求。如果调整后内存限制仍然存在，可以考虑将大型作业分成较小的批次。  | 
| *解决输出文件差异问题*输出文件与预期不符， AWS Transform 表示无法进行进一步的更改。 | 提供具体的反馈和技术原因，解释当前输出不正确的原因。包括其他技术或业务文档以支持您的需求。此详细的上下文有助于 AWS Transform更正代码以生成正确的输出文件。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 

## 相关资源
<a name="transform-easytrieve-modern-languages-resources"></a>
+ [AWS Transform 自定义文档](https://docs.aws.amazon.com/transform/latest/userguide/custom.html)
+ [Easytrieve 报告生成器 11.6](https://techdocs.broadcom.com/us/en/ca-mainframe-software/devops/ca-easytrieve-report-generator/11-6/getting-started.html)

## 附件
<a name="attachments-71f15422-42cb-4c7e-94fa-051a4f130445"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/71f15422-42cb-4c7e-94fa-051a4f130445/attachments/attachment.zip)

# 更多模式
<a name="mainframe-more-patterns-pattern-list"></a>

**Topics**
+ [使用 Terraform 为 AWS WAF 解决方案部署安全自动化](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [使用 Precission Connect 将大型机数据库复制到 AWS](replicate-mainframe-databases-to-aws-by-using-precisely-connect.md)