EC2 Web 應用轉型 Serverless 容器化架構

情境:

公司多年前使用 EC2 部署 Web 應用,包含前端頁面與後端 API,隨著用戶量增加,EC2 的固定規格已不敷負荷,成本也越來越高,部署多環境(正式 / 測試)時,需要複製整組 EC2 架構,維運成本龐大。

主管要求團隊將系統:

  • 改成微服務
  • 容器化
  • Serverless 運算(不再維護伺服器)
  • 最小化運維工作
  • 前後端都能正常承載
  • 支援多環境

工程團隊於是開始尋找能涵蓋前端 + 後端容器服務並且完全不管理伺服器的解決方案。

核心知識點:

  • AWS Lambda 只能執行後端邏輯,不適合部署完整 Web App 容器
  • ECS Fargate 是 serverless container(不用管理 EC2)
  • EKS Fargate 雖是 serverless,但 Kubernetes 本身有高維運複雜度
  • Elastic Beanstalk 仍需管理平台環境,非真正 serverless
  • ECR 是容器映像檔的儲存庫

在AWS上有幾個 Serverless 的服務,我們先來看看

AWS Lambda

AWS Lambda 是一個事件驅動的無伺服器運算服務。它允許使用者執行程式碼,而無需佈建或管理底層的伺服器基礎設施。

程式碼是以函式 (Function) 的形式存在,它只在需要時運行,通常是為了響應特定的事件,例如資料變更、檔案上傳或 API 請求。自動處理函式的啟動、擴展和高可用性,並且根據程式碼的實際運行時間和資源消耗來計費,它適用於構建微服務、處理數據流或構建高度彈性的事件驅動架構。

功能:

  • 事件驅動的無伺服器運算服務
  • 允許執行後端程式碼,而不需管理伺服器
  • 僅在事件觸發時執行,不需常駐運行
  • 自動管理啟動、擴展、高可用性
  • 可與 API Gateway 串接,提供 API 後端
  • 支援部署程式碼與容器映像(最大 10GB)

特性:

  • 完全無伺服器(serverless)
  • 按使用量計費(以 ms 計費)
  • 最適合小型後端、API、事件驅動應用
  • 無法部署完整 Web 前端(需要 S3 + CloudFront)
  • 不適合需長時間運算或大量持續連線的系統
  • 極度簡化運算層維運,但需要注意冷啟動

AWS ECS/EKS Fargate

AWS Fargate 是一個用於 Amazon ECS (Elastic Container Service) 和 Amazon EKS (Elastic Kubernetes Service) 的無伺服器運算引擎。

允許使用者在不管理底層 EC2 虛擬機的情況下運行 Docker 容器。只需定義容器的 CPU 和記憶體需求。AWS 負責所有伺服器和集群管理任務,包括佈建、修補和擴容,只需關注容器的運行狀態。

功能:

  • 完全托管的容器執行環境(Serverless Container Runtime)
  • 可在 ECS(Docker orchestration)或 EKS(Kubernetes)上以 Fargate 啟動容器
  • Fargate 不需管理任何 EC2 節點
  • 適合部署微服務、Web 應用、後端 API
  • 支援 auto scaling、自動容器調度
  • 完整支援 front-end + back-end 容器 Web App

特性:

  • 真正的 serverless container(不管理 EC2)
  • 適合完整 Web Application(前後端皆可容器化)
  • 支援多環境(Prod / Test)
  • 擴展能力強、適合大型或複雜應用
  • 可彈性管理容器生命周期
  • ECS 易用、EKS 複雜但彈性最高

AWS AppRunner

AWS App Runner 是一個全託管的服務,專門用於簡化 Web 應用程式、API 服務和後端服務的部署和擴展。

能夠直接從原始程式碼或容器映像檔自動構建並部署一個可公開訪問的 Web 服務,它內建了流量負載平衡、自動擴展和部署管線,極大地簡化了傳統容器服務所需的配置複雜度,適用於追求最快部署速度和最低配置負擔的 Web 開發者,特別是那些不需要對容器環境進行細緻控制的應用。

功能:

  • 一鍵部署 Web App 或 API 的全託管服務
  • 可直接從原始碼(GitHub、CodeCommit)或容器映像(ECR)自動建置與部署
  • 自動流量負載平衡(LB)
  • 自動擴縮(Auto Scaling)
  • 內建 HTTPS、健康檢查、服務連線
  • 建置 pipeline 完全內建(不需 CICD)

特性:

  • 最高度自動化的容器服務(比 ECS 更簡單)
  • 不卡在 Kubernetes 或 ECS 的複雜設定
  • 不需管理 Cluster/Node/Task
  • 適合快速部署小到中型 Web 應用
  • 專為 Web App 而生(含前端 + 後端)
  • 延展性足夠但不是最便宜(比 Lambda、ECS Fargate 略貴)
  • 不適合需要高度自訂容器網路、精細 orchestrations 的情境

結論:

ECS Fargate 是真正 serverless container(無需管理 EC2)

可同時承載前端與後端容器,適合微服務架構

可利用 ECS Service + ALB 管理流量,且自動擴縮最簡單

成本有效控制,按照實際用量

至於 EKS 太複雜,不考慮

然後 Lambda 只能跑後端,無法運行前端,除非用S3

參考連結:

Amazon ECS on Fargate

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS-Fargate.html

Amazon ECS 多環境架構

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html

Application Load Balancer + ECS 整合

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html

Amazon ECR

https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html

如果想知道更多雲端新知,加入我們LINE@官方號

感謝您的填寫,將有專人與您聯繫