函数工作流 FunctionGraph
函数工作流 FunctionGraph
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
-
最佳实践
- 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时如何处理?
- 配置触发器
- 配置依赖包
-
产品咨询
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
NodeJS语言方案
前提条件
- 已拥有华为云账号且已实名认证。
- 华为云账号未欠费,且有足够金额购买本案例所涉及的资源。
操作步骤
- 创建函数
- 登录函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击“创建函数”。
- 选择“创建空白函数”,填写函数信息,完成后单击“创建函数”。
- 函数类型:事件函数。
- 区域:华北-北京四。
- 函数名称:输入您自定义的函数名称,此处以“upload-file-1”为例。
- 委托名称:未使用任何委托。
- 运行时:Node.js 14.18。
- 在“代码”页签,复制如下代码替换默认的函数代码,并单击“部署”更新函数。
const stream = require("stream"); const Busboy = require("busboy"); exports.handler = async (event, context) => { const logger = context.getLogger() logger.info("Function start run."); if (!("content-type" in event.headers) || !event.headers["content-type"].includes("multipart/form-data")) { return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json' }, 'body': 'The request is not in multipart/form-data format.', }; } const busboy = Busboy({ headers: event.headers }); let buf = Buffer.alloc(0); busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { logger.info('filename:' + JSON.stringify(filename)) file.on('data', function (data) { logger.info('Obtains ' + data.length + ' bytes of data.') buf = Buffer.concat([buf, data]); }); file.on('end', function () { logger.info('End data reception'); }); }); busboy.on('finish', function () { //这里处理数据 logger.info(buf.toString()); return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json' }, 'body': 'ok', }; }); //APIG触发器默认对数据进行Base64编码,这里解码 const body = Buffer.from(event.body, "base64"); var bodyStream = new stream.PassThrough(); bodyStream.end(body); bodyStream.pipe(busboy); }
- 配置函数依赖
- 制作依赖包。代码中选择busboy库解析上传的文件,需要生成Node.js14.18版本对应的依赖包busboy.zip。如果您使用Node.js语言其他版本,请制作对应版本的依赖包,具体请参考制作依赖包。
- 创建依赖包。在左侧导航栏“函数 > 依赖包”管理页面,单击“创建依赖包”,配置完成后单击“确定”。
- 依赖包名称:输入您自定义的依赖包名称,例如“busboy”。
- 代码上传方式:上传ZIP文件。
- 运行时:Node.js 14.18。
- 文件上传:添加制作完成的依赖包。
- 添加依赖包。进入upload-file-1函数详情页面,在“代码”页签最底部,单击“添加依赖包”。在“私有依赖包”的包源中,选择上一步创建的busboy依赖包,单击“确定”,完成依赖包的添加。
- 配置APIG触发器
- 在upload-file-1函数详情页面,单击“设置 > 触发器”,开始创建触发器。
- 单击“创建触发器”,触发器类型可以选择“API 网关服务(APIG)”或“API 网关服务(APIG 专享版本)”,此处以共享版APIG为例。
- API名称:默认即可,无需修改。
- 分组:选择在APIG创建的API分组,若无分组,可单击“创建分组”跳转至APIG创建。
- 发布环境:RELEASE。
- 安全认证:此处为方便测试,配置“None”,实际业务请选择更安全的认证方式,例如IAM认证等。
- 请求协议:选择“HTTPS”。
- 后端超时(毫秒):默认5000毫秒。
- 端到端测试
以curl工具为例(curl -F的方式主要用的是linux环境),您也可以选择postman等其他工具,在本地创建app.log文件,内容自定义,此处简单举例:
start something run stop all
执行如下命令测试:
curl -iv {APIG触发器URL} -F upload=@/{本地文件路径}/app.log
图1 示例在upload-file-1函数详情页面的“监控”页签下,查看日志,可看到文件内容的打印。实际业务中,用户可根据需要修改代码保存数据到对象存储OBS、日志服务LTS等云服务或直接处理。
父主题: 操作流程