创建HTTP函数
概述
HTTP函数专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行,从而使用自己的Web服务。HTTP函数只允许创建APIG/APIC的触发器类型,其他触发器不支持。
- HTTP函数当前不区分编程语言,函数执行入口必须在bootstrap文件中设置,用户直接写启动命令,端口统一开放成8000,绑定IP为127.0.0.1。
- bootstrap文件是HTTP函数的启动文件,HTTP函数仅支持读取bootstrap 作为启动文件名称,其它名称将无法正常启动服务,bootstrap启动文件请参见bootstrap文件示例。
- HTTP函数支持多种开发语言。
- 用户函数需要返回一个合法的http响应报文。
- 该章节均以Nodejs为样例,若需要使用其他语言,则更换语言路径即可,代码包路径无需更换。其他各语言路径请参见表1。
- 关于Go语言构建FunctionGraph HTTP函数,请参考使用Go构建FunctionGraph HTTP函数。
- 函数发起HTTP请求时,如果是内网访问,则请求IP地址是动态;如果是公网访问,则请求IP地址是固定。如需了解更多详情请咨询技术支持工程师。
前提条件
- 准备一个node脚本,代码示例如下:
const http = require('http'); // Import Node.js core module var server = http.createServer(function (req, res) { //create web server res.writeHead(200, { 'Content-Type': 'text/html' }); res.write('<html><body><h2>This is http function.</h2></body></html>'); res.end(); }); server.listen(8000, '127.0.0.1'); //6 - listen for any incoming requests console.log('Node.js web server at port 8000 is running..')
- 准备一个bootstrap启动文件,作为HTTP函数的启动文件。
bootstrap文件内容如下
/opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js
- 将上述两个文件打成zip包。
图1 文件打成zip包
如果执行HTTP类型是Python函数,则bootstrap文件中执行函数时,建议增加“-u”参数确保日志落盘。例如:
/opt/function/runtime/python3.6/rtsp/python/bin/python3 -u $RUNTIME_CODE_ROOT/index.py
若需要使用其他语言,则参见表1更换语言路径,代码包路径无需更换。
表1 多语言路径说明 语言
路径
Java8
/opt/function/runtime/java8/rtsp/jre/bin/java
Java11
/opt/function/runtime/java11/rtsp/jre/bin/java
Node.js6
/opt/function/runtime/nodejs6.10/rtsp/nodejs/bin/node
Node.js8
/opt/function/runtime/nodejs8.10/rtsp/nodejs/bin/node
Node.js10
/opt/function/runtime/nodejs10.16/rtsp/nodejs/bin/node
Node.js12
/opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node
Node.js14
/opt/function/runtime/nodejs14.18/rtsp/nodejs/bin/node
Node.js16
/opt/function/runtime/nodejs16.17/rtsp/nodejs/bin/node
Node.js18
/opt/function/runtime/nodejs18.15/rtsp/nodejs/bin/node
Python2.7
/opt/function/runtime/python2.7/rtsp/python/bin/python
Python3.6
/opt/function/runtime/python3.6/rtsp/python/bin/python3
Python3.9
/opt/function/runtime/python3.9/rtsp/python/bin/python3
PHP7.3
/opt/function/runtime/php7.3/rtsp/php/bin/php
操作步骤
- 创建函数
- 创建HTTP函数,详细配置信息请参见创建函数,如下参数需注意。
- 函数类型:HTTP函数
- 区域:选择要部署代码的区域
- 上传代码,此处以“从Zip文件”上传为例,上传准备好的zip包,完成后单击“部署”。
图2 上传自Zip文件
当如果使用“OBS地址”方式进行代码源部署时,请确保创建函数选择的“区域”与创建OBS桶选择的“区域”一致。
- 创建HTTP函数,详细配置信息请参见创建函数,如下参数需注意。
- 创建触发器
HTTP函数只允许创建APIG/APIC的触发器类型,其他触发器不支持。
- 进入函数详情页面,选择“设置 > 触发器”页签,单击“创建触发器”。
- 配置触发器信息,此处以创建“API网关服务(APIG)”触发器为例,其他配置信息请参见使用APIG触发器。
图3 创建触发器
示例中“安全认证”暂时选择“None”,用户在配置时应根据实际情况选择。
- App:采用 Appkey&Appsecret 认证,安全级别高,推荐使用。
- IAM:IAM 认证,只允许IAM用户能访问,安全级别中等。
- None:无认证模式,所有用户均可访问。
- 配置完成后,单击“确定”。API触发器创建完成后,会在API网关生成API“API_test_http”。
- 发布API
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
图4 API触发器
- 单击右上方的“编辑”,进入“基本信息”页面。
图5 编辑API
- 单击“下一步”,进入“定义api请求”页面,修改“请求Path”为“/user/get”并单击“立即完成”。
图6 定义API请求
- 单击“发布API”,在发布页面继续单击“发布”。
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
- 触发函数
- 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击创建的HTTP函数进入函数详情页。
- 选择“设置 > 触发器”,复制“调用URL”,在浏览器访问。
图7 复制URL
- 查看请求结果。
图8 查看请求结果
函数公共请求头
HTTP函数请求头默认携带如下字段。
字段 |
描述 |
---|---|
X-CFF-Request-Id |
当前请求ID |
X-CFF-Memory |
分配的内存 |
X-CFF-Timeout |
函数超时时间 |
X-CFF-Func-Version |
函数版本 |
X-CFF-Func-Name |
函数名称 |
X-CFF-Project-Id |
ProjectID |
X-CFF-Package |
函数组 |
X-CFF-Region |
当前region |