云开发 编写第一个云函数
在 Serverless 中,云函数是作为计算容器存在的,可以作为服务接口使用,也可以做为中转服务使用,也可以编写业务逻辑。我们经常谈的 FaaS(Functions as a Service)中最核心的是云函数。如果需要简单理解,那就是写了一段代码(一个函数),可以直接部署在服务器上,但是这个函数是具备伸缩性的。流量来了,可以直接将函数拉起,可以进行资源扩充;流量回落,可以降至 0。这里不讨论业界如何实现冷启动或者 0 - 1 的优化。
上一节,我们在控制台创建了自己的环境;这里我们就可以在控制台编写第一个函数了。
创建函数
第 1 步:登录云开发控制台
网址:https://console.cloud.tencent.com/tcb
第 2 步:创建云函数
如下图:
- 选择基础服务中的侧边栏【云函数】
- 选择之前创建的环境,一定要选择在腾讯云云开发控制台创建的,目前小程序云开发的环境管理没有放开。
- 点击【新建云函数】按钮;
如果云函数不需要占用大内存,可以选择 128 MB;在控制台默认选择的是 256 MB 。
然后,可以直接点击【下一步】即可,如下图:
编写函数
我们在控制台创建函数完成,下面即可编写代码了。目前控制台默认提供了 Cloud Studio 作为编辑器,基本满足基础的 Web IDE 需要。
点击「函数名」,进入函数配置和详情页。
我们精简默认生成的,修改代码成如下:
'use strict';
exports.main = async (event, context) => {
//这里代码比较简单
//后期会准备从数据库取数据,然后返回结果
return {
msg: 'Hello Serverless! Good good study !',
maybe: '从入门到放弃'
}
};
这里点击【保存】。【保存】和【保存并安装依赖】是有区别的:
- 【保存并安装依赖】需要根据该函数目录下的 package.json 来安装依赖库,比如 node_modules;目前我们这个例子不依赖任何库,也没有 package.json 文件,所以不需要安装依赖;
- 【保存】则是直接保存代码;
如果实在分不清楚,就直接点击【保存并安装依赖】吧。
设置函数可以使用 HTTP 访问
访问函数的形式有好几种,比如函数间调用,客户端 SDK 调用等;当前这里只介绍「开启 HTTP」触发的形式。有的同学对触发不理解,其实可以理解为 “使用 HTTP 访问“。
点击【函数配置】,对函数进行设置。
点击【编辑】,开始设定 HTTP 访问路径,这里设置为 “/say-hello” 。只需要修改这一个地方点击保存。
访问并验证返回的结果
点击生成的链接,即可在浏览器看到返回的数据。
浏览器返回数据如下:
{
"msg": "Hello Serverless! Good good study !",
"maybe": "从入门到放弃"
}
当你发布完成,这个云函数就具备下面特性:
- 具备应对流量的伸缩性,这个是云开发底层做的,无需开发者关系;
- 无需安装 Web 容器,例如 Tomcat、Apache、Node.js Server;
- 无需设置和暴露端口;
- 无需 Nginx 、API 网关;
- 可以自定义函数域名
当然真实的服务不止这么简单,例如:
- 需要设置跨域访问。控制台侧边栏【环境】、【安全设置】【WEB安全域名】可以开启;
- 需要查询数据库返回数据,请看下一节;
通过 HTTP URL 传递参数到云函数
通过前面小节,我们已经可以编写和发布云函数了。但是有个问题,既然是 HTTP 服务,前端传递的参数如何获取呢?
http://api.serverless80.com/say-hello?name=vczero
例如上面 url 中的 name 参数该如何获取呢?可以通过 queryStringParameters
获取。例如计算两个数之和,代码如下:
'use strict';
exports.main = async (event, context) => {
//这里代码比较简单
//这里通过 queryStringParameters 获取请求参数
let a = parseInt(event.queryStringParameters.a || 0)
let b = parseInt(event.queryStringParameters.b || 0)
return {
msg: 'Hello Serverless! Good good study !',
maybe: '从入门到放弃',
sum: a + b
}
}
HTTP 请求参数如下:
//可以点击生成的路径直接方案,需要加上 a, b 两个参数
https://你的环境ID.service.tcloudbase.com/say-hello?a=1&b=23
返回结果如下:
{
"msg": "Hello Serverless! Good good study !",
"maybe": "从入门到放弃",
"sum": 24
}
详细内容可以参考 云接入
开启跨域访问
云函数可以通过 HTTP 访问了,也可以获取请求参数了,那么。在前端应用中,使用 ajax 请求生成的 http url 肯定会存在跨域情况。那么,在哪设置该函数可以被「指定域名」访问,其他域名不能访问呢。那就是开启 「安全域名」。
可以配置:
- 域名,例如 serverless80.com;
- IP,例如 127.0.0.1:8000;
- localhost:8000
可以根据开发、正式环境进行修改;应用正式上线后,记得删除无关域名。
自定义云函数服务域名
一般情况,可以使用默认生成的域名进行服务调用。但是如果有自己的域名,也可以配置。因为默认的域名生成的比较长,也没有规律,配置自定义域名显得统一性高一些。
可以按照上图进行配置,如果没有 SSL 安全证书,可以选择腾讯云的免费证书。免费证书只能配置一个域名,不能配置通配符域名,也就是子域名都需要重新申请。