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 安全的核心。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!