- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
-
最佳实践
- FunctionGraph最佳实践汇总
-
数据处理类实践
- 使用FunctionGraph函数对OBS中的图片进行压缩
- 使用FunctionGraph函数为OBS中的图片打水印
- 使用FunctionGraph函数对DIS数据进行格式转换并存储到CloudTable
- 使用FunctionGraph函数实现通过API方式上传文件
- 使用FunctionGraph函数对IoTDA中的设备坐标数据进行转换
- 使用FunctionGraph函数对OBS中的文件进行加解密
- 使用FunctionGraph函数识别LTS中的异常业务日志并存储到OBS
- 使用FunctionGraph函数对LTS中的日志进行实时过滤
- 使用FunctionGraph函数流对OBS中的图片进行旋转
- 使用FunctionGraph函数流对图片进行压缩和打水印
- 功能应用类实践
- 函数构建类实践
- 开发指南
- API参考
- SDK参考
- 场景代码示例
-
常见问题
-
产品咨询
- 使用FunctionGraph是否需要开通计算、存储、网络等服务?
- 使用FunctionGraph开发程序之后是否需要部署?
- FunctionGraph为函数分配的磁盘空间有多少?
- 是否支持在函数中启动TCP的监听端口,通过EIP接收外部发送过来的TCP请求?
- 函数发起HTTP请求的源地址如何获取?
- FunctionGraph是否支持对上传的zip文件进行反编译?
- FunctionGraph的函数是否支持功能扩展?
- FunctionGraph中的代码是如何隔离的?
- 函数常规信息中的“应用”如何理解?
- 用户需要为函数的冷启动时间付费吗?
- 函数计费中的调用次数,是某一账号下在不同region的所有函数的调用次数总和吗?
- Python语言的函数从V1版本迁移到V2版本时需注意哪些兼容性问题?
- FunctionGraph函数支持哪些编程语言?
- 创建函数
-
配置函数
- 能否在函数环境变量中存储敏感信息?
- FunctionGraph的函数如何读写上传的文件?
- 为函数挂载文件系统时,报“failed to mount exist system path”
- FunctionGraph如何实现域名解析?
- FunctionGraph如何通过域名访问专享版APIG中注册的接口?
- FunctionGraph函数通过域名访问APIG中注册的接口时,报域名无法解析?
- 使用定制运行时语言的函数能操作哪些目录?
- FunctionGraph的函数支持哪些中文字体?
- 能否在函数代码中使用线程和进程?
- 函数如何访问MySQL数据库?
- 函数无法通过VPC连接对应的Redis?
- 如何读取函数的请求头?
- Python语言的函数中,中文注释报乱码错误
-
调用函数
- FunctionGraph的函数执行需要多长时间?
- FunctionGraph的函数执行包含了哪些过程?
- FunctionGraph函数长时间不执行时,相关的实例会如何处理?
- 如何获取函数运行过程中的内存使用量信息?
- 为什么首次调用函数时速度会比较慢?
- 为什么函数实际使用内存大于预估内存,甚至触发内存溢出OOM?
- 函数执行失败返回“runtime memory limit exceeded”时,如何查看内存占用大小?
- 自定义镜像函数执行失败报“CrashLoopBackOff”
- 同步调用函数时,未收到调用响应的可能原因?
- 函数中os.system("command &")命令的执行日志未采集,应如何处理?
- 函数执行超时的可能原因有哪些?
- 使用APIG触发器调用一个返回String的FunctionGraph函数时,报500错误
- Python2.7在执行reload(sys)后无法通过print打印日志
- 运行函数时报错error while loading shared libraries时如何处理?
- 配置触发器
- 配置依赖包
-
产品咨询
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
创建HTTP函数
创建空白函数是指创建一个初始的、没有任何业务配置的函数,用户需根据业务要求完成函数的代码、网络、触发器等各项配置。
FunctionGraph支持创建事件函数和HTTP函数,当前仅FunctionGraph v2版本支持创建HTTP函数。
HTTP函数概述
HTTP函数专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行,从而使用自己的Web服务。HTTP函数支持HTTP/1.1协议。
HTTP函数有以下优势:
约束与限制
- HTTP函数当前不区分编程语言,函数执行入口必须在bootstrap文件中设置,用户直接写启动命令,端口统一开放成8000,绑定IP为127.0.0.1。
- bootstrap文件是HTTP函数的启动文件,HTTP函数仅支持读取bootstrap 作为启动文件名称,其它名称将无法正常启动服务,bootstrap启动文件请参见bootstrap文件示例。
若运行用户JAR包,bootstrap中建议增加JVM参数-Dfile.encoding=utf-8,否则可能会出现中文乱码。
- 用户函数需要返回一个合法的http响应报文,用户的HTTP响应体不超过6M。
- 函数发起HTTP请求时,如果是内网访问,则请求IP地址是动态;如果是公网访问,则请求IP地址是固定。如需了解更多详情请咨询技术支持工程师。
- HTTP函数只允许创建APIG共享版、APIG专享版、APIC的触发器类型,其他触发器不支持。
- 不支持长时运行和异步调用,不支持重试。
创建HTTP函数
- 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
- 单击右上方的“创建函数”,进入“创建函数”页面。
- 创建方式选择“创建空白函数”,配置如下信息。
表1 函数基础配置信息表 参数
说明
函数类型
选择“HTTP函数”。
支持以下两种类型:
- 事件函数:通常为JSON格式的请求,事件函数不受触发器类型的限制,当前FunctionGraph支持的所有类型触发器均可用于触发事件函数。
- HTTP函数:用户可以直接发送HTTP请求到URL触发函数执行,该特性仅FunctionGraph v2版本支持。
区域
选择要部署代码的区域。
不同区域的资源之间内网不互通,请就近选择靠近您业务的区域,可以降低网络时延、提高访问速度。
项目
默认与选择的区域一致。
函数名称
函数名称,命名规则如下:
- 可包含字母、数字、下划线和中划线,长度不超过60个字符。
- 以大/小写字母开头,以字母或数字结尾。
企业项目
默认“default”,支持用户选择已创建的企业项目。企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。
如果您没有开通企业管理服务,将无法看到企业项目选项。开通方法请参见如何开通企业项目。
委托名称
默认未使用任何委托,支持用户选择已创建的委托。
用户委托函数工作流去访问其他的云服务,举例:如果用户函数需要访问LTS、VPC等服务,则需要提供权限委托名称,如果用户函数不访问任何云服务,则不用提供委托名称。
高级设置
支持添加日志标签,详情请参见日志标签。函数执行时,可以按照自定义标签配置上报标签到云日志服务(LTS),用户可以通过标签对日志进行过滤筛选。(最多添加10个标签)
说明:
当前仅支持华北-北京一、华东-上海一、华东-上海二、华南-广州、中东-利雅得、拉美-墨西哥城二。
- 配置完成后单击“创建函数”,页面跳转至代码配置页面,各配置项操作请参见配置函数。
创建和配置HTTP函数示例
关于Go语言构建FunctionGraph HTTP函数,请参考使用Go构建FunctionGraph HTTP函数。
以下以一个完整的HTTP函数创建和配置示例为您介绍HTTP函数的使用方法。
在调用API前,请先确保您的业务系统所在网络与API的访问域名或地址互通:
- 若业务系统与HTTP函数在相同VPC内时,可直接访问API。
- 若业务系统与HTTP函数在同一区域的不同VPC内时,可通过创建VPC对等连接,将两个VPC的网络打通,实现同一区域跨VPC访问API。具体步骤请参考VPC对等连接说明。
- 若业务系统与HTTP函数在不同区域的不同VPC内时,可通过创建云连接实例并加载需要互通的VPC,将两个VPC的网络打通,实现跨区域跨VPC访问API。具体步骤请参考跨区域VPC互通。
- 若业务系统与HTTP函数通过公网互通,请确保HTTP函数已绑定弹性IP。
HTTP函数公共请求头默认携带如表2字段。
字段 |
描述 |
---|---|
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 |
步骤一:制作代码包
- 准备一个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函数的启动文件。
/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
如需使用其他语言,则参见表3更换语言路径,代码包路径无需更换。
表3 多语言路径说明 语言
路径
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函数的代码详情页中,单击“上传代码 > Zip文件”上传准备好的zip包。
- 创建触发器。
- 选择“设置 > 触发器”页签,单击“创建触发器”。
- 如图2所示配置触发器信息,此处以创建“API网关服务(APIG)”触发器为例,其他配置信息请参见使用APIG共享版触发器。
示例中“安全认证”选择“None”,在配置时请根据实际情况选择。
说明:
- App:采用 Appkey&Appsecret 认证,安全级别高,推荐使用。
- IAM:IAM 认证,只允许IAM用户能访问,安全级别中等。
- None:无认证模式,所有用户均可访问。
- 配置完成后,单击“确定”,完成APIG触发器创建。
- 发布API。
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
图3 API触发器
- 单击右上方的“编辑”,进入“基本信息”页面。
图4 编辑API
- 单击“下一步”,进入“定义api请求”页面,修改“请求Path”为“/user/get”并单击“立即完成”。
图5 定义API请求
- 单击“发布API”,在发布页面继续单击“发布”。
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
- 触发函数。
- 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击创建的HTTP函数进入函数详情页。
- 选择“设置 > 触发器”,如图6所示复制“调用URL”,在浏览器访问。
- 查看请求结果。
图7 查看请求结果