本文介紹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 |
重要
| 響應體:函數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工具快速部署和調用函數,您可以按需修改範例程式碼,實現二次開發。