使用 Amazon ECR 和负载均衡器在 Amazon ECS 上部署 Java 微服务 - AWS Prescriptive Guidance

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

使用 Amazon ECR 和负载均衡器在 Amazon ECS 上部署 Java 微服务

R 类型:不适用

源:Java

目标:Amazon ECS

创建者:AWS

环境:PoC 或试点

技术:Web 和移动应用程序;容器和微服务

Amazon Web Services: Amazon ECS

Summary

此模式概述了在 Amazon Elastic Container Service (Amazon ECS) 上部署容器化 Java 微服务架构的步骤,以更轻松地扩展和更快地开发应用程序。这有助于实现创新并加快新功能 time-to-market 的开发速度。 

该模式还使用亚马逊弹性容器注册表 (Amazon ECR) 来存储和管理基于 Docker 的容器,并使用带有 Python 脚本的 AWS CloudFormation 模板来自动设置基础设施。此模式基于在 AWS Compute 博客上发布的在 Amazon Elastic Container Service 上 部署 Java 微服务文章。

微服务为软件开发提供了一种架构和组织方法,其中软件由通过定义明确的应用程序编程接口(API)进行通信的小型独立服务组成。自给自足的小团队拥有这些服务。 

Amazon ECS 是可扩展和性能都非常高的容器编排服务。其支持 Docker 容器,使您能够在 AWS 上快速运行并扩展容器化应用程序。借助Amazon ECS,您无需安装和操作容器编排软件、管理和扩展虚拟机集群,也不需要在这些虚拟机上调度容器。

通过简单的 API 调用,您可以启动和停止支持 Docker 的应用程序、查询请求的完整状态以及访问许多自然功能,例如 AWS 身份和访问管理 (IAM) 角色、安全组、负载均衡器、Amazon CloudWatch 事件、AWS 模板和 AW CloudFormation S 日志。 CloudTrail

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account  

  • Java 开发套件版本 1.7或更高版本的 Java 微服务源代码

  • 账户中用户的访问密钥和秘密访问密钥

  • AWS 命令行界面(AWS CLI)

  • Java、适用于 Python 的 AWS 软件开发套件 (SDK) (Boto3) 和 Docker 软件

  • 熟悉前述技术的使用

  • 熟悉 AWS 服务,例如 Amazon ECS、AWS CloudFormation 和 Elastic Load Balancing

架构

源技术堆栈

  • 在本地环境中于 Java 中实现并部署至 Apache Tomcat 的微服务

目标技术堆栈

  • 检查客户端请求的应用程序负载均衡器。根据路由规则,负载均衡器将请求定向至目标组中与状态匹配的实例和端口。

  • 每项微服务的目标群体。相应服务使用目标组注册可用容器实例。每个目标组都包含一个路径,因此,当您为特定微服务调用该路径时,其会映射至正确的目标组。这允许您使用应用程序负载均衡器为通过路径访问的所有微服务提供服务。例如,https:///owner/* 将映射并定向至 Owner 微服务。

  • 托管每项微服务容器的 Amazon ECS 集群。

  • 用于托管 Amazon ECS 集群与关联安全组的 Amazon Virtual Private Cloud (Amazon VPC) 网络。

  • 每项微服务的 Amazon Elastic Container Registry (Amazon ECR) 存储库。

  • 在 Amazon ECS 集群实例上启动容器的每项微服务的服务或任务定义。

目标架构

工具

  • Amazon ECS – Amazon ECS 允许您通过简单的 API 调用来启动和停止基于容器的应用程序,可以从集中式服务获取集群状态,并且可以访问许多熟悉的 Amazon Elastic Compute Cloud (Amazon EC2) 功能。

  • Amazon ECR – Amazon Elastic Container Registry (Amazon ECR) 是一个完全托管式 Docker 容器注册表,可让开发人员轻松地存储、管理和部署 Docker 容器映像。Amazon ECR 已与 Amazon ECS 集成,可简化您的 development-to-production 工作流程。Amazon ECR 在一个可用性和可扩展性都非常高的架构中托管容器映像,您因此可以可靠地为应用程序部署容器。与 AWS Identity and Access Management (IAM) 集成,可实现对每个存储库的资源级控制。

操作说明

任务描述所需技能
预置 Amazon EC2 Linux 实例,安装 Docker,并为每项微服务创建 Docker 文件。Ops
在 Amazon ECR 上设置 Docker 映像。

使用 Dockerfile 推送、构建映像,并为新存储库标记映像。对每项微服务执行同一操作。将新标记的映像推送到此存储库。

Ops
创建 AWS CloudFormation 模板。

创建 AWS CloudFormation 模板来配置虚拟私有云 (VPC)、亚马逊 ECS 集群和亚马逊关系数据库服务 (Amazon RDS)。

Ops
任务描述所需技能
使用您之前创建的 CloudFormation 模板创建 AWS 基础设施。

使用 https://github.com/awslabs/amazon-ecs-java-microservices/blob/master/2_ECS_Java_Spring_ PetClinic _Microservices/setup.py 上的 Python 脚本调用你之前创建的 AWS CloudFormation 模板。此模板创建了目标环境所需的 AWS 基础设施。

Ops
创建 Amazon ECR 存储库、任务、服务、应用程序负载均衡器以及目标组。

Python 脚本读取 AWS CloudFormation 模板的输出,并使用 BOTO3 API 调用创建 Amazon ECR 存储库、任务、服务、Application Load Balancer 和目标组。

Ops