iT邦幫忙

2025 iThome 鐵人賽

0
自我挑戰組

《轉職學習日記:JavaScript × Node.js × TypeScript × Docker × AWS ECS》系列 第 38

Day38 - 持續成長學習藍圖 - AWS 與 ECS(建立第一個 ECS Cluster_手動部署容器)

  • 分享至 

  • xImage
  •  

昨天學了 ECS、Task、Service 的概念,
今天就是實際上線的第一步:

建立一個 Cluster、定義 Task、部署容器。

我們要做到的事很單純:
✅ 建立一個 ECS Cluster
✅ 建立一個 Task Definition
✅ 從 ECR 拉一個 image 來跑
✅ 驗證「容器真的跑起來了」


☁️ Step 1:建立 ECR Repository

先幫容器找個家。
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 儲存位置。


🧱 Step 2:將映像推上 ECR

回到本機(你的專案根目錄),登入 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 映像正式上雲端了!


🏗️ Step 3:建立 ECS Cluster

1️⃣ 打開 AWS Console → 搜尋「ECS」
2️⃣ 點「Create cluster」
3️⃣ 模式選擇:Fargate
4️⃣ 輸入名稱:todo-cluster
5️⃣ 其他選項預設即可 → 「Create」

ECS 就會建立一個可用來部署容器的 Cluster。


🧩 Step 4:建立 Task Definition(任務定義)

這是 ECS 最關鍵的一步,
它決定要跑哪個 image、開哪些 port、要多少 CPU。

1️⃣ 在 ECS 介面左側點「Task definitions」 → 「Create new task definition」
2️⃣ 選擇「Fargate」
3️⃣ 設定名稱:todo-task
4️⃣ 容器設定:

  • Container name: todo-api
  • Image: 你的 ECR Image URI
  • Port mapping: 3000
    5️⃣ 設定資源:
  • CPU: 256
  • Memory: 512
    6️⃣ 點「Create」

建立完成後,這份 Task 定義就像是一個「容器模板」。


🚀 Step 5:建立 Service 並執行

1️⃣ 回到 ECS → 選擇剛剛的 Cluster(todo-cluster
2️⃣ 點「Create」 → 選擇「Service」
3️⃣ 填寫:

  • Launch type:Fargate
  • Task Definition:選 todo-task
  • Service name:todo-service
  • Desired tasks:1(先跑一個容器)
    4️⃣ 建立新的 VPC 與 Subnet(若系統自動幫你生成,直接用預設)
    5️⃣ Security group:
  • 開啟 TCP 3000 port
    6️⃣ 點「Create Service」

ECS 會幫你啟動一個 Fargate 容器,
幾分鐘後,你會看到狀態變成:

Running (1 task)

🌍 Step 6:測試連線

點進 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

📊 Step 7:觀察 Task 狀態

在 ECS Console → Tasks 裡可以看到:

  • Last status: RUNNING
  • Desired status: RUNNING
  • Health: Healthy

你也能點進去看 Logs,
裡面會出現:

🚀 Todo API running on port 3000

這就代表整個環境已經準備好了 💪


🎯 學習心得 / 今日收穫

今天是我第一次真的在 AWS 上「跑容器」。
整個過程讓我體會到 Docker 在雲端的價值:

我不需要自己開主機、不需要手動部署,只要推個 image,AWS 就幫我跑起來。

最大的收穫是理解了 ECS 的工作流程:

  1. ECR 放映像
  2. ECS Cluster 管理環境
  3. Task Definition 告訴 AWS 要怎麼跑容器
  4. Service 幫你確保容器一直活著

這比想像中順利得多,也讓我第一次感覺到「雲端真的能讓部署變簡單」。


上一篇
Day37 - 持續成長學習藍圖 - AWS 與 ECS
下一篇
Day39 - 持續成長學習藍圖 - AWS 與 ECS(讓 Todo API 跑上 ECS_整合 Fargate)
系列文
《轉職學習日記:JavaScript × Node.js × TypeScript × Docker × AWS ECS》39
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言