

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

# 使用 AWS Fargate 在 Amazon ECS 上部署 Java 微服务
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson 和 Sandeep Bondugula，Amazon Web Services*

## Summary
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

此模式为使用 AWS Fargate 在 Amazon Elastic Container Service (Amazon ECS) 上部署容器化 Java 微服务提供了指导。该模式不使用 Amazon Elastic Container Registry (Amazon ECR) 进行容器管理；相反，Docker 映像是从某 Docker 中心提取的。

## 先决条件和限制
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**先决条件**
+ 在 Docker 中心上的现有 Java 微服务应用程序
+ 公共 Docker 存储库
+ 一个有效的 Amazon Web Services account
+ 熟悉 Amazon Web Services，包括 Amazon ECS 和 Fargate
+ Docker、Java 和 Spring Boot 框架
+ Amazon Relational Database Service（Amazon RDS）已启动并运行（可选）
+ 如果应用程序需要 Amazon RDS（可选），则为虚拟私有云（VPC）

## 架构
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**源技术堆栈**
+ Java 微服务（例如，在 Spring Boot 中实施）并部署在 Docker 上

**源架构**

![部署在 Docker 上的 Java 微服务的源架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**目标技术堆栈**
+ 使用 Fargate 托管每项微服务的 Amazon ECS 集群
+ 用于托管 Amazon ECS 集群和相关安全组的 VPC 网络 
+ 使用 Fargate 启动容器的每项微服务的 cluster/task 定义

**目标架构**

![Amazon ECS 上 Java 微服务的目标架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## 工具
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**工具**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) 使您无需安装和操作自己的容器编排软件、管理和扩展虚拟机集群，也不需要在这些虚拟机上调度容器。 
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) 可帮助您运行容器，而无需管理服务器或亚马逊弹性计算云 (Amazon EC2) 实例。它与 Amazon Elastic Container Service（Amazon ECS）配合使用。
+ [Docker](https://www.docker.com/) 软件平台可以快速构建、测试和部署应用程序。Docker 将软件打包成称为*容器*的标准化单元，容器拥有软件运行所需一切，包括库、系统工具、代码和运行时系统。 

**Docker 代码**

以下 Dockerfile 指定了所使用的 Java 开发套件（JDK）版本、Java 存档（JAR）文件所在的版本、公开的端口号以及应用程序的入口点。

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## 操作说明
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### 创建新的任务定义
<a name="create-new-task-definitions"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建任务定义。 | 在 Amazon ECS 中运行 Docker 容器需要任务定义。打开 Amazon ECS 控制台 [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)，选择**任务定义**，然后创建新的任务定义。有关更多信息，请参阅 [Amazon ECS 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)。 | AWS 系统管理员、应用程序开发人员 | 
| 选择启动类型。 | 选择 **Fargate** 作为启动类型。 | AWS 系统管理员、应用程序开发人员 | 
| 配置任务。 | 定义任务名称并使用适当数量的任务内存和 CPU 配置应用程序。 | AWS 系统管理员、应用程序开发人员 | 
| 定义容器。 | 指定容器名称。对于映像，输入 Docker 站点名称、存储库名称和 Docker 映像的标签名称（`docker.io/sample-repo/sample-application:sample-tag-name`）。为应用程序设置内存限制，为允许的端口设置端口映射（`8080, 80`）。 | AWS 系统管理员、应用程序开发人员 | 
| 创建任务。 | 任务和容器配置到位后，创建任务。有关详细说明，请查看*相关资源*部分的链接。 | AWS 系统管理员、应用程序开发人员 | 

### 配置集群
<a name="configure-the-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建和配置集群。 | 选择**仅限网络**作为集群类型，配置名称，然后创建集群或使用现有集群（如果有）。有关更多信息，请参阅 [Amazon ECS 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)。 | AWS 系统管理员、应用程序开发人员 | 

### 配置任务
<a name="configure-task"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 任务。 | 在集群中，选择**运行新任务**。 | AWS 系统管理员、应用程序开发人员 | 
| 选择启动类型。 | 选择 **Fargate** 作为启动类型。 | AWS 系统管理员、应用程序开发人员 | 
| 选择任务定义、修订版和平台版本。 | 选择要运行的任务，然后选择任务定义的修订版和平台版本。 | AWS 系统管理员、应用程序开发人员 | 
| 选择 集群。 | 选择要在其中运行任务的集群。 | AWS 系统管理员、应用程序开发人员 | 
| 指定任务数量。 | 配置应运行的任务数。如果您启动时有两个或更多任务，则需要负载均衡器在这些任务中分发流量。 | AWS 系统管理员、应用程序开发人员 | 
| 指定任务组。 | （可选）指定任务组名称以将一组相关任务标识为任务组。 | AWS 系统管理员、应用程序开发人员 | 
| 配置集群 VPC、子网和安全组。 | 配置集群 VPC 和要在其中部署应用程序的子网。创建或更新安全组（HTTP、HTTPS 和端口 8080）以提供对入站和出站连接的访问权限。 | AWS 系统管理员、应用程序开发人员 | 
| 配置公有 IP 设置。 | 启用或禁用公有 IP，具体取决于您是否要使用公有 IP 地址执行 Fargate 任务。推荐的默认选项为**启用**。 | AWS 系统管理员、应用程序开发人员 | 
| 查看设置并创建任务 | 查看设置，然后选择**运行任务**。 | AWS 系统管理员、应用程序开发人员 | 

### 割接
<a name="cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 复制应用程序 URL。 | 当任务状态更新为*正在运行*时，选择该任务。在“网络”部分中，复制公有 IP。 | AWS 系统管理员、应用程序开发人员 | 
| 测试您的应用程序。 | 在浏览器中，输入公有 IP 以测试应用程序。 | AWS 系统管理员、应用程序开发人员 | 

## 相关资源
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Amazon ECS 的 Docker 基础知识](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)（Amazon ECS 文档）
+ [AWS Fargate 上的 Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)（Amazon ECS 文档）
+ [创建任务定义](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)（Amazon ECS 文档）
+ [创建集群](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)（Amazon ECS 文档）
+ [配置基本服务参数](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html)（Amazon ECS 文档）
+ [配置网络](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html)（Amazon ECS 文档）
+ [在 Amazon ECS 上部署 Java 微服务](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/)（博客文章）