AWS EC2 Container Service 概念與使用介紹
今天想要簡單和大家介紹這個服務,AWS EC2 Container Service (ECS) 是 AWS 提供部署容器以及管理容器的雲端服務,亦即主要是這幾年一直都熱門的 Docker 應用程式的部署與管理,其主要是讓我們可以快速部署,並提供 Scale、監控與版本回溯機制。
—
首先,若你進入 AWS ECS 的頁面,主要的左側選單你會看到三個選項:
- Repositories
- Task Definitions
- Clusters
這三個的概念其實是這樣的,ECS 提供了簡易的 image 儲存庫類似簡易的 Docker hub 讓你可以上傳已經 build 好 Image 到 ECS Repositories(ECR)。
接著可以你 Create 一個 Task Definition,這個 Task Definition 有點類似 docker-compose.yml 的設定你可以定義有哪些 Container ,它們各自對應哪個 Image,CPU、記憶體限制…等,並且這個 Task Definition 有版本紀錄的功能。
最後你就可以創建 Cluster(EC2 的叢集)然後運行 Task (Container)在 Cluster 上面。
而ECS 提供兩種運行方式:
- Task:一般我們通常只在特定情況下會用到,例如:1 次性或週期性服務,你不需要確保,在執行完程式後還會持續運行或是重新運行。
- Service:主要是可以確保不斷執行,像是當 container 掛掉後,提供自動重啟的功能。
在大概清楚整個概念後,那麼,你可以怎麼開始呢?
如果你想快速體驗,一開始進入 ECS 的頁面後,ECS 有提供快速運行一個範例的流程功能,只要你選了一些選項後,ECS 會自動連結 Cloud Formation 幫你建立整個 ECS Instance 所需要的資源。
然而如果你想要自己手動建立,首先你需要設定以下資源:
- 創建一個 ECS Cluster。
- 新增 IAM Role:IAM 主要是你需要設定一個 Role 給你的 EC2,其中權限主要是 ecsInstanceRole。
- 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 的其他資源的連接上了。