iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

在 AWS 雲端平台中,運算資源是所有應用的基石。根據應用需求、成本考量與維運人力的不同,AWS 提供了多種運算選項,從最基礎的虛擬機到完全無伺服器的架構,都能靈活搭配。

想像一下,你要部署一個應用程式,但不想買實體伺服器。AWS 就像是一個超大的「雲端機房租賃公司」,提供各種不同規格的運算資源,並以開發者的角度來分享我的經驗。以下是五種主要的運算服務:

1. EC2(Elastic Compute Cloud)- 雲端虛擬主機

簡單理解: 就像在雲端租一台電腦,你可以完全控制它。

適合場景:

# 例如你有一個 Django 網站需要部署
# 在 EC2 上你需要:
sudo apt update
sudo apt install python3 nginx postgresql
pip install django
# 完全像在自己電腦上操作

實際例子:

  • 需要運行特定版本的資料庫(如 PostgreSQL 12.5)
  • 要安裝自定義的系統軟體
  • 需要 GPU 運算(機器學習訓練)
  • 長時間運行的服務(24/7 線上)

優缺點:

  • ✅ 完全控制權,想裝什麼就裝什麼
  • ✅ 可以選擇 Reserved Instance 節省長期成本
  • ❌ 需要自己管理作業系統更新、安全性
  • ❌ 需要自己處理負載平衡、自動擴展

2. ECS(Elastic Container Service)- 容器編排服務

簡單理解: 如果你會用 Docker,ECS 就是幫你管理多個容器的工具。

適合場景:

# 你的 Dockerfile
FROM node:22
COPY . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]

# ECS 任務定義(類似 docker-compose)
{
  "family": "my-app",
  "containerDefinitions": [
    {
      "name": "web-server",
      "image": "my-app:latest",
      "memory": 512,
      "portMappings": [{"containerPort": 3000}]
    }
  ]
}

實際例子:

  • 微服務架構(前端、API、資料庫各自獨立容器)
  • 需要快速擴展的網站(自動增減容器數量)
  • 多環境部署(開發、測試、正式環境用同一套容器)

3. Fargate - 無伺服器容器

簡單理解: 是一個讓你可以直接運行應用程式容器,而不用管理底層伺服器的雲端服務,但必須搭配其他服務使用。如EKS、ECS。

與 EC2 的差別:

# 傳統 ECS + EC2:你要管理
- EC2 instance 的規格選擇
- 作業系統更新
- 容器調度到哪台機器

# ECS + Fargate:你只需要定義
- 容器需要多少 CPU/記憶體
- 要跑幾個副本

實際例子:

  • 定期執行的批次作業(每天凌晨處理資料)
  • 流量不穩定的 API(白天忙碌,晚上閒置)
  • 快速原型開發(不想花時間配置伺服器)

成本比較:

假設運行一個小型 API:
- Fargate:$0.045/小時(1 vCPU, 2GB RAM)
- EC2 t3.small:$0.0208/小時 + 管理時間成本
→ 如果你的時間很寶貴,Fargate 可能更划算

4. EKS(Elastic Kubernetes Service)- 企業級容器編排

簡單理解: 如果 Docker Compose 是玩具車,Kubernetes 就是聯結車。EKS 是 AWS 代管的 K8s。

什麼時候需要?

# 當你的應用複雜到需要這樣的配置時:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-a
spec:
  replicas: 5
  template:
    spec:
      containers:
      - name: api
        image: my-api:v2.1
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
---
apiVersion: v1
kind: Service
# ... 還有 ConfigMap、Secret、Ingress 等等

實際場景:

  • 超過 20 個微服務需要協調
  • 需要複雜的網路政策
  • 多租戶環境(不同客戶隔離部署)
  • 已經有 DevOps 團隊熟悉 Kubernetes

學習成本:

Docker 基礎 → ECS (學習曲線:1-2週)
Docker 基礎 → Kubernetes → EKS (學習曲線:2-3個月)

5. Lambda - 無伺服器函式(推薦入門)

簡單理解: 寫一個函式,AWS 幫你跑,用多少付多少。

經典例子:

# 一個處理圖片上傳的 Lambda 函式
import json
import boto3
from PIL import Image

def lambda_handler(event, context):
    # 當有圖片上傳到 S3 時觸發
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']

    # 下載原圖,產生縮圖
    s3 = boto3.client('s3')
    # ... 圖片處理邏輯

    return {
        'statusCode': 200,
        'body': json.dumps('縮圖產生完成!')
    }

觸發方式:

  • 📧 API 呼叫GET /api/users → 執行查詢函式
  • 定時執行:每天凌晨 3 點備份資料庫
  • 📁 檔案上傳:圖片上傳後自動產生縮圖
  • 📱 訊息佇列:處理來自 SQS 的訊息

成本效益:

免費額度(每月):
- 100萬次呼叫
- 400,000 GB-秒運算時間

實際例子:
- 小型 API(每天 1000 次呼叫)→ 幾乎免費
- 圖片處理服務(每月處理 50萬張)→ 約 $10-20
- 定時任務(每小時跑 5 分鐘)→ 約 $1-5

選擇建議流程圖

以下為我使用的經驗及想法

https://ithelp.ithome.com.tw/upload/images/20250917/20106094a7fnrGxBHI.png

實戰建議

新手入門路線:

  1. 第一步:用 Lambda 做一個簡單的 API
  2. 第二步:學習 Docker,嘗試用 Fargate 部署
  3. 第三步:了解 ECS,學習容器編排
  4. 進階:根據需要選擇 EKS 或深入 EC2

避免的陷阱:

  • ❌ 一開始就選擇最複雜的 EKS
  • ❌ 用 EC2 部署簡單的靜態網站
  • ❌ 沒有監控就上線(記得設置 CloudWatch)
  • ❌ 忽略安全性設定(IAM 權限很重要)

大多數個人專案和小型應用,Lambda + 一些 AWS 託管服務(如 RDS、S3)就足夠了!


上一篇
Day 2 花錢前先學省錢:AWS 成本控制心法
下一篇
Day 4 數位保險箱:AWS 儲存服務
系列文
來都來了,那就做一個AWS從0到100的微服務AI小平台!8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言