腾讯云函数初探

2020-06-23 15:09:07 浏览数 (1)

前不久的微信开发者大会上在推他们的Serverless架构,即他们的产品腾讯云函数SCF。 当然这个也不是新鲜的事物,在亚马逊提供的同类服务叫做lambda,阿里云提供的则叫做函数计算,Cloudflare的则名为workers

在编程语言的支持上,除了Cloudflare的workers只支持javascript。 其余几家都支持python、php、golang、node,java等主流开发语言。

关于workers的描述,Cloudflare官网是这样描述的:

……Cloudflare Workers provides a lightweight JavaScript execution environment that allows developers to augment existing applications or create entirely new ones without configuring or maintaining infrastructure.

大意就是workers提供一个免运维的轻量级的js的运行环境

现在微信小程序开发这么火,那么就拿腾讯云的SCF云函数作为一个入门的helloword

首先抛出官方文档:https://cloud.tencent.com/document/product/583/9199

关于无服务器的概述,文档已经说得很清楚:

无服务器(Serverless)不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。

大意就是运维可以下岗了,老板胆子大的话,后端也可以下岗了,一个前端就可以全干,啊不,是全栈(狗头保命)。

此处注册登录流程省略一千字。

创建云函数

创建函数主要有三种:

  • web控制台创建
  • 本地命令行CLI创建
  • VS Code插件创建

需要注意的是,使用golang开发在web控制台在线创建自定义代码时会失败,会报一个No Match Module: Get lambda file failed的错误。

如果语言是PHP和Python创建是成功的。 VS Code创建流程差不多,略过。

重点说说本地命令行CLI创建。 说明文档:https://cloud.tencent.com/document/product/583/37510

大前提:无论用哪种编程语言作为开发语言,都要先安装好python环境。

安装scf就一个命令:pip install scf 安装好之后可以查看scf版本: scf --version 继续执行:scf configure set进行配置。 相关的配置信息,可以打开腾讯云的web控制台查看。

接下来就是编写函数部分了。 执行项目初始化命令:scf init -n go_test -r go1 这个命令中参数-n是执行项目名,-r是指定开发环境,不指定的话默认初始化用的是Python3,具体可用的环境可以查看文档的相关部分或使用scf init --help查看帮助信息。

这样就在当前目录下生成到了一个go_test的目录。 cd go_test进入目录里面看可以看到初始化好的信息。

本文章选定的是golang,开发环境是windows,关于go的使用文档可以看:https://cloud.tencent.com/document/product/583/18032。

需要注意的是,最后生成的二进制文件的名字。 说明文档中使用的是:

代码语言:javascript复制
set GOOS=linux
set GOARCH=amd64
go build -o main main.go

按照说明打包部署执行scf deploy,会报错:

代码语言:javascript复制
[x] [ERROR]  default - go_test: Deploy function 'go_test' failure, No Match Modu
le: Get lambda file failed. RequestId: xxxxxxxxxxxxxxxxxxxx-xxxxx

最后找原因发现是scf部署时是按照template.yaml里面的handler字段来匹配的,而这个字段需要和二进制文件以及打压缩包的名字一致。

所以解决办法是要么把yaml配置文件中的handler名字改为main,或者重新编译

代码语言:javascript复制
go build -o index index.go  //如果没有修改生成的默认文件名index.go

此时再去按照流程部署会发现能部署成功。

执行方式有几种,其中云端调用函数执行的命令是scf remote invoke -n go_test,具体文档里面也有交代,说明文档:https://cloud.tencent.com/document/product/583/38310

流程差不多就是这样,别的特性或功能,可以去官方文档去探索。

题外话

关于触发器,某些地区会缺少。 比如我选择创建云函数的地区是「成都」,触发器只有三种: 定时触发,cos触发,kafka触发三种。

而说明文档种提到的API网关触发方式在成都区是没有的, 换到广州区,创建的云函数就多了一个API网触发的选项。

如果刚好你是需要做web服务的话,是需要用到api网关触发器的,真要使用的话,除了换区也没啥选择了。

通常来说,很多云服务对内网流量是免费的,比如腾讯云COS,而云函数也有一些内网流量的免计费的说明,如果你的服务器刚好部署在成都区,那么,流量就变成走公网得收费了,当然还有时延问题。

这个也说明云函数还有待完善的地方,不过相信以后还是会越来越好。

0 人点赞