AWS EC2 Container Service 概念與使用介紹

Chi-Hsuan Huang
5 min readApr 26, 2017

--

AWS EC2 Container Service

今天想要簡單和大家介紹這個服務,AWS EC2 Container Service (ECS) 是 AWS 提供部署容器以及管理容器的雲端服務,亦即主要是這幾年一直都熱門的 Docker 應用程式的部署與管理,其主要是讓我們可以快速部署,並提供 Scale、監控與版本回溯機制。

首先,若你進入 AWS ECS 的頁面,主要的左側選單你會看到三個選項:

  1. Repositories
  2. Task Definitions
  3. Clusters

這三個的概念其實是這樣的,ECS 提供了簡易的 image 儲存庫類似簡易的 Docker hub 讓你可以上傳已經 build 好 Image 到 ECS Repositories(ECR)。

http://docs.aws.amazon.com/AmazonECS/latest/developerguide/images/overview-containers.png

接著可以你 Create 一個 Task Definition,這個 Task Definition 有點類似 docker-compose.yml 的設定你可以定義有哪些 Container ,它們各自對應哪個 Image,CPU、記憶體限制…等,並且這個 Task Definition 有版本紀錄的功能。

Task Definitions 範例

最後你就可以創建 Cluster(EC2 的叢集)然後運行 Task (Container)在 Cluster 上面。

而ECS 提供兩種運行方式:

  1. Task:一般我們通常只在特定情況下會用到,例如:1 次性或週期性服務,你不需要確保,在執行完程式後還會持續運行或是重新運行。
  2. Service:主要是可以確保不斷執行,像是當 container 掛掉後,提供自動重啟的功能。
ECS 流程架構圖

在大概清楚整個概念後,那麼,你可以怎麼開始呢?

如果你想快速體驗,一開始進入 ECS 的頁面後,ECS 有提供快速運行一個範例的流程功能,只要你選了一些選項後,ECS 會自動連結 Cloud Formation 幫你建立整個 ECS Instance 所需要的資源。

然而如果你想要自己手動建立,首先你需要設定以下資源:

  1. 創建一個 ECS Cluster。
  2. 新增 IAM Role:IAM 主要是你需要設定一個 Role 給你的 EC2,其中權限主要是 ecsInstanceRole。
  3. EC2:這部分我們為了讓 EC2 可以跟 ECS 連結(讓 EC2 可以對應到在 ECS 上的 Cluster),需要在 Launch 時設定一些東西:

第一個是你需要選擇使用 Amazon ECS-optimized 的 AMI(在一開始創建 EC2 的頁面選擇 Choose an Amazon Machine Image (AMI) -> Community AMIs),不然的話你就要自己安裝 ECS Agent 在 EC2 上面 Installing the Amazon ECS Container Agent.

為什麼需要這樣呢?主要是因為 ECS 其實是透過裝在 EC2 上的 agent 去向 ECS 註冊 Cluster。注:所以這個 EC2 是要可以對外發送網路封包的。

第二個是,你需要在設定 EC2 的選項中的 Advanced Details 點開,填入 User data 的內容:

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config

這樣的話,EC2 才知道是對應到哪個 ECS Cluster。

如此一來,我們就可以準備好可以被部署的 ECS Cluster 了。

另外在我們實務上,常常會需要將這些流程自動化,可以透過腳本程式運行,在創建 Cluster 上,你可以利用像是 Ansible 自動化創建 AWS 資源,而在管理與實際部署 ECS Task 上,目前你可能可以使用 Amazon ECS CLI

ecs-cli 主要是提供了 command line 的指令讓我們可以快速創建 Task,例如:

ecs-cli compose — file hello-world.yml service up 就可以基於 yml 創建 Task。

其中它也提供了類似 Compose File 的方式,讓我們可以直接使用,然而以目前來說還有些小缺點,就是尚未完全支援。

__

最後,總結來說,ECS 是 AWS提供容器化部署的一個服務,使用上還算簡單,但目前個人說,相較於 Google Container Engine,我認為 ECS 還不夠好用,例如在環境變數的管理上還有 CLI 的 Tool 也不夠完整,唯一最大的優勢大概就是跟 AWS 的其他資源的連接上了。

--

--

Chi-Hsuan Huang

Back to The Mind: Follow Your Heart. Co-Founder at Taiwanstat; Full Stack Developer. https://github.com/chihsuan