事件请求处理程序(Event Handler)

本文介绍Custom Runtime中事件请求处理程序的结构特点、使用示例和常见问题。

背景信息

在Custom Runtime中,函数计算会将Common Headers、Body、POST、/invoke/initialize路径转发给您实现的HTTP Server。Common Headers里面的信息可以构造类似官方Runtime中的入参context,而您调用函数的请求体可以构造类似官方Runtime中的入参event

image

Event Handler签名

当函数是事件请求处理程序时,HTTP Server实现Path为/invoke且Method为POST的对应逻辑即可,函数计算平台会自动将请求路由到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工具,您可以将您的应用一键迁移至函数计算。以下示例展示如何通过Serverless Devs工具快速部署和调用函数,您可以按需修改示例代码,实现二次开发。

常见问题