搞懂 AWS Load Balancer 與 Target Group

Published November 26, 2025 by 徐培鈞
架構

如果你剛開始接觸 AWS,看到 Load Balancer、Target Group、VPC 這些名詞可能會有點頭痛。別擔心,這篇文章會用最白話的方式,帶你一步步理解它們是什麼、怎麼運作、為什麼要這樣設計。

簡單來說,這些東西就是在處理一件事:怎麼把使用者的請求,安全又聰明地分配給後端的伺服器

先搞懂網路基礎架構

在講 Load Balancer 之前,我們需要先認識幾個 AWS 網路的基本元件,不然後面會看不懂。

VPC — 你的專屬網路空間

VPC(Virtual Private Cloud)就是你在 AWS 裡擁有的一塊獨立、專屬的網路空間

想像你買了一塊地,圍起來變成一個封閉社區。這個社區是你的,外人進不來,你可以決定裡面要蓋什麼、怎麼規劃。

AZ — 不同的機房

AZ(Availability Zone)是 AWS 在同一個地區內的不同機房

重點是:這些機房彼此獨立,一個故障不會影響另一個

就像你的社區橫跨兩個街區,就算其中一個街區停電,另一個街區還是有電。所以我們通常會把服務分散放在不同的 AZ,確保高可用性。

Subnet — 社區裡的分區

Subnet(子網路)就是把 VPC 這個社區再劃分成不同區域。

通常會分成兩種:

Public Subnet(公開子網路)
社區裡靠近大門的區域,外面的人可以直接走進來。適合放需要對外服務的東西,例如 Load Balancer。

Private Subnet(私有子網路)
社區裡面比較內部的區域,外人不能直接進入,要透過管理員(ALB)帶進來。適合放後端伺服器、資料庫這些你不想直接暴露的資源。

Internet Gateway — 社區大門

IGW(Internet Gateway)就是這個社區的大門,所有從外面進來的流量都要經過它。

沒有這道門,你的社區就是完全封閉的,外面的人進不來。

認識 Load Balancer

搞懂網路架構後,我們來看主角。

ALB — 聰明的接待員

ALB(Application Load Balancer)的工作就是:接收所有使用者的請求,然後聰明地分配給後端的伺服器

想像你開了一家超人氣餐廳,門口擠滿了客人。ALB 就是站在門口的接待員,負責接待所有上門的客人,然後決定要把他們帶到哪一桌。

ALB 放在哪裡?

這是很多人搞混的地方,讓我說清楚:

ALB 的節點是放在 Public Subnet 裡面的。

當你建立一個 ALB 時,AWS 會要求你選擇至少兩個不同 AZ 的 Subnet。然後 ALB 會在每個你選的 Public Subnet 裡面各放一個節點。

為什麼要放在不同 AZ?為了高可用性。如果某個 AZ 的機房掛了,另一個 AZ 的 ALB 節點還可以繼續服務。

ALB 資源 vs ALB 節點

這邊要區分一下:

  • ALB 資源:你在 AWS 創建時取的名稱(例如 my-application-alb),這是你管理的單位
  • ALB 節點:AWS 自動幫你在各個 Subnet 裡建立的實際機器,你不用管它

你操作的是同一個 ALB 資源,但背後 AWS 會自動管理多個節點來處理流量。

認識 Target Group

Target Group — 後端伺服器的名單

Target Group 就是一份「名單」,上面記錄著哪些後端伺服器可以處理請求。

ALB 收到請求後,會去查這份名單,然後從裡面挑一台健康的伺服器來處理。

舉個例子,假設你有一個 web-tg 的 Target Group,裡面登記了三台 EC2:

Target Group: web-tg
├── EC2-A (10.0.10.11) ✅ 健康
├── EC2-B (10.0.10.12) ✅ 健康
└── EC2-C (10.0.10.13) ❌ 不健康

當請求進來,ALB 只會把流量分給 EC2-A 或 EC2-B,不會送去 EC2-C。

