1. 程式人生 > >函式計算搭建 Serverless Web 應用(二)- 自定義域名

函式計算搭建 Serverless Web 應用(二)- 自定義域名

摘要: 繫結自定義域名可以允許使用者通過自定義域名訪問 FC 的函式,配合 HTTP 觸發器使用,為使用函式計算搭建 Web 應用提供便利。

簡介
阿里雲 函式計算(Function Compute) 是事件驅動的全託管計算服務,是阿里雲的 Serverless 計算平臺。基於函式計算構建應用,您無需管理伺服器等基礎設施,而是專注於應用邏輯的開發,大幅提高開發效率。

文章 函式計算搭建 Serverless Web 應用(一)- HTTP 觸發器 中闡述了 Web 應用(Serverless web backend) 是函式計算很重要的一個使用場景。相比於傳統的在伺服器上搭建 web 應用,函式計算無需您管理伺服器等基礎設施,只需編寫程式碼並上傳,函式計算會為您準備好計算資源,以 彈性、 可靠 的方式執行您的程式碼,實現毫秒級別彈性伸縮,輕鬆應對峰值壓力。

HTTP 觸發器為使用者提供一個形如 <account_id>.<region>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries] 的預設的 endpoint,但是使用者希望可以通過自定義域名對外提供服務,原有的 Web 應用可以通過自定義域名進行訪問,遷移到函式計算後,只能通過預設 endpoint 訪問,實在強人所難。

因此函式計算在 HTTP 觸發器後推出自定義域名的功能。

自定義域名
繫結自定義域名可以允許使用者通過自定義域名訪問 FC 的函式,配合 HTTP 觸發器使用,為使用函式計算搭建 Web 應用提供便利。

您可以在函式計算上繫結自定義域名,並設定不同路徑到不同服務的不同函式,然後就可以通過自定義域名訪問不同的函數了,您的 HTTP Request 會原封不動地傳遞給函式,FC 不會對您的 HTTP Request 進行任何處理。

例如,您擁有一個域名為 api.app.com 的網站,從成本和彈性擴容角度考慮,您希望將 Web 服務遷移至函式計算,並且不影響外部服務,也就是對外提供服務的連結不變,那麼您可以為您的應用繫結自定義域名。

函式計算搭建 Serverless Web 應用(二)- 自定義域名

流程對比:
函式計算搭建 Serverless Web 應用(二)- 自定義域名
使用流程
建立 HTTP 觸發器並且編寫函式 ;

搭建過程請參考 HTTP 觸發器示例。
繫結自定義域名

步驟一: 域名需要在阿里雲備案或接入阿里雲備案;

備案請參考文章 阿里雲備案 。
步驟二:域名需要解析到您的 endpoint 上,即需要設定域名的 CNAME 到您對應區域的 endpoint,先設定 CNAME 再到函式計算進行繫結;

域名解析請參考文章 設定域名解析;
例如:您的域名為 app.com,您的 accountID 為 12345,區域為上海,需要設定 app.com 的 CNAME 為 12345.cn-shanghai.fc.aliyuncs.com。
步驟三:在函式計算繫結自定義域名,並設定不同的路徑到不同函式。

同一域名繫結的函式必須在同一區域,可以屬於不同服務;
例如,您可以設定路徑 “/a” 的請求到 service1 的 function1 執行,設定路徑 “/b” 的請求到 service2 的 function2 執行;
只有設定了 HTTP 觸發器 的函式才可以通過自定義域名的請求觸發執行。

路由匹配規則
您需要在自定義域名處設定路徑和函式的對應關係,即請求的路徑不同可以觸發不同函式執行。函式計算支援精確匹配和模糊匹配,具體規則如下:

支援精確匹配和模糊匹配。

精確匹配是設定的路徑和到來的請求完全一致才可以匹配,例如 /a 觸發服務 s1 下的 f1(以下統一簡寫成 s1/f1),那麼路徑為 /a/ 的請求無法觸發 f1 的執行。
支援萬用字元 ,且只能放到路徑的最後,比如 /login/ 表示路徑字首為 /login/ 的請求,/login/* 對應 s2/f2,那麼 /login/a、/login/b/c/d 都會觸發 f2 的執行。
匹配順序為:精確匹配 -> 模糊匹配
匹配優先順序為:最長字首匹配
示例:
域名為 api.app.com,設定的路由匹配規則如下:

函式計算搭建 Serverless Web 應用(二)- 自定義域名

最終的匹配結果:

函式計算搭建 Serverless Web 應用(二)- 自定義域名
總結
繫結自定義域名可以允許使用者通過自定義域名訪問 FC 的函式,配合 HTTP 觸發器使用,可以快速搭建效能穩定彈性可擴容的 Web 應用,可以說是十分方便了。