昨天學了 ECS、Task、Service 的概念,
今天就是實際上線的第一步:
建立一個 Cluster、定義 Task、部署容器。
我們要做到的事很單純:
✅ 建立一個 ECS Cluster
✅ 建立一個 Task Definition
✅ 從 ECR 拉一個 image 來跑
✅ 驗證「容器真的跑起來了」
先幫容器找個家。
ECR(Elastic Container Registry)是 AWS 的 Docker Hub。
1️⃣ 進入 AWS Console → 搜尋「ECR」
2️⃣ 點選「Create repository」
3️⃣ 輸入名稱,例如:ts-todo-api
4️⃣ 可選 public/private(建議 private)
5️⃣ 其他設定維持預設,點「Create」
你會得到一個像這樣的 Repository URL:
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ts-todo-api
📌 這就是你的 image 儲存位置。
回到本機(你的專案根目錄),登入 AWS CLI:
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
接著 build & push:
docker build -t ts-todo-api .
docker tag ts-todo-api:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ts-todo-api:latest
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ts-todo-api:latest
完成後,回到 ECR Console,你應該會看到:
IMAGE TAG IMAGE URI
latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ts-todo-api:latest
🎉 你的 Docker 映像正式上雲端了!
1️⃣ 打開 AWS Console → 搜尋「ECS」
2️⃣ 點「Create cluster」
3️⃣ 模式選擇:Fargate
4️⃣ 輸入名稱:todo-cluster
5️⃣ 其他選項預設即可 → 「Create」
ECS 就會建立一個可用來部署容器的 Cluster。
這是 ECS 最關鍵的一步,
它決定要跑哪個 image、開哪些 port、要多少 CPU。
1️⃣ 在 ECS 介面左側點「Task definitions」 → 「Create new task definition」
2️⃣ 選擇「Fargate」
3️⃣ 設定名稱:todo-task
4️⃣ 容器設定:
todo-api
你的 ECR Image URI
3000建立完成後,這份 Task 定義就像是一個「容器模板」。
1️⃣ 回到 ECS → 選擇剛剛的 Cluster(todo-cluster)
2️⃣ 點「Create」 → 選擇「Service」
3️⃣ 填寫:
todo-task
todo-service
ECS 會幫你啟動一個 Fargate 容器,
幾分鐘後,你會看到狀態變成:
Running (1 task)
點進 Service → Task → 網路設定
找到「Public IP」欄位,複製該 IP。
在瀏覽器或終端機輸入:
curl http://你的IP:3000/health
如果看到:
{ "status": "ok" }
🎉 恭喜,你的容器真的在 AWS 雲端上跑起來了!
| 問題 | 原因 | 解法 |
|---|---|---|
| 無法連線到 IP | Security Group 沒開 port | 在 EC2 → Security Group 開放 TCP 3000 |
| 錯誤:CannotPullContainerError | IAM 權限不足 | 確認 ECS Task Role 有 AmazonECSTaskExecutionRolePolicy |
| 沒有 Logs | 未啟用 CloudWatch Logs | 在 Task Definition 加上 Log driver |
在 ECS Console → Tasks 裡可以看到:
Last status: RUNNING
Desired status: RUNNING
Health: Healthy
你也能點進去看 Logs,
裡面會出現:
🚀 Todo API running on port 3000
這就代表整個環境已經準備好了 💪
今天是我第一次真的在 AWS 上「跑容器」。
整個過程讓我體會到 Docker 在雲端的價值:
我不需要自己開主機、不需要手動部署,只要推個 image,AWS 就幫我跑起來。
最大的收穫是理解了 ECS 的工作流程:
這比想像中順利得多,也讓我第一次感覺到「雲端真的能讓部署變簡單」。