全部產品
Search
文件中心

Function Compute:事件請求處理常式(Event Handler)

更新時間:Oct 25, 2024

本文介紹Custom Runtime中事件請求處理常式的結構特點、使用樣本和常見問題。

背景資訊

在Custom Runtime中,Function Compute會將Common Headers、Body、POST、/invoke/initialize路徑轉寄給您實現的HTTP Server。Common Headers裡面的資訊可以構造類似官方Runtime中的入參context,而您調用函數的請求體可以構造類似官方Runtime中的入參event

Event Handler簽名

當函數是事件請求處理常式時,HTTP Server實現Path為/invoke且Method為POST的對應邏輯即可,Function Compute平台會自動將請求路由到POST /invoke

Path

輸入請求

預期響應

POST /invoke

重要

Content-Typeapplication/octet-stream

響應體:函數Handler的傳回值。

範例程式碼

本文以Python3.10運行時Flask架構代碼為例。

from flask import Flask
from flask import request
import sys

REQUEST_ID_HEADER = 'x-fc-request-id'

app = Flask(__name__)

@app.route("/invoke", methods = ["POST"])
def hello_world():
        rid = request.headers.get(REQUEST_ID_HEADER)
        print("FC Invoke Start RequestId: " + rid)

        data = request.stream.read()
        print(str(data))
        print("FC Invoke End RequestId: " + rid)
        return "Hello, World!", 200, [()]

if __name__ == '__main__':
        app.run(host='0.0.0.0',port=9000)
            

樣本解析如下。

  • @app.route("/invoke", methods = ["POST"]):通過Flask架構,添加請求路徑為/invoke,要求方法為POST的函數hello_world

  • rid = request.headers.get(REQUEST_ID_HEADER):在請求Header中,擷取請求的RequestID。

  • data = request.stream.read():擷取請求體。

  • return "Hello, World!":發送響應體。

重要

事件請求處理常式不能返迴響應碼和回應標頭。例如,使用Flask架構時,通過代碼return "Hello, World!", 400, [('Author', 'Aliyun-FC')]返回的響應碼和回應標頭無效。

更多語言使用樣本

使用Serverless Devs工具,您可以將您的應用一鍵遷移至Function Compute。以下樣本展示如何通過Serverless Devs工具快速部署和調用函數,您可以按需修改範例程式碼,實現二次開發。

常見問題