[AWS][Route53][ELB] 各種Domain無法正確導流問題

前情

最近有需求要架設一個對外的Webservice服務
需要在AWS申請Domain
然後導流到ELB(Elastic Load Balancer)
而且要用IaC的方式實作(infrastructure as code)
所以就用了AWS提供的Cloudformation

狀況開始

搞了3天,建立好了第一版Cloudformation的template
(Resource每次建立失敗也要算一小時的錢超貴的RRR)

狀況1

輸入我申請的Domain
網頁馬上出現

“Can not reach this page”

於是就往回Debug

  1. Instance public IP => 正常連線(O)
  2. ELB domainname => 正常連線(O)
  3. CustomeDomain => “Can not reach this page”(X)

所以馬上知道是Domain沒有導流到ELB去啊啊啊啊啊
先去了Record set看看有沒有設定好

Alias 的確是導流到我指定ELB沒錯
太糟糕,當下完全不知道問題在哪


後來終於找到問題…

狀況1解決方案

原本申請AWS帳號
同一組主要Domain在Route53已經有一組Hostzone資料了
(有其他subdomain在跑其他service)

而我用Cloudformation在建了一筆一模一樣的主要Domain hostzone
所以他只讀到第一筆…
第二筆就算裡面的record set都不一樣,也讀不到

所以同樣的主要Domain不能在Route53同時存在兩筆…
因此Cloudformation
要用參數的方式先讀取原本存在的Hostzone id
在去新增record set

終於解決了…
..
..
才怪

狀況2

有人反應網站會時好時壞的
而且已經排除網路問題…

這次Debug就從尾巴測到頭

  1. Route53 => 時好時壞(X)
  2. ELB domainname => 時好時壞(X)
  3. EC2 Instance public IP => 正常連線(O)

狀況2解決方案

也就是說問題出在ELB這頭
於是翻了一下ELB的分流原理

找到關鍵
“ELB預設要指定最少兩個Subnet,會自動判斷要導流到哪個Subnet”
在兩個Subnet都在同一個VPC的情況下
其中一個Subnet的RouteTable沒有針對指定的Port開放Inbound
所以就變成時好時壞這種狀況

設定好RouteTable就搞定
完全穩定啦

後記

中間用到的很多網路架構花了很多時間去學
之前這塊根本沒甚麼概念
搞得焦頭爛額的
總算是參考官方Template弄出簡單的一版
之後還要考量安全性要如何再向上提升

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *