架構重整 - Route 53 設置

在「架構重整 – 使用 ELB 與 Docker」中,已經完整描述我如何從 legacy sysytem 轉移至使用 Docker 和 ELB 來建立可用性高的系統架構,但其中沒有提到 Route 53 的設定,因此這邊詳細補充說明一下如何設定 Route 53,以及為何要使用 Route 53。

Route 53 也是 AWS 服務之一,他其實就是 DNS (Doman Name System),可能有人會好奇說,如果是在 Godaddy 等網域公司購買網域,都會附上免費的 DNS 服務,為何需要轉移到 AWS 上面?

架構重整 - Route 53 設置

假設今天沒有使用 ELB,我認為沒有轉移的必要性,但如果使用 ELB,真的必須做轉移,為什麼?

AWS 提供的 ELB 服務對外的 IP 基本上是不固定的,因為 AWS 會使用多台 instance 來建立高可用的 ELB,同時用此架構來抵擋外界的 DDoS 等攻擊。所以當你今天開啟一台 ELB,你只會拿到  ELB 的 domain name,像是這樣

xxxxxxxx.ap-northeast-1.elb.amazonaws.com

在 Godaddy DNS 設定頁面中,A record 只能填寫 IP 而不能寫入網域。CNAME record 雖然能填入網域,卻不能用在 @ (主要紀錄)中。以 koding.work 舉例:

  1. 如果我今天的 ELB 網域名稱是 koding-work-elb-12345.ap-northeast-1.elb.amazonaws.com
  2. 我到 Godaddy DNS 後台,只能設定 www.koding.work CNAME 到 kodiing-work-elb-12345.ap-northeast-1.elb.amazonaws.com (ELB)
  3. 但無法設定 koding.work CNAME 到 kodiing-work-elb-12345.ap-northeast-1.elb.amazonaws.com (ELB)
  4. 想要設定 koding.work A,但後面只能填 ip,所以也不能使用
  5. 想要設定 koding.work CNAME 到 www.koding.work,也會被拒絕
  6. 結論,koding.work 為主網域,只能設定 A record,不能設定 CNAME,所以只有 ip 才能做指向

導致主要網址 koding.work 並不能指向到 ELB,也不能透過 DNS 指向到 www.koding.work,除非要另外使用 nginx 等設置做手動轉址,但這樣管理上會非常繁複。

如果轉移到 Route 53,他的後台可以在設定 A record 的時候,直接指定哪一個 AWS 資源,如我們的目標 ELB,或是 CloudFront、S3 等等。這樣設定上就會很單純且直覺,沒有透過 hack 的手法下去作轉換,所有指向的功能都在 Route 53 中解決。

要作轉換也很簡單,先到 Route 53 中開啟一個新的 host zone,填入目標網域名稱。接著到 Godaddy DNS 後台,選擇「使用自訂名稱伺服器」,依序把 Route 53 提供的 NS record 填入 Godaddy 後台中並儲存。由於要將設定散佈到世界各地的伺服器中,完全生效需要幾分鐘的時間。

架構重整 - Route 53 設置
從 Route 53 中取得 NS record
將 Route 53 的 NS record 貼到 Godaddy 中

在當時的案例中,情況與我上面的假設略有出入,該案例主要使用的網域為 www.xxxx.com,所以我一開始在做 migrate 的時候,順序是這樣:

  1. 我先開啟了 ELB,並到 godaddy 中把 www.xxxx.com 的 CNAME 設定到 ELB  的網域(原本 CNAME 是指向 xxxx.com)
  2. 原先的 xxxx.com A record 保留舊有 EC2 ip
  3. 使用者如果輸入 www.xxxx.com,會直接進入 ELB 中
  4. 使用者如果輸入 xxxx.com,會先進入舊有 EC2 中,透過 EC2 中的 nginx rewrite 轉址成 www.xxxx.com,再進入 ELB
架構重整 - Route 53 設置
過渡狀態的轉址方式,左邊可以直接進 ELB,右邊則需要先透過舊的 EC2 nginx 轉址

在我逐步要把舊 EC2 廢除時,就發現會遇到 xxxx.com 沒辦法妥善轉址的問題!因此那時的策略是

  1. 先將 DNS 轉移到 Route 53
  2. 設定 CloudFront 負責原先舊 EC2 中 xxxx.com 轉 www.xxxx.com 的任務(可參考 架構重整 – CloudFront 轉址)
  3. 將 Route 53 中 xxxx.com 的 A record 指向 CloudFront
  4. 測試 ok 後逐步把舊 EC2 拔掉
架構重整 - Route 53 設置
最終的轉址方式

到這裡就算是完成了 ELB 轉移的過程,可以放心讓系統自生自滅了(誤)!

相關文章

拯救脆弱系統 – Migrate to RDS by DMS #1
拯救脆弱系統 – 使用 ELB 與 Docker
拯救脆弱系統 – 使用 CloudFront 轉址

參考資料

Route53 AWS 官方文件

封面照片備註

我知道圖片裡是 Route 66,只是懶得P圖,直接使用了XD

J
Written by J
雖然大學唸的是生物,但持著興趣與熱情自學,畢業後轉戰硬體工程師,與宅宅工程師們一起過著沒日沒夜的生活,做著台灣最薄的 intel 筆電,要與 macbook air 比拼。離開後,憑著一股傻勁與朋友創業,再度轉戰軟體工程師,一手扛起前後端、雙平台 app 開發,過程中雖跌跌撞撞,卻也累計不少經驗。可惜不是那 1% 的成功人士,於是加入其他成功人士的新創公司,專職開發後端。沒想到卻在採前人坑的過程中,拓寬了眼界,得到了深層的領悟。