Target Group 裡面有什麼設定?

建立 Target Group 時,你需要設定幾個東西:

說明這份名單叫什麼
範例web-tg、api-tg
說明名單上要放什麼類型的目標
範例EC2、IP、Lambda
說明用什麼協定跟後端溝通
範例HTTP、HTTPS
說明後端伺服器監聽的 Port
範例80、3000、8080
說明這些目標在哪個 VPC 裡
範例你的 VPC
說明怎麼檢查目標是否健康
範例每 30 秒打一次 /health

Target Type — 名單上可以放誰?

Target Group 支援三種類型的目標:

Instance(EC2 執行個體)
最常見的選擇。你直接把 EC2 的 Instance ID 加進名單,例如 i-0abc123def456。ALB 會自動去找這台 EC2 的 IP 來送流量。

IP(IP 位址)
直接指定 IP 位址,例如 10.0.10.50。這個適合:

  • 目標不是 EC2(例如地端機器透過 VPN 連進來)
  • 你想更精確控制流量要送去哪

Lambda(Lambda 函數)
把 Lambda 函數當作後端。請求進來就直接觸發 Lambda 執行,完全不用管伺服器。適合流量不穩定、不想一直開機器的場景。

認識 Listener 與 Routing Rules

Listener — ALB 的服務窗口

當你建立 ALB 之後,還要設定 Listener,告訴 ALB「你要聽哪些 Port 進來的請求」。

最常見的設定:

  • HTTP :80 — 一般網頁流量
  • HTTPS :443 — 加密的網頁流量

你可以想像成櫃檯開了幾個服務窗口,客人要到對的窗口才會被受理。

一個 ALB 可以同時設定多個 Listener,例如同時聽 80 和 443。

Routing Rules — ALB 的分派規則

光是聽到請求還不夠,ALB 還要知道「這個請求要轉給誰處理」。

這就是 Routing Rules(路由規則) 的工作。它會根據你設定的條件,決定把請求轉給哪個 Target Group。

例如:

  • 網址是 /api/users 開頭 → 轉給 users-tg
  • 網址是 /api/orders 開頭 → 轉給 orders-tg
  • 都不符合 → 回傳 404

每個 Listener 底下都可以設定多條 Routing Rules。

ALB、Listener、Routing Rules、Target Group 怎麼一起運作?

這四個東西是一起運作的,我們用一個具體情境來說明:

假設你開了一家公司,有兩個部門:

  • 客服部門:處理客戶問題
  • 業務部門:處理訂單

你請了一個櫃檯人員,負責接待所有上門的客人。

AWS 元件ALB
負責什麼接收所有請求
AWS 元件Listener
負責什麼決定要聽哪些 Port(80、443)
AWS 元件Routing Rules
負責什麼根據條件決定找哪個部門
AWS 元件Target Group
負責什麼記錄誰可以處理工作

完整流程是這樣跑的

Step 1:Listener 決定要不要受理

客人來到櫃檯,櫃檯有兩個窗口:

  • 80 號窗口(HTTP)
  • 443 號窗口(HTTPS)

客人要先到對的窗口,櫃檯才會受理。

Step 2:Routing Rules 決定找哪個部門

客人:「我要問產品問題」(請求 /api/support)
櫃檯看規則:「/api/support 開頭的是客服的事」→ 找客服部門

客人:「我要下訂單」(請求 /api/orders)
櫃檯看規則:「/api/orders 開頭的是業務的事」→ 找業務部門

Step 3:Target Group 決定分給誰

櫃檯查客服部門的員工名單(support-tg):
├── 小明  有空
├── 小華  有空  
└── 小美  請假中(不健康)

 把工作分給小明或小華,不會給小美

對應到 AWS 實際設定

ALB: my-application-alb

├── Listener: HTTP :80
   
   └── Routing Rules(路由規則):
       ├── IF path = /api/support  轉給 support-tg
       ├── IF path = /api/orders   轉給 orders-tg
       └── 都不符合              回傳 404

