AWS NAT Gateway 佈局和設定

POSTED BY   Chris
2021 年 8 月 3 日
AWS
AWS NAT Gateway 佈局和設定

一般在個人 AWS 測試帳號中,應該很少會長期去開啟 AWS NAT Gateway,因為價格滿貴,開啟一個每月就要價大約 1245 台幣(以目前匯率來計算),而且 AWS NAT Gateway 並非在 free tier 的方案裡面,也就是如果要測試的話,都是會產生費用的,這部分就要特定小心

而一般在企業中,正式 production 環境中如果 Lambda 需要掛上 VPC 連線非 AWS 服務的外網,如 call third party sms API、push API、Server 安全性更新等等…,勢必是需要開啟 NAT Gateway,當然如果 Lambda 只需要在 VPC 內連線 AWS 服務,可以使用 VPC endpoints 就好,達到節費的效果,而另外常見的 Server 服務,不論在 EC2 or ECS 中,會希望放在 VPC private subnet 中,經由 ELB 提供對外的連線服務,如果是這種使用方式,而 Server 又需要連線非 AWS 服務的外網,勢必也是需要開啟 NAT Gateway

 

NAT Gateway 相較於 NAT instances 來說,本身在單一 AZ 中已經有實作 High Available,可參考 AWS 文件中的說明,但如果單一 AZ 如果因為天災人禍(如停電)而失效,代表服務也就跟著沒辦法連線出去,所以一般會用 Multi-AZ 來做 HA Redundancy 達到 failover,接著來看一張圖

Hint: 點圖可放大

 

這張圖使用 2 個 API Gateway 分別在兩個 AZ 中做 HA, 而在設定上,記得 NAT Gateway 本身要放在 public subnet (如圖中綠色 icon 區塊),也就是這個 public subnet 的 route table 是需要指向 IGW (Internet Gateway),為什麼 NAT Gateway 一定要放 public subnet ?因為 NAT Gateway 本身才能綁定 public ip 後,然後具有連線 Internet 的功能

而 ECS or Lambda 放在 private subnet (如圖中藍色 icon 區塊),這個 private subnet 的 route table 需要指向 NAT Gateway (id 為 nat- 開頭),如此一來服務就能順利透過 NAT Gateway 連線外網,同時也讓服務不曝露在 Internet 上 (因為沒有綁 public ip),來達到一定的保護作用

圖片中的架構,可以用 AWS CDK 輕鬆建構,可以參考我的 GitHub Repo

 

需要開到 3 個以上的 NAT Gateway 在 3 個以上的 AZ 中嗎?

這個問題我覺得應該跟服務想提供的 SLA 等級和流量大小有關,但一般公司中為了節費,個人是覺得開兩個 AZ 就夠了,既可以達到 HA 的效果,又比開 3 個以上節費,畢竟兩個 AZ 同時掛掉的機率滿小的,因為不同 AZ 已經是有用物理條件來做隔離(例如在不同機房中)

 

結論

以自己在公司的例子中,為了結費在 Staging 環境只有開 1 台 NAT Gateway 給不同 AZ 的服務共用,而 Production 環境就開 2 台來做 HA 來達到最基本的高可用服務

歡迎留言
0

您可能也想看

Workaround for AWS Grafana alerting
2023 年 8 月 3 日
AWS, DevOps
AWS VPC Endpoint 使用場景
2022 年 3 月 14 日
AWS, CDK, Network
CDK 指定 Physical names 運作方式
2021 年 12 月 4 日
AWS, CDK, Cloudformation