天天看點

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊

參考

Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔

備注: 本文介紹的技巧需要 Fun 版本大于等于 3.6.4。

效果預覽

本文涉及到的兩個應用示例部署後的連結,點選預覽效果:

1、Gin 簡單示例:

http://gentest.functioncompute.com/ping

2、Beego 簡單示例:

http://beegotest.functioncompute.com

3、Gin 部落格網站示例:

http://mdblog.functioncompute.com

環境準備

-首先按照 Fun 的安裝文檔裡介紹的方法将 Fun 安裝到本機。

PS: 本文介紹的方法,不需要安裝 Docker,僅僅安裝 Fun 即可,最簡單的方式就是直接下載下傳可執行的二進制檔案。

安裝完成後,可以執行 fun --version 檢查 Fun 是否安裝成功。

示例一:遷移 gin 示例到函數計算

首先我們按照官方示例的步驟,安裝 gin(需要 golang 版本在 1.11+ 以上):

go get -u github.com/gin-gonic/gin
           

建立一個 example.go,内容填寫如下:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
           

使用下面的指令啟動應用:

go run example.go
           

然後通路

localhost:8080/ping

,可以看到傳回結果如下:

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

最後直接使用 fun deploy 即可部署。

fun deploy
           

我們這裡詳細介紹下第一次部署流程:

1、Fun 首先檢測到這不是一個 Fun 項目,會提示是否自動建立(按下回車或者輸入 y 即可)

2、然後 Fun 又會嘗試去檢測應用的啟動端口(函數計算要求必須啟動在 0.0.0.0:9000),如果不比對,則會協助修改:

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

3、按下回車,Fun 會自動檢測建構生成的可執行程式,如果檢測不到,則提示使用者使用指定指令進行編譯

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

4、按下回車後,就會自動進行編譯了,編譯完成後,會自動生成 Fun 所需要的 bootstrap 檔案以及 template.yml 檔案,然後會進行自動部署操作,在部署前,會首先列出本次部署帶來的變更:

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

5、如果确認上面的變更沒有問題,再按下回車即可開始資源的部署流程。

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

部署完成後,可以看到會自動生成一個可以測試通路的臨時域名 14118335-1911504709953557.test.functioncompute.com,通過這個臨時域名,可以用于開發、測試時預覽應用。

使用該臨時域名,通路應用的 API 接口 14118335-1911504709953557.test.functioncompute.com/ping 測試,效果如下:

備注:臨時域名僅僅用作示範以及開發,是有時效的,如果用作生産,請綁定已經備案的域名。

示例二:遷移 beego 示例到函數計算

首先我們按照官方示例的步驟,搭建 beego 應用:

go get github.com/astaxie/beego
           

建立一個 hello.go,内容填寫如下:

package main

import "github.com/astaxie/beego"

func main(){

beego.Run()           

}

go run hello.go
           

然後通路 localhost:8080,可以看到傳回結果。

最後部署,直接使用 fun deploy 經曆類似示例一的流程後,就可以通過 Fun 傳回的臨時域名預覽應用了。

示例三:遷移 gin 搭建的部落格應用到函數計算

示例三我們選擇一個稍微複雜一些的應用,我們按照官方幫助文檔的步驟,搭建一個基于 gin 的 blog 應用:

1、克隆項目到本地(直接下載下傳 zip 包也可以):

git clone https://github.com/tanhe123/mdblog.git
           

2、修改配置檔案

在 config 目錄下,有一個配置檔案 config.example.toml,将其複制一份,并修改名稱為 config.toml,然後修改裡面的幾個配置:

  • 将 port = 8091 修改為 port = 9000,表示應用啟動時,啟動在 9000 端口。
  • 将 debug = true 修改為 debug = false,表示使用生産版本
  • 将 dir = "logs" 修改為 dir = "/tmp",表示日志寫到 /tmp 目錄(不挂載 NAS 的情況下,函數計算隻有該目錄是可以寫的)

3、編譯并運作應用

go build # 會生成一個 mdblog 的二進制可執行程式
./mdblog # 直接運作該可執行程式
           

如果遇到網絡問題,可以使用

https://goproxy.cn/

加速。

通路

http://localhost:9000

預覽效果

4、部署

最後,本地測試沒問題後,我們需要釋出到函數計算上,雖然這個示例比起上面兩個代碼層面要複雜很多,但部署流程是一樣的,直接執行 fun deploy 然後一路回車即可。

本示例生成的臨時域名為:

https://14118335-1911504709953557.test.functioncompute.com

打開可以看到如下效果:

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

打開具體的一篇部落格,效果如下:

輕松搭建基于 Serverless 的 Go 應用(Gin、Beego 舉例)

總結

我們通過三個示例介紹了如何部署一個 go 應用到函數計算上,從這三個例子我們可以發現,遷移一個 go 應用到函數計算是非常容易的,主要精力還是放在了如何在本地配置并啟動應用,然後部署隻需要簡單的通過 fun deploy 指令即可。部署完成後,即可享受到函數計算帶來的彈性伸縮、按量付費、免運維等特性。

繼續閱讀