函数计算支持API网关作为事件源,即支持将函数计算设置为API的后端服务。当请求设置后端服务为函数计算时,API网关会触发关联的函数执行一次,函数计算将执行结果返回给API网关。本文介绍在函数计算控制台配置API网关触发函数执行的流程,包括配置函数的入口参数、编写函数代码并测试等。
前提条件
- 函数计算
- API网关
步骤一:配置函数的入口参数
API网关触发函数执行时,API网关的信息以event的形式作为输入参数传给函数,您可以将API网关传入的event信息作为参数,调试函数代码编写是否正确。
步骤二:编写函数代码并测试
步骤三:验证结果
执行完成后,您可以在函数代码页签的上方查看执行结果。
{
"isBase64Encoded":true|false,
"statusCode":httpStatusCode,
"headers":{response headers},
"body":"..."
}
- 如果函数计算返回给API网关的结果不符合格式要求,API网关会返回503 Service Unavailable。
- 当body内容为二进制时,需对其进行Base64编码,即isBase64Encoded设置为true;当body内容为非二进制时,无需对其进行Base64编码,即isBase64Encoded设置为false。
常见问题
API网关触发函数执行时报503,查看函数日志,函数已经执行成功了,这是怎么回事?
API网关和函数计算的对接有格式要求,如果函数计算返回给API网关的结果没有按规定的格式返回,那么API网关就认为后端服务不可用。关于API网关和函数计算的对接格式要求,请参见触发器event格式和函数计算的返回参数格式。
如何设置返回响应的content-type?

API网关触发函数计算执行,已经调通的函数,一段时间不调用,再次调用会报503,这是什么原因?
一段时间不调用后,函数重新调用需要准备执行环境,有冷启动时延,在API网关设置的超时时间内没有调用完,API网关会认为后端服务不可用。延长API网关的超时时间即可解决问题。
为什么函数中接收到API网关传过来的body是经过了Base64编码的?
API网关对FORM形式的body传输是不进行Base64编码的(使用FORM形式需要在API网关选择入参映射),其他形式body都会进行Base64编码,避免内容传输错误或者丢失。建议您在使用时,先判断event中isBase64是否为true。如果isBase64为true,则body需要在函数中进行解码。关于API网关传给函数计算的event格式,请参见触发器event格式。
更多信息
- 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs。
- 通过SDK配置触发器。更多操作,请参见SDK列表。
如需对创建的触发器进行修改或删除,请参见触发器管理。