之前使用腾讯云serverless,但是突然开始收费了。所以改用functiongraph
首先登陆华为云。
目录
[3.1 制作依赖包](#3.1 制作依赖包)
[4.1.2 请求头](#4.1.2 请求头)
[4.1.3 body](#4.1.3 body)
[4.1.4 Endpoint](#4.1.4 Endpoint)
[4.1.5 测试请求](#4.1.5 测试请求)
[4.2 通过api网关请求](#4.2 通过api网关请求)
1.登录华为云
2.在控制台找到functiongraph并开通
这里参考这篇博客:
腾讯云函数收费了 改用免费华为云函数 ------以每日签到打卡类、北京某高校每日上报为例_免费云函数-CSDN博客
3.添加依赖包:
3.1 制作依赖包
python参考这个网址:
制作依赖包_函数工作流 FunctionGraph_开发指南_Python (huaweicloud.com)
node.js参考这个网址:
制作依赖包_函数工作流 FunctionGraph_开发指南_Node.js (huaweicloud.com)
3.2引入依赖包
将制作好的zip包上传:
然后就会创建好依赖包,比如我起名为node_mysql的依赖包创建后如图
然后到函数代码页面添加依赖包:
这样就添加成功了。
然后直接在代码中就可以引入:
4.发送请求
4.1直接发送
参考这里:
同步执行函数_函数工作流 FunctionGraph_API参考_API_函数调用 (huaweicloud.com)
4.1.1uri
project_id获取:
这一列就是project_id,选择对应位置的即可。
function_urn:
4.1.2 请求头
这里有一个必要参数:
这里使用iam获取。
参考这里:
获取IAM用户Token(使用密码)_统一身份认证服务 IAM_API参考_API_Token管理 (huaweicloud.com)
IAMDomain获取:
至于IAMPassword就是IAMuser的password
project.name获取:
这里就是前面获取project_id的那张图对应地区的英文名。
然后通过postman发送请求:
这个就是token。
这里需要注意的scope下必须使用project,不然获取的token不能用于连接云函数服务。
4.1.3 body
这个视具体情况而定。
4.1.4 Endpoint
参考这里:
构造请求_函数工作流 FunctionGraph_API参考_如何调用API (huaweicloud.com)
上面的uri只是resource-path,前面还需要endpoint.
上面的例子iam服务的endpoint,functiongraph的endpoint可以在这里获取:
地区和终端节点_OpenAPI_开发者中心-华为云 (huaweicloud.com)
这个就是。前面的区域不固定,例如上海一是cn-east-3也可以使用。
4.1.5 测试请求
这里我在上海一创建一个python函数。
代码:
就是返回请求内容。
这里替换endpoint,project_id, function_urn后完整的url:
https://functiongraph.cn-east-3.myhuaweicloud.com/v2/221028919ee2453b97bdec80a452d4e8/fgs/functions/urn:fss:cn-east-3:221028919ee2453b97bdec80a452d4e8:function:default:test1:latest/invocations
然后还要添加headers中的token:
填入之前获取的token。
然后设置一下body
注意发送post请求,(functiongraph的api好像只支持post)
结果:
请求成功。
4.2 通过api网关请求
由于我之前做过一个小项目需要在浏览器请求云函数。但是涉及到跨域问题。会先发一个prelight request。但是是OPTIONS类型的请求。由于这个functiongraph的api不支持OPTIONS。所以导致prelight request 一直失败。一直提示response中没有"access-contral-all-origin"。但是我的云函数代码中是设置了response中的这个参数的。实际上就是api根本没有返回response,因为它根本不支持options类型的请求。
例如我只改变请求类型:
解决方法就是使用api网关。
这里为function绑定api网关。
这里随便起个名字,如果之前没有创建过分组,就创建一个,这个貌似没啥影响。
然后就创建好了。直接调用那个url就可以请求了。
可以看到返回的内容还是很复杂的,可能通过api后请求event变复杂了吧。
这里我们改一下代码:
好了。
这样就解决了请求方式限制的问题了。同时也可以解决跨域的问题了。
而且通过api网关请求有一个好处,就是url直接给了,不用改project_id等参数了。
而且如果在创建网关时选择安全认证为不认证,甚至不需要token.
例如删掉Header中的token。
然后修改一下网关设置:
点击这里:
之前默认是iam认证,这里改为无认证。然后一直下一步
点击完成
再测试:
成功。
但是这种方式降低了安全性。
这里测试完毕,销毁云函数。