# aws vpc subnet 小常識

# AWS VPC with subnet

在 AWS 的服務中，可以透過 [AWS Virtual Private Cloud](https://docs.aws.amazon.com/zh_tw/vpc/latest/userguide/what-is-amazon-vpc.html)

來把部署的運算資源做有效的管控以及隔離

## AWS subnet

每當開啟一個 VPC 時，預設會開啟一個網路區段的空間來配置資源

舉例來說: 一般會是 10.0.0.0/16 代表有 16bit 被 lock 只剩 16bit 可分配

而 VPC 內會在把該網路區段隔離成多個更小的子網段稱為 subnet

舉例來說: 以下圖來說，切隔成 10.0.1.0/24 與 10.0.2.0/24 兩個子網段

![image](https://hackmd.io/_uploads/HyNInVC-0.png align="left")

且在假設都在相同網段且相同 Available Zone 的子網段彼此可以相通

而其中兩個子網段的連通性會根據其設定 route table 來做路由處理

比如說 路徑是在 10.0.1.x 的 target 會被導向 local

而 public subnet 因為有設定連接到 Internet Gateway

所以 route table 可以解析外部的 request 所以跟外部做互通

一般會把 Subnet 有沒有連接到 Internet Gateway 與否分成兩種 Subnet

### Public Subnet

一般會放置需要接收外部 request 的服務的比如 front-end web server 或是 api server

### Private Subnet

一般會放置不需要對外的服務，比如內部 cronjob 或是 ETL 等等內部服務

甚至是 DB service 通常也會配置 private subnet 並且限定特殊 Security Group 存取

### 一般的 High Availability 配置

為了避免因為單一 Available Zone 出事導致服務無法運行

通常會把一個服務配置到兩個不同 Available Zone 的地方

![image](https://hackmd.io/_uploads/HkEQlr0bR.png align="left")

以上圖來說 AZ1, AZ2, AZ3 只要還有兩個 AZ 有正常 服務就可以正常運行

## IP 小知識

當 subnet 為 10.0.1.0/24 時，代表有 24bit 被 lock 只剩下 (32-24) = 8 bit 可以使用

所以代表有 2^8 = 256 個 ip 可以用

然而以下有幾個特殊的 IP是無法使用的

10.0.1.0 ---&gt; NETWORK ADDRESS 用來界定 subnet 10.0.1.1 ---&gt; AWS ROUTING 10.0.1.2 ---&gt; AWS DNS 10.0.1.3 ---&gt; AWS FUTURE 10.0.1.255 ---&gt; BROADCAST

所以實際上能使用的只有 256 - 5 = 251 個 ip
