

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

# 对经过 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 应用程序作为原型。<br />与 Blu Age 团队合作，为您的应用程序获取 JAR 文件，该文件可以烘焙到容器中。如果 JAR 文件不可用，请参见下一个任务以改用示例应用程序。 | 云架构师 | 
| 选项 2 - 生成或使用提供的示例应用程序 JAR 文件。 | 此模式提供了预先构建示例 JAR 文件。此文件将应用程序的环境变量输出到 `STDOUT`，然后休眠 30 秒后退出。<br />此文件名为`bluAgeSample.jar`，位于存储库的 [docker 文件夹中](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/docker)。 GitHub <br />如果要修改代码并构建自己的 JAR 文件版本，请使用位于的源代码[。 /java\_ sample/src/sample \_java\_app.java 在存储库](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/java_sample/src)中。 GitHub 您可在 [./java\_sample/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 进行身份验证。<br />我们建议您使用[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><br />如您不打算使用 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)。<br />如果您使用的是其他容器注册表系统，请按为该系统提供的说明进行操作。 | 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)<br />有关更多信息，请参阅《*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/)