白嫖vercel当FaaS用
目录
FaaS即Function as a service,云函数,用来托管一些无状态服务,好处是可以动态扩缩,非常灵活。
vercel是一个非常良心的免费的前端托管平台,我的博客目前也托管在这里。
得知vercel还支持云函数,这里是文档,而且runtime还支持Go,这不白嫖一下说不过去
简单用Go在上面部署了一个http服务,路由使用的是gin框架,成果:https://faas.kirito41dd.cn/api/1
开始
- 首先安装vercel的cli工具,方便本地调试
- 直接
npm i -g vercel
- 直接
- 新建个文件夹,初始化一个go项目
mkdir vercel-faas && cd vercel-faas && git init .
go mod init xxx.github.com/vercel-faas
mkdir api
- 代码必须放在api/
目录下
- cli工具本地部署下
vercel dev
- 跟着引导一路输入y
就行- 部署成功会出现
Ready! Available at http://localhost:3000
- 这时就可以本地浏览器调试了,由于目录下没有静态网页,所以会404
- 不用关心,我们只使用云函数功能
写代码
根据vercel的文档,处理http请求的代码必须放在api/
目录下,并且可以按文件名路由。
比如:请求/api/date
就会默认去找api/date.go
文件执行代码,文件里必须写一个函数作为入口
|
|
但是在每个文件里都写一个这样的函数好像很重复劳动,而且不好和框架配合,所以我只在api/
目录下放了一个文件当作入口,再加上路由,然后在handler/
下放处理每个路由的具体实现。
完整代码见https://github.com/kirito41dd/vercel-faas
分解:
- 首先是在
api/
目录下提供一个入口- 创建文件
entrypoint.go
,写上处理函数,请求交由gin框架处理
1 2 3
func Handler(w http.ResponseWriter, r *http.Request) { app.ServeHTTP(w, r) }
- 创建文件
- 引入gin框架,创建实例,并初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import "github.com/gin-gonic/gin" var ( app *gin.Engine ) // 初始化逻辑 func init() { app = gin.New() // 创建路由 must /api/xxx r := app.Group("/api") // 注册路由 registerRouter(r) }
- 注册路由,简单实现个ping
1 2 3
func registerRouter(r *gin.RouterGroup) { r.GET("/ping", handler.Ping) }
handler/handler.go
里写具体的路由处理函数1 2 3
func Ping(c *gin.Context) { c.String(http.StatusOK, "pong") }
- 本地验证下,在项目根目录执行
vercel dev
- https://faas.kirito41dd.cn/api/ping
- 网页返回 pong
简单的ping/pong接口实现了,其他接口也是一个套路,塞更多的路由就行了
部署
-
首先将本地项目随便推送到一个github仓库
-
进入vercel主页
- 点击 New Project
- 在 Import Git Repository 那里关联你的github账号,授权仓库访问权限
- 找到你的仓库,点 Import
-
跳转到配置页面
- Create a Team 可以跳过
- Configure Project 这里
- Project Name 随便填
- Framework Preset 我们只用云函数可以选other
- 剩下的默认即可,点 Deploy
如图
部署完成后会给你分配个域名,可以用域名来访问你的云函数,也可以绑定自己的域名
完