直接上传函数代码
要创建函数,首先需要创建函数部署程序包(包含代码和所有依赖项的文件)。
FunctionGraph支持如下三种方式部署程序包:
- 支持在线编辑代码。用户在编辑函数代码时支持类似工程方式的管理,可以创建文件、文件夹并对其进行编辑。
- 支持直接上传函数代码。用户在本地开发程序之后打包(程序包大小不超过40MB),必须是ZIP包(Java、Node.js、Python、Go)或者JAR文件(Java),然后上传至FunctionGraph即可运行,无需其它的部署操作。
- 支持OBS方式上传函数代码。当函数的程序包大小超过40MB时,使用该方式部署程序包。OBS中ZIP包大小限制为300MB。
本章节将介绍FunctionGraph的直接上传函数代码方式。
运行时 |
上传ZIP文件 |
上传JAR文件 |
说明 |
---|---|---|---|
Node.js |
支持 |
不支持 |
- |
Python |
支持 |
不支持 |
用python语言写代码时,自己创建的包名不能与python标准库同名,否则会提示module加载失败。例如“json”、“lib”,“os”等。 |
Java |
支持 |
支持 |
部署Java程序包可以是.zip文件或独立的jar文件。 上传Jar包
上传zip 如果函数中引入其他三方件,也可以制作包含所有依赖三方件和函数jar的zip包,选择上传zip文件。您可参见使用IDEA工具创建普通Java项目、使用IDEA工具创建maven项目。 |
Go |
支持 |
不支持 |
必须在编译之后打zip包。编译后的动态库文件名称必须与函数执行入口的插件名称保持一致,例如:动态库名称为testplugin.so,则“函数执行入口”命名为testplugin.Handler。更多运行时语言的函数执行入口信息,请参见表1中“函数执行入口”参数介绍。 |
C# |
支持 |
不支持 |
- |
PHP |
支持 |
不支持 |
- |
定制运行时 |
支持 |
不支持 |
- |
HTTP |
支持 |
不支持 |
- |
- 制作ZIP包的时候,单函数入口文件必须在根目录,保证解压后,直接出现函数执行入口文件,才能正常运行。
- 上传代码时,如果代码中包含敏感信息(如账户密码等),请您自行加密,以防止信息泄露。
- 解压后的源代码不能超过1.5G,超大代码请联系客服。
- 代码编辑区中如果代码有修改,请修改完成后再次单击“部署”,完成重新部署代码。
- 当您部署的代码大于20M时,在线编辑器将不展示代码,但您仍可以测试您的函数。
图1 编辑器不展示代码
操作步骤
HTTP函数配置
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函数的启动文件。
bootstrap文件内容如下。
/opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js
- 将上述两个文件打成zip包。
图2 文件打成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包。
- 创建触发器。
- 选择“设置 > 触发器”页签,单击“创建触发器”。
- 配置触发器信息,此处以创建“API网关服务(APIG)”触发器为例,其他配置信息请参见使用APIG共享版触发器。
图3 创建触发器
示例中“安全认证”暂时选择“None”,用户在配置时应根据实际情况选择。
- App:采用 Appkey&Appsecret 认证,安全级别高,推荐使用。
- IAM:IAM 认证,只允许IAM用户能访问,安全级别中等。
- None:无认证模式,所有用户均可访问。
- 配置完成后,单击“确定”,完成API触发器创建。
- 发布API。
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
图4 API触发器
- 单击右上方的“编辑”,进入“基本信息”页面。
图5 编辑API
- 单击“下一步”,进入“定义api请求”页面,修改“请求Path”为“/user/get”并单击“立即完成”。
图6 定义API请求
- 单击“发布API”,在发布页面继续单击“发布”。
- 单击“触发器”页签下的API名称,跳转至API的总览页面。
- 触发函数。
- 返回函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击创建的HTTP函数进入函数详情页。
- 选择“设置 > 触发器”,复制“调用URL”,在浏览器访问。
图7 复制URL
- 查看请求结果。
图8 查看请求结果