本文介紹Custom Runtime中事件請求處理程序的結構特點、使用示例和常見問題。
背景信息
在Custom Runtime中,函數計算會將Common Headers、Body、POST、/invoke和/initialize路徑轉發給您實現的HTTP Server。Common Headers里面的信息可以構造類似官方Runtime中的入參context
,而您調用函數的請求體可以構造類似官方Runtime中的入參event
。
Event Handler簽名
當函數是事件請求處理程序時,HTTP Server實現Path為/invoke
且Method為POST
的對應邏輯即可,函數計算平臺會自動將請求路由到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工具,您可以將您的應用一鍵遷移至函數計算。以下示例展示如何通過Serverless Devs工具快速部署和調用函數,您可以按需修改示例代碼,實現二次開發。