全部產品
Search
文件中心

Function Compute:使用fcapp.run運行您的RESTful應用

更新時間:Jul 06, 2024

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

    說明

    支援個人版和企業版執行個體推送拉取鏡像,本文以個人版執行個體為例進行說明。

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
  3. 函數管理頁面單擊建立函數,然後選擇使用容器鏡像建立,完成以下配置後,單擊建立

    選擇WordPress官方鏡像,並設定容器內監聽連接埠80。具體操作步驟,請參見建立Custom Container函數

    image.png

  4. 修改函數配置,將資料庫配置以環境變數的方式注入函數容器內。

    配置環境變數的步驟,請參見環境變數

    image.png

    需設定的環境變數與資料庫配置的對應關係如下所示:

    • WORDPRESS_DB_HOST:您為RDS MySQL執行個體建立的資料庫連接內網地址。

    • WORDPRESS_DB_NAME:您建立的資料庫帳號。

    • WORDPRESS_DB_PASSWORD:您建立的資料庫帳號密碼。

    • WORDPRESS_DB_USER:您建立的資料庫名稱。

  5. 在瀏覽器地址欄輸入Function Compute為HTTP觸發器分配的網域名稱測試函數。

    函數建立完成後,Function Compute自動為其建立一個HTTP觸發器,您可以從觸發器的配置資訊中擷取網域名稱資訊。WordPress應用對應的API會以該網域名稱為根路徑進行調用。

    使用以下測試地址測試前需先單擊該地址,在彈出的面板單擊下載本地系統對應的配置指令碼,並執行。執行成功後,才能通過瀏覽器訪問該地址。

    image.png

    image.png

相關文檔