騰訊云 Serverless 實戰(zhàn)演練
前兩篇說,Serverless 是與云廠商綁定的,所以,我們需要選擇一家云平臺服務商來進行實戰(zhàn)演練。我用過阿里云、AWS以及騰訊云提供的 Serverless,相比于其他廠商,我個人非常推薦騰訊云。并不是其他廠商不好,只是針對與初學者,騰訊云提供了非常友好的手冊及教程。如果你使用過小程序的云開發(fā),那么對于騰訊云,你會感到非常熟悉。
騰訊云開發(fā)文檔中心:https://docs.cloudbase.net/

注冊并登錄騰訊云
前往騰訊云官網(wǎng),注冊騰訊云賬號,然后登錄賬號。如有賬號,可以直接登錄。注意,一定要先完成實名認證。
創(chuàng)建云函數(shù)
登錄之后,申請開通 云開發(fā) CloudBase:
https://cloud.tencent.com/product/tcb ,進入控制臺,創(chuàng)建應用:

創(chuàng)建成功后,點擊云函數(shù) --> 新建云函數(shù):

將函數(shù)代碼修改如下:

簡單解釋一下:
index.js 是入口文件,其中的 main 函數(shù)是入口函數(shù),函數(shù)接受兩個參數(shù) event 對象和 context 對象。
event 對象指的是觸發(fā)云函數(shù)的事件。例如:
在小程序端調(diào)用時,event 是小程序端調(diào)用云函數(shù)時傳入的參數(shù);
在使用 HTTP 請求的形式調(diào)用時,event 是集成請求體。
context 對象:包含了此調(diào)用的調(diào)用信息和函數(shù)的運行狀態(tài),可以使用 context 了解服務運行的情況。
創(chuàng)建觸發(fā)器
保存函數(shù)代碼后,如何執(zhí)行和訪問呢?前面說過,FaaS 產(chǎn)品的一大特性是事件驅(qū)動。想要讓函數(shù)代碼執(zhí)行,我需要創(chuàng)建一個事件的觸發(fā)器。我們比較熟悉的就是 HTTP 觸發(fā)器了,在騰訊云它叫 “HTTP 訪問服務”,點擊新建:

等待觸發(fā)器創(chuàng)建成功后,我們可以使用默認域名,訪問應用函數(shù):

本地環(huán)境及開發(fā)工具
CloudBaseCLI 是云開發(fā)(Tencent CloudBase,TCB)開源的命令行界面交互工具,用于幫助用戶快速、方便的部署項目,管理云開發(fā)資源。CloudBaseCLI 是基于 Node.js 開發(fā)的工具,因此,我們需要保證本地的 Node.js 版本在 8.6 以上。
執(zhí)行 npm i -g @cloudbase/cli 或 yarn global add@cloudbase/cli 進行全局安裝,安裝成功后,使用 tcb -v 查看版本號,使用 tcb -h 查看相關幫助,顯示所有可用命令。
在使用之前,我們需要先進行授權登錄,命令行執(zhí)行 tcb login,會自動彈出瀏覽器的授權界面,確認授權后,命令行的控制臺會打印登錄成功的相關信息:

授權成功后,我們就可以在本地創(chuàng)建云函數(shù)了。在命令行執(zhí)行 tcb new 命令行的選項中,有一項需要注意,本地創(chuàng)建是只能創(chuàng)建函數(shù)而不是應用,也就是說,我們最好是先在控制臺創(chuàng)建好應用后,再創(chuàng)建本地函數(shù)。準備好之后,我們就可以看到可選的應用了,選擇函數(shù)所屬的應用后,再選擇對應的函數(shù)模板。
這里我們選擇與之前一樣的 Node 云函數(shù)示例,輸入項目名稱后,云函數(shù)會下載相關代碼到本地。注意,此時,在控制臺中,我們是看不到這個函數(shù)的,也就是說,這個函數(shù)并沒有上線運行,其實命令行中也給了我們提示:“執(zhí)行命令 tcb 一鍵部署”,想要上線運行,還需要進到項目目錄中,執(zhí)行 tcb 命令。

函數(shù)的運行是需要觸發(fā)器的,所以,函數(shù)部署成功后,執(zhí)行 tcb service create 命令,創(chuàng)建 http 觸發(fā)器,創(chuàng)建成功后會返回訪問地址,但是,與在控制臺創(chuàng)建觸發(fā)器一樣,需要等待幾分鐘的時間后才能看到訪問結(jié)果。

接著,我們修改函數(shù)返回值的內(nèi)容,重新刷新后并沒有顯示,這需要我們更新函數(shù)代碼后才能生效,可以使用 tcb fn code update xxx 函數(shù)名,命令只會更新函數(shù)的代碼以及執(zhí)行入口,不會修改函數(shù)的其他配置。
雖然代碼放在了本地編寫,但是本地是沒有觸發(fā)器的。雖然我有 Node 環(huán)境,但是與云環(huán)境還是有很大差異的,我不能每次寫完代碼,都需要上傳再測試啊,這種體驗根本就沒法用啊。
為了解決這個問題,騰訊開發(fā)了開源的 scf-cli :https://github.com/TencentCloud/scf-node-debug 工具,幫助我們在本地快速調(diào)試,基本原理就是在我們本地開啟一個服務器充當觸發(fā)器,模擬云環(huán)境提供本地的調(diào)試。

執(zhí)行 npm install scf-cli -g 安裝。安裝成功后,在項目目錄下執(zhí)行 scf init 或者 scf i 開啟本地測試環(huán)境,命令提示符會讓我們輸入入口文件的路徑,以及入口函數(shù)名,設置好超時時間后,選擇測試方式。

如果選擇的是 http ,那么默認的會開啟 3000 端口的服務器。此時,我們就可以愉快地使用 Serverless 云原開發(fā)了。
Express 與云函數(shù)
經(jīng)過前面一系列的配置,我們終于可以在本地開發(fā)調(diào)試了。但是,使用純原生的 Node.js 開發(fā),安全性沒有足夠的保證,而且效率也是非常低,如果能在云函數(shù)中引入一款我們熟悉的框架,那么我們的開發(fā)才算坐上了高鐵。
這里我們選擇一款比較大眾化的框架——Express,如何將 Express 結(jié)合到云函數(shù)中呢?
先在本地安裝好 Express,按照以往的開發(fā)經(jīng)驗,我們在本地開啟 HTTP 服務。
而在云函數(shù)中,我們知道代碼是在入口函數(shù)運行的,而且云環(huán)境中有 HTTP 的觸發(fā)器,是不需要我們創(chuàng)建服務器的。

有一款開源工具,專門用來對框架代碼進行包裝,serverless-http:https://github.com/dougmoscrop/serverless-http。
https://www.npmjs.com/package/serverless-http 是專門用于在 Serverless 環(huán)境下包裝接口的模塊,不需要服務器,也不需要監(jiān)聽端口。
使用方式也很簡單,命令行安裝 npm install serverless-http。
寫好之后將代碼部署到云平臺,然后進行請求測試,在本地開發(fā)測試,我們開啟本地服務器就可以了。
推薦閱讀:
點個“在看”和“贊”吧,
畢竟我是要成為前端網(wǎng)紅的人。
