Azure vs. AWS: 為什麼 Azure 無法指定 Subnet 的可用區 (AZ)?
如果你是 AWS 的使用者,可能已經習慣了在建立 Subnet 時指定可用區 (Availability Zone, AZ)。但當你轉戰 Azure,可能會發現 「咦?Azure 竟然無法讓 Subnet 綁定到特定的 AZ?」 😲
這到底是為什麼?Azure 設計上有什麼不同?它的優勢又在哪裡?今天我們就來解開這個迷思!🔍
在 AWS 中,每個 Subnet 都是 「專屬於某個 AZ」
Subnet 綁定 AZ:你建立的 Subnet 只能存在於特定的 AZ。
AZ 掛掉,影響有限:如果某個 AZ 出現故障,只有該 AZ 內的 Subnet 和資源會受影響,其他 AZ 依然健在!
手動控制架構:你可以 手動 在不同 AZ 中建立 Subnet,來達到更細緻的可用性管理。
AWS CLI 建立 Subnet(範例)
aws ec2 create-subnet \
--vpc-id vpc-12345678 \
--cidr-block 10.0.1.0/24 \
--availability-zone eu-central-1a
這樣一來,這個 Subnet 只會存在於 eu-central-1a,所有部署在該 Subnet 的 EC2 也都會落在這個 AZ 內。
Azure:Subnets 是「Regional」而非「Zonable」
VNet(虛擬網路)是區域級的:Azure 的虛擬網路 (VNet) 覆蓋整個區域,而不是被分割成不同的 AZ。
Subnet 也是區域級的:Subnet 不會被限制在特定的 AZ,因此所有 AZ 都可以存取它。
可用區 (AZ) 是資源層級的設定:例如,你可以讓 VM 指定在哪個 AZ 內,但它仍然可以使用同一個 Subnet。
Azure CLI 建立 VMs 到不同 AZ
az vm create --name VM1 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet \
--subnet AppSubnet \
--zone 1
az vm create --name VM2 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet \
--subnet AppSubnet \
--zone 2
az vm create --name VM3 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet \
--subnet AppSubnet \
--zone 3
👉 這些 VM 雖然部署在不同的 AZ,但仍然使用同一個 Subnet! 🎯
為什麼 Azure 不讓 Subnet 綁定 AZ?
1. 更靈活的網路設計
在 AWS,你必須在每個 AZ 中建立不同的 Subnet,然後調整路由和安全性設定,這讓網路變得更複雜。Azure 的設計則是 讓 Subnet 橫跨整個區域,不管 VM 在哪個 AZ,都可以共用同一個 Subnet!
2. 提高容錯能力
在 AWS,如果某個 AZ 掛掉,該 AZ 內的 Subnet 也會跟著掛掉。但在 Azure,即使某個 AZ 掛掉,Subnet 本身還是可用的,只要該 AZ 內的 VM 重新啟動到其他 AZ,就能馬上恢復服務。
3. 減少管理負擔
在 AWS,你可能需要手動建立 3 個 Subnet,然後確保路由表、NACL(網路 ACL)和安全性組合適地應用到不同 AZ。而 Azure 省去這些麻煩,讓網路管理更簡單!
如何在 Azure 模擬 AWS 的 Subnet-Zone 行為?
雖然 Azure 不讓你直接指定 Subnet 到 AZ,但如果你真的想要模擬 AWS 的做法,可以手動建立 多個 Subnet,每個對應到一個 AZ,然後在正確的 Subnet 部署 VM。
Azure CLI 建立 AWS 風格的 Subnet
# 建立 Subnet 1(對應 AZ 1)
az network vnet subnet create --vnet-name AppVNet \
--resource-group RG-WestEurope \
--name AppSubnet-AZ1 --address-prefixes 10.0.1.0/24
# 建立 Subnet 2(對應 AZ 2)
az network vnet subnet create --vnet-name AppVNet \
--resource-group RG-WestEurope --name AppSubnet-AZ2 \
--address-prefixes 10.0.2.0/24
# 建立 Subnet 3(對應 AZ 3)
az network vnet subnet create --vnet-name AppVNet \
--resource-group RG-WestEurope --name AppSubnet-AZ3 \
--address-prefixes 10.0.3.0/24
然後分別部署 VM 到對應的 Subnet 和 AZ:
az vm create --name VM-AZ1 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet --subnet AppSubnet-AZ1 --zone 1
az vm create --name VM-AZ2 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet --subnet AppSubnet-AZ2 --zone 2
az vm create --name VM-AZ3 --resource-group RG-WestEurope \
--image UbuntuLTS --vnet-name AppVNet --subnet AppSubnet-AZ3 --zone 3
👉 這樣就能在 Azure 內部 模擬 AWS 的 Subnet-Zone 行為 了!
結論:AWS vs. Azure Subnet 設計對比
AWS:Subnets 綁定 AZ,適合手動微調可用性策略。
Azure:Subnets 跨整個區域,簡化網路管理,提高靈活性。
所以,Azure 並不是「不如 AWS」,而是「設計理念不同」!
留言
張貼留言