

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

*Vijay Thompson 和 Sandeep Bondugula，Amazon Web Services*

## 總結
<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 儲存庫
+ 作用中的 AWS 帳戶
+ 熟悉 AWS 服務，包括 Amazon ECS 和 Fargate
+ Docker、Java 和 Spring Boot 架構
+ Amazon Relational Database Service (Amazon RDS) 啟動並執行 （選用）
+ 如果應用程式需要 Amazon RDS，則為虛擬私有雲端 (VPC) （選用）

## Architecture
<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_tw/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 啟動容器的叢集/任務定義

**目標架構**

![Amazon ECS 上 Java 微服務的目標架構](http://docs.aws.amazon.com/zh_tw/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 Elastic Compute Cloud (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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立任務定義。 | 在 Amazon ECS 中執行 Docker 容器需要任務定義。在 [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)：// 開啟 Amazon 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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立和設定叢集。 | 選擇**僅聯網**做為叢集類型、設定名稱，然後建立叢集，或在可用時使用現有叢集。如需詳細資訊，請參閱 [Amazon ECS 文件](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html)。 | AWS 系統管理員、應用程式開發人員 | 

### 設定任務
<a name="configure-task"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 任務。 | 在叢集中，選擇**執行新任務**。 | AWS 系統管理員、應用程式開發人員 | 
| 選擇啟動類型。 | 選擇 **Fargate **作為啟動類型。 | AWS 系統管理員、應用程式開發人員 | 
| 選擇任務定義、修訂和平台版本。 | 選擇您要執行的任務、任務定義的修訂，以及平台版本。 | AWS 系統管理員、應用程式開發人員 | 
| 選取 叢集。 | 選擇您要從中執行任務的叢集。 | AWS 系統管理員、應用程式開發人員 | 
| 指定任務數量。 | 設定應執行的任務數量。如果您使用兩個或多個任務啟動，則需要負載平衡器，才能在任務之間分配流量。 | AWS 系統管理員、應用程式開發人員 | 
| 指定任務群組。 | （選用） 指定任務群組名稱，以將一組相關任務識別為任務群組。 | AWS 系統管理員、應用程式開發人員 | 
| 設定叢集 VPC、子網路和安全群組。 | 設定叢集 VPC 和您要部署應用程式的子網路。建立或更新安全群組 (HTTP、HTTPS 和連接埠 8080)，以提供傳入和傳出連線的存取權。 | AWS 系統管理員、應用程式開發人員 | 
| 設定公有 IP 設定。 | 啟用或停用公有 IP，取決於您是否要為 Fargate 任務使用公有 IP 地址。預設的建議選項為**已啟用**。 | AWS 系統管理員、應用程式開發人員 | 
| 檢閱設定並建立任務 | 檢閱您的設定，然後選擇**執行任務**。 | AWS 系統管理員、應用程式開發人員 | 

### 剪下
<a name="cut-over"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 複製應用程式 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 Microservices ](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/)（部落格文章）