本文介绍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工具快速部署和调用函数,您可以按需修改示例代码,实现二次开发。