cover

這篇在講什麼?

網路七層與 AWS

你已經會開帳號、設 VPN、管權限了,但要怎麼把一個 Web App 真的部署上去?這篇就是那個「把所有東西串起來」的實戰指南。

先講結論

部署一個 Web App 到 AWS,你需要走完這條路:VPC → Subnet(跨 AZ)→ IGW + NAT GW → Route Table → Security Group → 部署服務到 Private Subnet → ALB 放 Public Subnet → Route 53 綁域名。看起來步驟很多,但邏輯其實很直覺——就是「建房子 → 隔間 → 裝門 → 裝鎖 → 把東西搬進去」。


OSI 對應 AWS:除錯的時候你會感謝這張表

你不需要背 OSI 七層(考完試就可以忘了),但你得知道出問題的時候該往哪裡查。

OSI 層級對應 AWS 服務你什麼時候會碰到
L3 網路層VPC、Subnet、Route Table、IGW連不上任何東西的時候
L4 傳輸層NLB、Security Groupport 不通的時候
L7 應用層ALB、Route 53、API GatewayHTTP 回 502/504 的時候

真心建議:80% 的網路問題出在 L3 和 L4。先檢查 Route Table 和 Security Group,不要一上來就懷疑 application code。


把服務部署上去:Step by Step

假設你要部署一個 Web App,我按照實際操作順序來走。

Step 1:建 VPC

CIDR: 10.0.0.0/16

給自己留足空間。我看過有人一開始用 /24 覺得夠用,結果半年後要加第三個 subnet 就沒 IP 了。

Step 2:劃分子網(至少 4 個,跨 2 個 AZ)

子網類型AZCIDR放什麼
public-subnet-1Publicap-northeast-1a10.0.1.0/24ALB
public-subnet-2Publicap-northeast-1c10.0.2.0/24ALB
private-subnet-1Privateap-northeast-1a10.0.10.0/24App Server
private-subnet-2Privateap-northeast-1c10.0.20.0/24App Server

為什麼要跨 AZ?因為 AWS 的一個 AZ 就是一個機房。機房掛了(對,會掛),另一個 AZ 還能接住流量。而且 ALB 也強制要求至少兩個 AZ,不跨不行。

Step 3:建 Internet Gateway + NAT Gateway

  • IGW 掛到 VPC → 讓 Public Subnet 能上網
  • NAT GW 建在 Public Subnet → 讓 Private Subnet 能「出去」(抓套件、更新),但外面「進不來」

這個設計很像公司大樓:大廳有門可以出去,但你不能從大廳直接走進別人的辦公室。

Step 4:設定 Route Table

  • Public Subnet:0.0.0.0/0 → IGW
  • Private Subnet:0.0.0.0/0 → NAT GW

踩坑紀錄:我有次建了 NAT GW 但忘了改 Private Subnet 的 Route Table,結果 ECS task 起不來因為拉不到 container image。花了一小時才找到原因。Route Table 是最容易被遺忘的設定,沒有之一。

Step 5:建 Security Group

你至少需要兩個:

ALB 的 SG:

方向Port來源
Inbound800.0.0.0/0
Inbound4430.0.0.0/0

App Server 的 SG:

方向Port來源
Inbound8080ALB 的 SG

注意 App Server 的來源不是 IP,是 ALB 的 Security Group。這樣只有透過 ALB 的流量才進得來,直接打 App Server 的 IP 是打不通的。

Step 6:部署服務

兩個選擇:

  • EC2:自己管機器,什麼都能控制,但你也得自己處理 patch、scaling
  • ECS + Fargate:丟 container image 進去就好,不用管底層。2024 年的我會建議大部分情況選這個

不管選哪個,服務放 Private Subnet。外部流量一律透過 ALB 進來。

Step 7:建 ALB

  • 放在 Public Subnet(它要接外部流量)
  • Target Group 指向你的 EC2 或 ECS service
  • 設 Health Check(例如 /health),這樣 ALB 才知道後面的服務還活著
  • 有域名的話,用 ACM 申請免費的 TLS 憑證掛上去

Step 8:Route 53 綁域名

建 Hosted Zone → 新增 A Record(Alias)指向 ALB → 完成。

使用者就能用 app.example.com 來訪問你的服務了。


部署前 Checklist

每次部署我都會跑一遍這個清單,避免漏掉東西然後 debug 兩小時:

  • VPC 建好,CIDR 設 /16
  • Public / Private Subnet 各兩個,跨不同 AZ
  • IGW 建好掛到 VPC
  • NAT GW 建好(放在 Public Subnet)
  • Route Table 都設對了(Public → IGW,Private → NAT GW)
  • Security Group 只開必要 port
  • ALB 建好,Health Check 正常
  • 服務跑在 Private Subnet
  • Target Group 健康檢查通過
  • Route 53 域名綁好(如果有的話)
  • ACM 憑證掛上 ALB(如果有的話)

系列文章

  1. AWS 基本概念 — 帳號、EC2、VPC 的基礎認識
  2. 使用 AWS 建設 VPN — 實作 VPC + Subnet + IGW + Security Group
  3. AWS IAM 設定 — 權限管理與安全最佳實踐
  4. 本篇:AWS 網路基礎與服務部署 — 從 VPC 設定走到服務上線

網路設定就像水電管線——平常沒人在意,壞掉的時候所有人都在意。