您可以通過Function Compute的Web函數輕鬆構建Web應用和API服務。Web函數相容多種流行語言的Web架構(如Java SpringBoot、Python Flask和Node.js Express等),因此您可以快速遷移現有應用。Function Compute會為您管理底層計算資源,當通過瀏覽器或URL訪問服務時,系統將根據需求自動啟動和擴充執行個體;無訪問時則自動銷毀執行個體,您只需為實際資源使用量付費。
建立Web函數操作概述
通過本文您將瞭解如何使用Function Compute的Web函數部署一個Flask應用,整體流程如下:
開發及測試Web應用:在本地使用範例程式碼建立專案,編輯並測試API代碼,確保API功能正常。如果您希望遷移現有應用,可以跳過此步驟。
產生程式碼封裝:安裝必要的依賴庫到本地的專案目錄,然後將專案打包為一個ZIP檔案,用於部署至Function Compute。
上傳並部署應用:配置函數建立參數,然後上傳程式碼封裝,完成函數建立。
測試Web函數:調用Web函數以驗證Flask應用的運行情況。
前提條件
操作指引
您可以使用以下方式建立Web函數並部署代碼。
Function Compute控制台建立:適用於構建輕量級應用或快速驗證等情境,您可以快速建立單個函數。
Serverless Devs命令列工具建立:適用於管理複雜的生產專案以及自動化部署等情境,您可以使用YAML設定檔管理多個函數及相關雲資源,詳細資料請參見快速入門。
為了簡化操作,本文將詳細介紹使用Function Compute控制台建立函數的步驟。
步驟一:開發及測試Web應用
如果您需要遷移現有的Flask應用,您可以跳過此步驟並參考步驟2:產生程式碼封裝。
在本地開啟一個新的命令列視窗,執行以下命令,將應用所需的
Flask和tabulate依賴庫安裝到本地環境。pip install Flask tabulate建立一個名為
code的檔案夾,並在其中建立一個名為app.py的檔案。將以下範例程式碼粘貼到該檔案中。這段代碼實現了一個簡單的日曆服務並封裝成API介面,使用者輸入年月資訊(如2025年1月),API將返回對應的日曆表格。import calendar from flask import Flask, request from tabulate import tabulate import logging import json logger = logging.getLogger() app = Flask(__name__) @app.route("/", methods=["POST"]) def get_month_calendar(): # 擷取請求ID並列印日誌 requestId = request.headers.get('x-fc-request-id', '') logger.info("FC Invoke Start RequestId: " + requestId) # 擷取請求內容並檢查請求格式 data = json.loads(request.stream.read().decode('utf-8')) if not ('year' in data and 'month' in data): message = "Request must be in format like {'year': '1999', 'month': '12'}" return message # 擷取日曆表格 result = print_calendar(year=int(data['year']), month=int(data['month'])) # 返回前列印函數執行完成的日誌 logger.info("FC Invoke End RequestId: " + requestId) return result def print_calendar(year, month): # 擷取指定年份和月份的日曆矩陣 cal = calendar.monthcalendar(year, month) # 將不屬於該月的日期從0轉為空白字元 cal = list(map(lambda sublist: list(map(lambda x: '' if x == 0 else x, sublist)), cal)) # 建立表頭 headers = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"] # 使用tabulate列印日曆表格 return tabulate(cal, headers=headers, tablefmt="grid", stralign='center', numalign='center') if __name__ == "__main__": app.run(host='0.0.0.0', port=9000)執行
python3 app.py命令以運行您建立的Flask應用。當輸出為Running on http://127.0.0.1:9000,表示您的Flask應用成功啟動,接下來可以使用cURL命令來測試應用。python3 app.py * Serving Flask app 'app' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:9000 * Running on http://47.100.XX.XX:9000 Press CTRL+C to quit開啟一個新的終端視窗,使用cURL發送樣本請求。如果執行成功,您將得到一個日曆表格。
curl -X POST http://127.0.0.1:9000 -d '{"year": "2000", "month": "1"}'
至此本地專案建立和測試完成。
步驟二:產生程式碼封裝
您將在本地構建一個適用於Function Compute的程式碼封裝,程式碼封裝中需要包含以下內容:
Web應用所需的專案檔。
如果應用所需的依賴庫不在Web函數的運行環境中,則程式碼封裝也需要包含這些依賴庫。關於Web函數運行環境的內建依賴庫,請參見內建依賴項。
安裝依賴:在Web應用的專案根目錄,請您運行以下命令,將應用所需的依賴庫(樣本中為
tabulate)安裝到該目錄。完成後,專案根目錄下將包含專案檔以及依賴庫。說明Python Web函數的運行環境已經包含了
Flask庫,所以安裝tabulate就可以滿足樣本應用的需求。pip install -t . tabulate打包專案根目錄下的所有檔案。
Linux或macOS系統
在專案根目錄,執行
zip code.zip -r ./*。通過此步驟,您將打包專案檔及依賴庫至一個ZIP檔案,完成程式碼封裝的構建。說明請確保您具有該目錄的讀寫權限。
Windows系統
進入專案目錄,選中所有檔案,單擊滑鼠右鍵,選擇打包為ZIP包。通過此步驟,您將打包專案檔及依賴庫至一個ZIP檔案,完成程式碼封裝的構建。
步驟三:建立Web函數並部署程式碼封裝
選擇Web函數類型:登入Function Compute控制台,選擇,在頁面上方地區列表,選擇您需要建立函數的地區,單擊建立函數,然後根據介面提示選擇並建立Web函數。
選擇運行環境:請根據圖示選擇,該運行時內建了Flask架構所需的依賴庫。
說明對於Web函數推薦您搭配自訂運行時作為函數運行環境,這是因為自訂運行時可以自訂啟動命令和監聽連接埠,並且支援單一實例多並發。而內建運行時則不具備這些特性,該環境更適合用於處理雲產品產生的事件。
如果您傾向於容器化部署,也可以使用自訂鏡像建立Web函數,該環境同樣支援單一實例多並發,但您需要自行管理依賴。
關於各種運行環境的詳細對比,請參見運行時環境對比。
部署程式碼封裝:請根據圖示操作,上傳您在步驟二中得到的ZIP格式的程式碼封裝,並配置啟動命令為
python3 app.py,監聽連接埠為9000。如果您是遷移現有的Flask應用,請根據實際的啟動命令和連接埠修改配置(例如Flask的預設連接埠配置為5000)。完成後單擊建立,等待函數建立完成。

步驟四:測試函數
擷取函數URL:在新建立函數的詳情頁面,單擊觸發器頁簽,然後在目標HTTP觸發器的配置資訊列擷取公網訪問地址。
如您在測試環境中,無需鑒權訪問,可在建立HTTP觸發器時或建立後將其配置資訊中認證方式改為無需認證。

測試函數:您可以使用cURL、Postman或任何HTTP用戶端調用函數,驗證Flask應用的功能。以cURL為例,請在命令列中執行以下樣本命令(將地址替換為上一步複製的地址)。
curl https://******.cn-hangzhou.fcapp.run -d '{"year": "2025", "month": "1"}'Web介面將列印2025年1月的行事曆資訊,樣本輸出如下。
說明如果使用預設的HTTP觸發器配置,直接執行以上樣本命令會報錯MissingRequiredHeader,此時如果是測試環境,可以修改觸發器的認證方式為無需認證。
此步驟的樣本命令和輸出僅適用於範例程式碼。如果您是遷移現有應用,請根據實際的介面名稱和參數調用您的服務,詳情請參見使用cURL測試函數。
(可選)通過瀏覽器訪問函數:HTTP觸發器提供的公網訪問地址無法用瀏覽器開啟(強制下載),並且只能用於測試環境。推薦您將函數綁定自訂網域名,以支援瀏覽器訪問及生產環境使用。詳情請參見配置自訂網域名。
(可選)步驟五:清理資源
Function Compute按照實際資源使用量進行計費,已建立的函數資源如果不使用不會產生費用。但請留意您建立函數資源時關聯的其他雲產品或資源,例如儲存在OSS和NAS的資料、以及建立的觸發器等。
如果您需要刪除函數,請登入Function Compute控制台,單擊,選擇地區,在目標函數的操作列,單擊刪除,然後在彈出的對話方塊,確認要刪除的函數已無任何觸發器等綁定資源後,再次確認刪除。
進階操作
現在您已經建立了一個Web應用並部署至Web函數。您可以根據需求,參考以下進階操作。
通過控制台開發代碼:考慮到您可能希望遷移現有的Web應用到Web函數,本文介紹的是本地開發代碼與程式碼封裝產生的流程。如果您希望簡化部署流程,也可以通過Function Compute控制台的WebIDE進行雲上開發與Just-in-Time 偵錯,該方式無需本地產生程式碼封裝,適合快速迭代的開發需求,詳情請參見如何使用WebIDE。
說明WebIDE僅支援Python、Node.js和PHP語言。對於其他語言(如Java、Go等),僅支援上傳編譯打包後的ZIP檔案或二進位檔案。
通過應用中心持續部署專案:如果您希望在雲上自動化構建並部署您的代碼到Function Compute,實現CI/CD,推薦您使用應用中心。具體請參見將已有的Function Compute工程通過應用中心部署實現持續部署。
配置日誌:為了便於對函數進行調試、排查問題或滿足安全審計等需求,建議您為函數配置日誌,詳細步驟請參見配置日誌功能。
相關文檔
關於各語言添加依賴包的步驟,請參見以下文檔: