ECS 與 EKS
🔥 Vibe Prompt
「在 ECS Fargate 上部署容器化 API 並搭配 CI/CD。與 EKS 比較。」
ECS Fargate(無伺服器容器)
resource "aws_ecs_cluster" "main" {
name = "app-cluster"
}
resource "aws_ecs_task_definition" "api" {
family = "api"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = "256"
memory = "512"
container_definitions = jsonencode([{
name = "api"
image = "${aws_ecr_repository.api.repository_url}:latest"
portMappings = [{ containerPort = 8000 }]
environment = [{ name = "DB_HOST", value = aws_db_instance.postgres.address }]
logConfiguration = {
logDriver = "awslogs"
options = { "awslogs-group" = "/ecs/api", "awslogs-region" = "us-west-2" }
}
}])
}
resource "aws_ecs_service" "api" {
name = "api-service"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.api.arn
desired_count = 3
launch_type = "FARGATE"
network_configuration {
subnets = aws_subnet.private[*].id
security_groups = [aws_security_group.app.id]
}
load_balancer {
target_group_arn = aws_lb_target_group.api.arn
container_name = "api"
container_port = 8000
}
}
ECS vs EKS 比較
| 面向 | ECS | EKS | |------|-----|-----| | 複雜度 | 低 | 高 | | 靈活性 | AWS 原生 | 多雲 | | 生態系 | 有限 | 豐富(Helm, Istio) | | 費用 | 無控制平面費用 | $0.10/hr 控制平面 | | 適用場景 | AWS-only、簡單應用 | 複雜、多雲 K8s |
CI/CD 管線
# 建置推送到 ECR,然後更新 ECS 服務
- name: Deploy to ECS
run: |
aws ecr get-login-password | docker login --username AWS --password-stdin $ECR
docker build -t $ECR/api:latest .
docker push $ECR/api:latest
aws ecs update-service --cluster app-cluster --service api-service --force-new-deployment
最佳實踐
- 使用 Fargate(無需管理伺服器)
- 適當設定任務記憶體與 CPU
- 使用 CloudWatch Logs 紀錄日誌
- 啟用 ECS Exec 進行除錯
關鍵要點
| 特性 | ECS | EKS | |------|:---:|:---:| | AWS 原生整合 | ✅ 最緊密 | ✅ 良好 | | 可移植性 | ❌ 綁定 AWS | ✅ 可遷移至任何 K8s | | 學習曲線 | 低 | 高(需 K8s 知識) | | 社群生態 | AWS 專屬 | 全球最大容器生態 | | 成熟度 | 2014 年推出 | 2018 年推出 | | 計費 | 無額外費用 | 每叢集 $0.10/小時 |
當你該用哪個?
- 選 ECS:純 AWS 環境、團隊無 K8s 經驗、想快速上線
- 選 EKS:需要混合雲、團隊有 K8s 經驗、考量未來遷移
- 兩者都學:理解 ECS 的簡潔與 EKS 的強大,根據場景選擇、團隊有 K8s 經驗、考量未來遷移\n- 兩者都學:理解 ECS 的簡潔與 EKS 的強大,根據場景選擇\n", "newString": ""}]
ECS vs EKS:容器編排的選擇
AWS 提供兩種容器編排服務:ECS(AWS 原生)和 EKS(Kubernetes)。選擇哪個取決於你的團隊和需求。
核心差異
| 比較 | ECS(AWS 原生) | EKS(Kubernetes) | |:----|:-------------|:----------------| | 學習曲線 | 低(Fargate 甚至不用管伺服器) | 高(需要學 K8s 生態系) | | 可移植性 | 鎖定 AWS | 可在任何地方執行 | | 維護成本 | AWS 管理控制平面 | 需自行管理控制平面(或付錢給 AWS) | | 生態系 | 跟 AWS 服務整合最好 | 廣泛的開源工具和社群 | | 適合團隊 | 小型團隊、不想學 K8s | 有 K8s 經驗、需要跨雲 |
什麼時候選 ECS?
- 你的團隊已經在用 AWS,沒有考慮雲端遷移
- 你想要最簡單的部署方式(Fargate 完全不用管伺服器)
- 你只需要跑 Container,不需要 K8s 的進階功能
什麼時候選 EKS?
- 你有多雲策略(部分服務在 GCP/Azure)
- 你已經有 K8s 經驗
- 你需要 K8s 生態系的工具(Helm、Istio、Prometheus Operator)
下一章預告:IAM 與完整基礎設施
容器編排決定了你的服務怎麼跑。下一章的 IAM 決定了誰可以存取這些服務——權限管理是 AWS 安全的核心。