-

在 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 安全证书,可以选择腾讯云的免费证书。免费证书只能配置一个域名,不能配置通配符域名,也就是子域名都需要重新申请。