对经过 Blu Age 现代化改造的大型机工作负载进行容器化 - AWS Prescriptive Guidance

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

对经过 Blu Age 现代化改造的大型机工作负载进行容器化

由 Richard Milner-Watts 创作 () AWS

摘要

此模式为运行已使用 Blu Age 工具实现现代化的大型机工作负载提供了一个示例容器环境。Blu Age 将传统的大型机工作负载转换至现代 Java 代码。此模式提供了围绕 Java 应用程序的封装器,因此您可以使用容器编排服务(例如亚马逊弹性容器服务(亚马逊 ECS)或亚马逊弹性 Kubernetes Service(亚马逊来运行它。EKS

有关使用 Blu Age 和AWS服务实现工作负载现代化的更多信息,请参阅以下AWS规范性指南出版物:

如需有关使用 Blu Age 对大型机工作负载进行现代化改造的帮助,请在 Blu Age 网站上选择联系我们的专家。要获得有关将现代化工作负载迁移到AWS、将其与AWS服务集成以及将其转移到生产环境的帮助,请联系您的AWS客户经理或填写AWS专业服务表格

先决条件和限制

先决条件

  • Blu Age 创建的现代化 Java 应用程序。出于测试目的,此模式提供了示例 Java 应用程序,您可将其用作概念验证。

  • Docker 环境,您可以用它来构建容器。

限制

根据您使用的容器编排平台,可供容器使用的资源(例如CPURAM、和存储)可能会受到限制。例如,如果您将亚马逊ECS与 AWS Fargate 配合使用,请参阅亚马逊ECS文档,了解限制和注意事项。

架构

源技术堆栈

  • Blu Age

  • Java

目标技术堆栈

  • Docker

目标架构

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

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

  2. 容器内的环境变量用于配置包装器脚本中的变量,例如 Amazon Simple Storage Service (Amazon S3) 存储桶名称和数据库凭证。环境变量由 S AWS ecrets Manager 或 Parameter Store 提供,后者是 S AWS ystems Manager 的一项功能。如果您使用亚马逊ECS作为容器编排服务,则还可以在亚马逊ECS任务定义中对环境变量进行硬编码。

  3. 在运行 Blu Age 应用程序前,包装脚本负责将所有输入文件从 S3 存储桶提取到容器中。AWS命令行界面 (AWSCLI) 安装在容器中。这提供了一种通过网关虚拟私有云 (VPC) 终端节点访问存储在 Amazon S3 中的对象的机制。

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

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

工具

AWS 服务

工具

  • Docker是软件平台,用于快速构建、测试和部署应用程序。Docker 将软件打包成称为容器的标准化单元,容器拥有软件运行所需一切,包括库、系统工具、代码和运行时系统。您可使用 Docker 将应用程序部署和扩缩到任何环境中。

  • Bash 是GNU操作系统的命令语言接口 (shell)。

  • Java 是这种模式中使用的编程语言和开发环境。

  • Blu Age 是一款AWS大型机现代化工具,可将传统的大型机工作负载(包括应用程序代码、依赖关系和基础架构)转换为现代云工作负载。

代码存储库

此模式的代码可在 GitHub Blu Age 示例容器存储库中找到。

最佳实践

  • 使用环境变量,将变量外部化以改变应用程序的行为。这些变量使容器编排解决方案能够更改运行时环境,而无需重建容器。此模式包括对 Blu Age 应用程序有用的环境变量示例。

  • 在运行 Blu Age 应用程序之前,请验证所有应用程序依赖项。例如,验证数据库是否可用以及凭证是否有效。在包装脚本中编写测试以验证依赖项,如果不满足则提前失败。

  • 在包装器脚本中使用详细日志记录。直接与正在运行的容器交互可能具有挑战性,具体取决于编排平台以及作业所需时间。确保将有用的输出写入到 STDOUT,以帮助诊断任何问题。例如,输出可能包括运行应用程序之前和之后应用程序工作目录的内容。

操作说明

任务描述所需技能

选项 1-与 Blu Age 合作获取应用程序的JAR文件。

这种模式中的容器需要 Blu Age 应用程序。或者,您可使用随此模式提供的示例 Java 应用程序作为原型。

与 Blu Age 团队合作,为您的应用程序获取一个可以烘焙到容器中的JAR文件。如果JAR文件不可用,请参阅下一个任务以改用示例应用程序。

云架构师

选项 2-生成或使用提供的示例应用程序JAR文件。

此模式提供了一个预先构建的示例JAR文件。此文件将应用程序的环境变量输出到 STDOUT,然后休眠 30 秒后退出。

此文件名为bluAgeSample.jar,位于存储库的 docker 文件夹中。 GitHub

如果您想修改代码并构建自己的JAR文件版本,请使用位于的源代码。 /java_ sample/src/sample _java_app.java 在存储库中。 GitHub 可以在上使用生成脚本/java_sample/build.sh 来编译 Java 源代码并生成一个新JAR文件。

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

克隆 GitHub 存储库。

使用以下命令克隆代码存储库示例:

git clone https://github.com/aws-samples/aws-blu-age-sample-container
AWS DevOps

使用 Docker 构建容器。

在将容器推送到 Docker 注册表(例如亚马逊)之前,使用 Docker 构建容器:ECR

  1. 在您选择的终端上,导航到本地 GitHub 存储库中的docker文件夹。

  2. 使用以下命令构建容器:

    docker build -t <tag> .

    其中 <tag> 是您要使用的容器名称。

AWS DevOps

测试 Blu Age 容器。

(可选)如有必要,请使用以下命令在本地测试容器:

docker run -it <tag> /bin/bash
AWS DevOps

向您的 Docker 存储库进行身份验证。

如果您计划使用亚马逊ECR,请按照亚马逊ECR文档中的说明安装和配置 Docker,并使用您的默认注册表对 Docker CLI 进行身份验证。AWS CLI

我们建议您使用get-login-password 命令进行身份验证。

注意

  如果您使用查看推送命令按钮,Amazon ECR 控制台会提供此命令的预填充版本。有关更多信息,请参阅 Amazon ECR 文档

aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com

如果您不打算使用 AmazonECR,请按照为您的容器注册系统提供的说明进行操作。

AWS DevOps

创建容器存储库。

在 Amazon 中创建存储库ECR。有关说明,请参见示例使用 Terraform 为容器化 Blu Age 应用程序部署环境

如果您使用的是其他容器注册表系统,请按为该系统提供的说明进行操作。

AWS DevOps

标记您的容器,并将其推送到目标存储库。

如果您使用的是亚马逊ECR:

  1. 使用 Amazon ECR 注册表和存储库标记本地 Docker 镜像,这样您就可以将其推送到远程存储库:

    docker tag <tag>:latest <account>.dkr.ecr.<region>.amazonaws.com/<repository>:<versionNumber>
  2. 将映象推送至远程存储库:

    docker push <account>.dkr.ecr.<region>.amazonaws.com/<repository>:<versionNumber>

有关更多信息,请参阅亚马逊ECR用户指南中的推送 Docker 镜像

AWS DevOps

相关资源

AWS 资源

其他资源