
這篇在講什麼?

你已經會開帳號、設 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 Group | port 不通的時候 |
| L7 應用層 | ALB、Route 53、API Gateway | HTTP 回 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)
| 子網 | 類型 | AZ | CIDR | 放什麼 |
|---|---|---|---|---|
| public-subnet-1 | Public | ap-northeast-1a | 10.0.1.0/24 | ALB |
| public-subnet-2 | Public | ap-northeast-1c | 10.0.2.0/24 | ALB |
| private-subnet-1 | Private | ap-northeast-1a | 10.0.10.0/24 | App Server |
| private-subnet-2 | Private | ap-northeast-1c | 10.0.20.0/24 | App 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 | 來源 |
|---|---|---|
| Inbound | 80 | 0.0.0.0/0 |
| Inbound | 443 | 0.0.0.0/0 |
App Server 的 SG:
| 方向 | Port | 來源 |
|---|---|---|
| Inbound | 8080 | ALB 的 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(如果有的話)
系列文章
- AWS 基本概念 — 帳號、EC2、VPC 的基礎認識
- 使用 AWS 建設 VPN — 實作 VPC + Subnet + IGW + Security Group
- AWS IAM 設定 — 權限管理與安全最佳實踐
- 本篇:AWS 網路基礎與服務部署 — 從 VPC 設定走到服務上線
網路設定就像水電管線——平常沒人在意,壞掉的時候所有人都在意。