└── Listener: HTTPS :443
    
    └── Routing Rules:
        └── (跟上面一樣的規則)

Target Groups:
├── support-tg(客服部門名單)
   ├── EC2-A (10.0.10.11) ✅ Healthy
   └── EC2-B (10.0.10.12) ✅ Healthy

└── orders-tg(業務部門名單)
    ├── EC2-C (10.0.20.11) ✅ Healthy
    └── EC2-D (10.0.20.12) ❌ Unhealthy(不會收到請求)

Routing Rules 可以根據什麼條件分流?

範例/api/users、/api/products
用途根據 URL 路徑分到不同服務
範例admin.example.com、api.example.com
用途根據子網域分到不同服務
範例X-App-Version: v2
用途根據特定 Header 做 A/B 測試
範例?platform=mobile
用途根據參數分流到不同版本

為什麼 Target Group 要獨立出來?

想像一下這個情況:

客服部門要加人了

❌ 如果名單寫死在櫃檯的規則裡:

  • 你要去改 Routing Rules
  • 等於要重新設定 ALB

✅ 如果名單是獨立的(Target Group):

  • 直接在客服名單加一個人就好
  • 櫃檯的規則完全不用動

搭配 Auto Scaling 更強大

當流量暴增,AWS 自動幫你多開幾台 EC2:

  • 新機器自動加進 Target Group 名單
  • ALB 馬上就能把流量分給它們

流量變小,多餘的機器被關掉:

  • 自動從名單移除
  • 整個過程全自動,你不用改任何設定

完整請求流程

現在我們把所有元件串起來,看看一個請求是怎麼跑的:

一個重要觀念:VPC 內部路由

你可能會問:「ALB 在 Public Subnet,EC2 在 Private Subnet,它們怎麼溝通?」

答案是:同一個 VPC 內,Public 跟 Private Subnet 天生就可以互相溝通

它們不需要繞出去再繞回來,直接透過 VPC 內部的路由就可以連線。這也是為什麼我們可以把 EC2 放在 Private Subnet(比較安全),但 ALB 還是可以把流量送過去。

Health Check:確保機器還活著

Target Group 裡有一個超重要的功能:Health Check(健康檢查)

ALB 會定期去「戳」名單上的每一台機器,確認它還活著。如果某台機器沒回應,就會被標記為「不健康」,ALB 就不會再把請求送給它。

重點:只有健康的機器才會收到請求!

可以設定的參數

說明檢查哪個網址,通常是 /health
說明多久檢查一次,例如每 30 秒
說明等多久算超時
說明連續幾次成功才算健康
說明連續幾次失敗才算不健康

常見問題快問快答

ALB 到底在 Subnet 裡面還是外面?

在裡面。ALB 的節點會被放在你指定的 Public Subnet 裡。

為什麼 EC2 要放在 Private Subnet?

安全。Private Subnet 不能直接從外面連進來,只有透過 ALB 才能存取。

Public 跟 Private Subnet 怎麼溝通?

同一個 VPC 內,它們天生就可以互通,透過內部路由就好。

Target Group 是什麼?

就是一份後端伺服器的名單,ALB 根據這份名單決定把請求送去哪。

Health Check 設在哪裡?

設在 Target Group 裡面。每個 Target Group 可以有自己的健康檢查設定。

小結

把握這幾個重點,你就算入門了:

  1. VPC 是你的專屬網路空間,裡面分成 Public 跟 Private Subnet
  2. ALB 放在 Public Subnet,負責接收和分配請求
  3. Target Group 是後端伺服器的名單,ALB 根據它來轉發請求
  4. EC2 通常放在 Private Subnet,比較安全
  5. Health Check 確保只有健康的機器會收到請求
  6. 同一個 VPC 內,Public 跟 Private Subnet 可以直接互通

下一步可以研究 Auto Scaling Group 怎麼跟 Target Group 搭配,讓你的服務能根據流量自動伸縮!