全部產品
Search
文件中心

Function Compute:使用Web函數快速建立一個Web應用

更新時間:Oct 10, 2025

您可以通過Function Compute的Web函數輕鬆構建Web應用和API服務。Web函數相容多種流行語言的Web架構(如Java SpringBoot、Python Flask和Node.js Express等),因此您可以快速遷移現有應用。Function Compute會為您管理底層計算資源,當通過瀏覽器或URL訪問服務時,系統將根據需求自動啟動和擴充執行個體;無訪問時則自動銷毀執行個體,您只需為實際資源使用量付費。

建立Web函數操作概述

通過本文您將瞭解如何使用Function Compute的Web函數部署一個Flask應用,整體流程如下:

  1. 開發及測試Web應用:在本地使用範例程式碼建立專案,編輯並測試API代碼,確保API功能正常。如果您希望遷移現有應用,可以跳過此步驟。

  2. 產生程式碼封裝:安裝必要的依賴庫到本地的專案目錄,然後將專案打包為一個ZIP檔案,用於部署至Function Compute。

  3. 上傳並部署應用:配置函數建立參數,然後上傳程式碼封裝,完成函數建立。

  4. 測試Web函數:調用Web函數以驗證Flask應用的運行情況。

前提條件

註冊阿里雲帳號

註冊阿里雲帳號並完成實名認證。

開通Function Compute服務

如果您是2024年08月27日之後註冊的阿里雲帳號並完成實名認證,無需開通可直接使用Function Compute產品。首次登入Function Compute控制台,還可以根據介面提示領取一定額度的免費資源套件,詳情請參見試用額度

2024年08月27日之前註冊的阿里雲帳號請參見以下步驟開通服務。

  1. 訪問Function Compute首頁

  2. 單擊控制台,跳轉至開通服務頁面,單擊立即開通即可開通服務並進入Function Compute控制台

    說明
    • 建議您使用阿里雲帳號開通服務,並使用RAM使用者管理函數等應用。您可以按照最小授權原則為RAM使用者授予業務要求的權限策略,具體請參見權限原則及樣本

  3. (可選)首次登入Function Compute控制台,需要在彈出的阿里雲服務授權對話方塊單擊確定建立服務關聯角色,便於後續使用Function Compute訪問相關雲端服務。

    建立成功後,Function Compute即可訪問您的VPC、ECS、SLS及Container Registry等雲資源。

操作指引

您可以使用以下方式建立Web函數並部署代碼。

  • Function Compute控制台建立:適用於構建輕量級應用或快速驗證等情境,您可以快速建立單個函數。

  • Serverless Devs命令列工具建立:適用於管理複雜的生產專案以及自動化部署等情境,您可以使用YAML設定檔管理多個函數及相關雲資源,詳細資料請參見快速入門

為了簡化操作,本文將詳細介紹使用Function Compute控制台建立函數的步驟。

步驟一:開發及測試Web應用

說明

如果您需要遷移現有的Flask應用,您可以跳過此步驟並參考步驟2:產生程式碼封裝

  1. 在本地開啟一個新的命令列視窗,執行以下命令,將應用所需的Flasktabulate依賴庫安裝到本地環境。

    pip install Flask tabulate
  2. 建立一個名為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)
    
  3. 執行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
  4. 開啟一個新的終端視窗,使用cURL發送樣本請求。如果執行成功,您將得到一個日曆表格。

    curl -X POST http://127.0.0.1:9000 -d '{"year": "2000", "month": "1"}'

    image

至此本地專案建立和測試完成。

步驟二:產生程式碼封裝

