Function Compute支援為每個新建立的HTTP觸發器分配子網域名稱fcapp.run,通過該網域名稱可以訪問您的RESTful應用。本文介紹如何在不修改代碼的情況下,使用fcapp.run訪問您的RESTful應用。
背景資訊
Function Compute支援HTTP觸發器,即允許使用HTTP協議來調用函數。Function Compute通過一個共用的API Server組件為您提供響應HTTP觸發器調用的服務。調用函數時,需要依賴URL中的Path將客戶流量路由到客戶的函數容器內部。容器內收到的HTTP請求Path會帶有Function Compute的路由辨別碼。如果您在Function Compute部署了RESTful風格的應用,則會出現404報錯。
最初,Function Compute提供了原生的RESTful架構,將每個函數視為一個獨立的資源,通常一個函數只負責一小塊功能,也就是一個API。如果一個函數只對應一個API,那麼在函數代碼中也不必去實現一套路由邏輯去響應不同URL Path路徑的請求。
Function Compute現已引入Custom Runtime和Custom Container函數,您可以直接在Function Compute中運行自己存量的應用,而不必按照Function Compute推薦的架構去拆分自己的應用。社區內比較成熟的專案的開發習慣是在一個程式中開發大量的REST API,因此會存在進程內的路由邏輯,將不同路徑的請求轉寄到不同的方法進行處理。
使用fcapp.run調用函數
Function Compute為每個新建立的HTTP觸發器分配了一個獨立的網域名稱,格式為{random_string}.{region_id}.fcapp.run。使用該網域名稱訪問Function Compute時,Function Compute會按照網域名稱進行路由,將流量轉寄至函數容器內,避免了依賴Path進行路由而對客戶代碼造成的侵入性。
假設HTTP觸發器對應的函數中封裝了多個API,分別為/function1、/function2、/function3,那麼使用fcapp.run調用的URL如下:
{random_string}.{region_id}.fcapp.run/function1{random_string}.{region_id}.fcapp.run/function2{random_string}.{region_id}.fcapp.run/function3
使用fcapp-test.run進行本地網頁測試
Function Compute的主網域名稱aliyuncs.com無法為客戶提供網站類型的業務,所有的函數請求結果將在瀏覽器中以附件的方式下載,對於網站屬性的函數,返回的HTML文本以及JavaScript代碼無法正常顯示。此時,您可以通過為函數綁定已備案的自訂網域名來解決該問題。更多資訊,請參見HTTP觸發器概述。
您也可以通過測試網域名稱fcapp-test.run以及添加本地的host解析的方式來解決以上問題,請求結果將不會以附件的方式下載,可以正常進行網頁調試。樣本指令碼如下:
# 1. 從頁面擷取fcapp.run的網域名稱
FC_DOMAIN='serviceName-functionName-vtnazzbxrr.cn-hangzhou.fcapp.run'
FC_TEST_DOMAIN=`echo ${FC_DOMAIN} | sed 's/fcapp.run/fcapp-test.run/g'`
echo "FC網域名稱:${FC_DOMAIN}"
echo "FC測試網域名稱:${FC_TEST_DOMAIN}"
# 2. 查詢網域名稱解析的IP
FC_IP=`ping ${FC_DOMAIN} -c 1 | HEAD -1 | awk '{print $3}' | sed 's/[():]//g'`
echo "FC IP: ${FC_IP}"
# 3. 修改host檔案,將測試網域名稱的本地解析指向fcapp.run
# 如果沒有許可權需要手動加
sudo -- sh -c "printf '\n${FC_IP} ${FC_TEST_DOMAIN}\n' >> /etc/hosts"
cat /etc/hosts
# 4. 使用測試網域名稱在瀏覽器訪問函數
curl -v "${FC_TEST_DOMAIN}"
使用Function Compute運行WordPress官方鏡像
Function Compute支援您在不修改任何業務代碼的前提下遷移自己的RESTful應用。下面以遷移WordPress應用為例進行說明。
前提條件
Function Compute
雲資料庫RDS
說明您也可以使用已有RDS MySQL執行個體,並為WordPress服務初始化相應的帳號以及資料庫。
建立RDS MySQL執行個體時,請確保為其設定的VPC與Function Compute的服務的VPC配置保持一致,且白名單配置中已添加Function Compute服務的網路設定中vSwitch的IP位址區段。關於Function Compute的網路設定,請參見配置網路。關於RDS MySQL資料庫白名單的配置,請參見設定資料庫訪問IP地址白名單。
Container Registry
已拉取WordPress鏡像並推送到阿里雲容器鏡像倉庫。具體操作,請參見使用個人版執行個體推送拉取鏡像。
說明支援個人版和企業版執行個體推送拉取鏡像,本文以個人版執行個體為例進行說明。
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
在函數管理頁面單擊建立函數,然後選擇使用容器鏡像建立,完成以下配置後,單擊建立。
選擇WordPress官方鏡像,並設定容器內監聽連接埠為80。具體操作步驟,請參見建立Custom Container函數。

修改函數配置,將資料庫配置以環境變數的方式注入函數容器內。
配置環境變數的步驟,請參見環境變數。

需設定的環境變數與資料庫配置的對應關係如下所示:
WORDPRESS_DB_HOST:您為RDS MySQL執行個體建立的資料庫連接內網地址。
WORDPRESS_DB_NAME:您建立的資料庫帳號。
WORDPRESS_DB_PASSWORD:您建立的資料庫帳號密碼。
WORDPRESS_DB_USER:您建立的資料庫名稱。
在瀏覽器地址欄輸入Function Compute為HTTP觸發器分配的網域名稱測試函數。
函數建立完成後,Function Compute自動為其建立一個HTTP觸發器,您可以從觸發器的配置資訊中擷取網域名稱資訊。WordPress應用對應的API會以該網域名稱為根路徑進行調用。
使用以下測試地址測試前需先單擊該地址,在彈出的面板單擊下載本地系統對應的配置指令碼,並執行。執行成功後,才能通過瀏覽器訪問該地址。


相關文檔
使用子網域名稱作為HTTP觸發器URL對函數進行測試,能有效避免404報錯。更多資訊,請參見當我使用瀏覽器或cURL方式訪問函數時出現404怎麼辦?。
對外提供網站類型服務只能通過已備案網域名稱來實現。即通過配置自訂網域名,將網域名稱與函數進行綁定,使用自己的網域名稱對外提供服務。更多資訊,請參見配置自訂網域名。