iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Cloud Native

2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 系列 第 17

Day 17 - CloudFront 的 Staging 環境 ( Continuous Deployment )

  • 分享至 

  • xImage
  •  

今天要介紹的功能,是 CloudFront 的 Continuous Deployment 。

開發軟體服務的人,一定對於一個名詞不陌生,「藍綠部署」(為了避免中文寫錯會被「艦長」highlight,後續我改用 'Deployment')。我們以這篇文章來介紹搭配 CloudFront 時可以怎麼做。
就我的理解,就是透過某種機制,讓不同的用戶分別使用了不同組的設定(進而獲取不同 or 相同的結果)。

免責宣言: 如果您覺得我理解錯了,那麼一定是我錯而您對。

這次我們用一個故事來介紹
故事主角叫做肯公公,他在一間公司擔任工程師,參與了一個網站服務的開發,為了開發和測試需求,他開了幾組的 CloudFront Distribution,然後分別對應到不同環境。比方說

Dev 環境 (d111.cf.net) CNAME 設定為 dev.example.com ; origin: dev.myorigin.com
Staging 環境 (d222.cf.net) CNAME 設定為 staging.example.com ; origin: staging.myorigin.com
Production 環境 (d333.cf.net) CNAME 設定為 www.example.com ; origin: www.myorigin.com

對應的 DNS record 如下:
- dev.example.com CNAME d111.cloudfront.net
- staging.example.com CNAME d222.cloudfront.net
- www.example.com CNAME d333.cloudfront.net

經過一段時間的程式開發,整合,一切都很美好,測試順利,但老闆提了新要求,上線前要先小規模引入實際流量,看能否正常運作。
是驢子是馬,總要拉出來溜溜才知道」老闆這樣說。
「小規模流量?簡單啊,這個我會。」肯公公輕鬆地回答。

於是肯公公調整了 DNS Record,將 www.example.com 域名解析的 10% 改指往 staging 環境, d222.cloudfront.net,同時 90% 的域名解析保留在 d333.example.com(origin: www.myorigin.com)。期望 10% 的流量會被派去 d222.cloudfront.net 這樣就可以達成老闆的要求。

沒想到,不管怎麼測試,發現看到的都是來自 www.myorigin.com 的內容,可是明明肯公公在測試 DNS 解析時,有看到解析結果符合設定的比例,解析到不同的 CNAME 啊。

這是因為 CloudFront 會以 HTTP中的 Host 標頭來判斷屬於哪一組 Distribution。(所以當某個域名已經被某個 Distribuiton 使用時,就無法設定在另一個 Distribution。)
所以,這時肯公公該怎麼做呢?
他應該要參考 CloudFront 的 Continuous Deployment

Continuous Deployment 基本概念

讓我們首先透過圖片來瞭解.
https://ithelp.ithome.com.tw/upload/images/20230919/20162502a0SLoPBD4M.png

圖片來源: AWS 公開文件

可以看到,當有設定 Continuous Deployment 時,透過對應 CloudFront 內部的 Policy,有一部分的流量會被導至 Staging Environment。

如何創建

  1. 在編輯 CloudFront Distribution 時,Console 下方有一個 'Create staging distribution' 可以按。
    https://ithelp.ithome.com.tw/upload/images/20230919/201625029YX2pcauLY.png
    按下後會進入設定頁面。

https://ithelp.ithome.com.tw/upload/images/20230919/201625026ivvdV55sI.png
2. 會提醒能夠調整的設置相對有限(limited)
3. 設置你是使用 Weighted or Header,如果是 Header,你需要指定 Header Name(一定要是awf-cf-cd- 開頭的 名稱) 以及對應的值

相關特性 (待補圖)

以下介紹幾個值得關注的服務特性

  • 可以有兩種方式使用,Weighted(CloudFront 主動挑選,最高達 15%) 或 使用特定 Header(流量送入時做為參考依據)。

  • 如果使用 Weighted 的方式,那麼 如果使用 Header 來指定流量是否要送往 Staging 環境,那麼這 Header 的名稱必須為 aws-cf-cd- 開頭

  • Production 和 Staging 環境的 Cache 不能共用。

  • 不支持 HTTP/3
    (如果 Distribution 已經有啟用 HTTP/3,再啟用 Staging 時,會看到以下報錯。)
    https://ithelp.ithome.com.tw/upload/images/20230919/20162502NUkjKmvnDg.png

  • 如果 CloudFront 在忙碌時,也會降低導流到 staging 的比例。(呼應前面敘述提到「最高」 15%)

測試

參考測試網址
https://www.kgg23.com
測試方法範例:

  • Production:
$ curl https://www.kgg23.com
Content from the Prodution Origin
  • Staging
$ curl https://www.kgg23.com -H 'aws-cf-cd-kgg: ironman'
Content from the Staging Origin 

Okay, 以上就是 CloudFront Continuous Deployment 的簡單介紹,一起試試看吧。
使用上有問題,也隨時歡迎留言給我。


上一篇
Day 16 - 讓 CloudFront 搭配 WAF
下一篇
Day 18 - 進一步比較 Policy 和 Legacy Settings
系列文
2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言