您將在本地構建一個適用於Function Compute的程式碼封裝,程式碼封裝中需要包含以下內容:

  • Web應用所需的專案檔。

  • 如果應用所需的依賴庫不在Web函數的運行環境中,則程式碼封裝也需要包含這些依賴庫。關於Web函數運行環境的內建依賴庫,請參見內建依賴項

  1. 安裝依賴:在Web應用的專案根目錄,請您運行以下命令,將應用所需的依賴庫(樣本中為tabulate)安裝到該目錄。完成後,專案根目錄下將包含專案檔以及依賴庫。

    說明

    Python Web函數的運行環境已經包含了Flask庫,所以安裝tabulate就可以滿足樣本應用的需求。

    pip install -t . tabulate
  2. 打包專案根目錄下的所有檔案。

    Linux或macOS系統

    在專案根目錄,執行zip code.zip -r ./*。通過此步驟,您將打包專案檔及依賴庫至一個ZIP檔案,完成程式碼封裝的構建。

    說明

    請確保您具有該目錄的讀寫權限。

    Windows系統

    進入專案目錄,選中所有檔案,單擊滑鼠右鍵,選擇打包為ZIP包。通過此步驟,您將打包專案檔及依賴庫至一個ZIP檔案,完成程式碼封裝的構建。

步驟三:建立Web函數並部署程式碼封裝

  1. 選擇Web函數類型:登入Function Compute控制台,選擇函數管理 > 函數列表,在頁面上方地區列表,選擇您需要建立函數的地區,單擊建立函數,然後根據介面提示選擇並建立Web函數

  2. 選擇運行環境:請根據圖示選擇自訂運行時 > Python > Python 3.10,該運行時內建了Flask架構所需的依賴庫。image

    說明
    • 對於Web函數推薦您搭配自訂運行時作為函數運行環境,這是因為自訂運行時可以自訂啟動命令和監聽連接埠,並且支援單一實例多並發。而內建運行時則不具備這些特性,該環境更適合用於處理雲產品產生的事件。

    • 如果您傾向於容器化部署,也可以使用自訂鏡像建立Web函數,該環境同樣支援單一實例多並發,但您需要自行管理依賴。

    • 關於各種運行環境的詳細對比,請參見運行時環境對比

  3. 部署程式碼封裝:請根據圖示操作,上傳您在步驟二中得到的ZIP格式的程式碼封裝,並配置啟動命令為python3 app.py,監聽連接埠為9000。如果您是遷移現有的Flask應用,請根據實際的啟動命令和連接埠修改配置(例如Flask的預設連接埠配置為5000)。

    完成後單擊建立,等待函數建立完成。image

步驟四:測試函數

  1. 擷取函數URL:在新建立函數的詳情頁面,單擊觸發器頁簽,然後在目標HTTP觸發器的配置資訊列擷取公網訪問地址。

    如您在測試環境中,無需鑒權訪問,可在建立HTTP觸發器時或建立後將其配置資訊中認證方式改為無需認證

    image

  2. 測試函數:您可以使用cURL、Postman或任何HTTP用戶端調用函數,驗證Flask應用的功能。以cURL為例,請在命令列中執行以下樣本命令(將地址替換為上一步複製的地址)。

    curl https://******.cn-hangzhou.fcapp.run -d '{"year": "2025", "month": "1"}' 

    Web介面將列印2025年1月的行事曆資訊,樣本輸出如下。

    image

    說明
    • 如果使用預設的HTTP觸發器配置,直接執行以上樣本命令會報錯MissingRequiredHeader,此時如果是測試環境,可以修改觸發器的認證方式無需認證

    • 此步驟的樣本命令和輸出僅適用於範例程式碼。如果您是遷移現有應用,請根據實際的介面名稱和參數調用您的服務,詳情請參見使用cURL測試函數

  3. (可選)通過瀏覽器訪問函數: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工程通過應用中心部署實現持續部署

  • 配置日誌:為了便於對函數進行調試、排查問題或滿足安全審計等需求,建議您為函數配置日誌,詳細步驟請參見配置日誌功能

相關文檔

關於各語言添加依賴包的步驟,請參見以下文檔:

Python

Python 部署程式碼封裝

Node.js

Node.js 部署程式碼封裝

Java

Java 編譯部署程式碼封裝

Go

Go 編譯部署程式碼封裝

C#

C# 編譯部署程式碼封裝

PHP

PHP 部署程式碼封裝