云開發(fā) 編寫第一個云函數(shù)

2020-07-22 15:34 更新

在 Serverless 中,云函數(shù)是作為計算容器存在的,可以作為服務(wù)接口使用,也可以做為中轉(zhuǎn)服務(wù)使用,也可以編寫業(yè)務(wù)邏輯。我們經(jīng)常談的 FaaS(Functions as a Service)中最核心的是云函數(shù)。如果需要簡單理解,那就是寫了一段代碼(一個函數(shù)),可以直接部署在服務(wù)器上,但是這個函數(shù)是具備伸縮性的。流量來了,可以直接將函數(shù)拉起,可以進行資源擴充;流量回落,可以降至 0。這里不討論業(yè)界如何實現(xiàn)冷啟動或者 0 - 1 的優(yōu)化。

上一節(jié),我們在控制臺創(chuàng)建了自己的環(huán)境;這里我們就可以在控制臺編寫第一個函數(shù)了。

創(chuàng)建函數(shù)

第 1 步:登錄云開發(fā)控制臺
網(wǎng)址:https://console.cloud.tencent.com/tcb

第 2 步:創(chuàng)建云函數(shù)
如下圖:

  • 選擇基礎(chǔ)服務(wù)中的側(cè)邊欄【云函數(shù)】
  • 選擇之前創(chuàng)建的環(huán)境,一定要選擇在騰訊云云開發(fā)控制臺創(chuàng)建的,目前小程序云開發(fā)的環(huán)境管理沒有放開。
  • 點擊【新建云函數(shù)】按鈕;

如果云函數(shù)不需要占用大內(nèi)存,可以選擇 128 MB;在控制臺默認選擇的是 256 MB 。

然后,可以直接點擊【下一步】即可,如下圖:

編寫函數(shù)

我們在控制臺創(chuàng)建函數(shù)完成,下面即可編寫代碼了。目前控制臺默認提供了 Cloud Studio 作為編輯器,基本滿足基礎(chǔ)的 Web IDE 需要。
點擊「函數(shù)名」,進入函數(shù)配置和詳情頁。

我們精簡默認生成的,修改代碼成如下:

'use strict';
exports.main = async (event, context) => {
    //這里代碼比較簡單
    //后期會準備從數(shù)據(jù)庫取數(shù)據(jù),然后返回結(jié)果
    return {
        msg: 'Hello Serverless! Good good study !',
        maybe: '從入門到放棄'
    }
};

這里點擊【保存】。【保存】和【保存并安裝依賴】是有區(qū)別的:

  • 【保存并安裝依賴】需要根據(jù)該函數(shù)目錄下的 package.json 來安裝依賴庫,比如 node_modules;目前我們這個例子不依賴任何庫,也沒有 package.json 文件,所以不需要安裝依賴;
  • 【保存】則是直接保存代碼;

如果實在分不清楚,就直接點擊【保存并安裝依賴】吧。

設(shè)置函數(shù)可以使用 HTTP 訪問

訪問函數(shù)的形式有好幾種,比如函數(shù)間調(diào)用,客戶端 SDK 調(diào)用等;當前這里只介紹「開啟 HTTP」觸發(fā)的形式。有的同學(xué)對觸發(fā)不理解,其實可以理解為 “使用 HTTP 訪問“。

點擊【函數(shù)配置】,對函數(shù)進行設(shè)置。

點擊【編輯】,開始設(shè)定 HTTP 訪問路徑,這里設(shè)置為 “/say-hello” 。只需要修改這一個地方點擊保存。

訪問并驗證返回的結(jié)果

點擊生成的鏈接,即可在瀏覽器看到返回的數(shù)據(jù)。

瀏覽器返回數(shù)據(jù)如下:

{
  "msg": "Hello Serverless! Good good study !",
  "maybe": "從入門到放棄"
}

當你發(fā)布完成,這個云函數(shù)就具備下面特性

  • 具備應(yīng)對流量的伸縮性,這個是云開發(fā)底層做的,無需開發(fā)者關(guān)系;
  • 無需安裝 Web 容器,例如 Tomcat、Apache、Node.js Server;
  • 無需設(shè)置和暴露端口;
  • 無需 Nginx 、API 網(wǎng)關(guān);
  • 可以自定義函數(shù)域名

當然真實的服務(wù)不止這么簡單,例如:

  • 需要設(shè)置跨域訪問??刂婆_側(cè)邊欄【環(huán)境】、【安全設(shè)置】【W(wǎng)EB安全域名】可以開啟;
  • 需要查詢數(shù)據(jù)庫返回數(shù)據(jù),請看下一節(jié);

通過 HTTP URL 傳遞參數(shù)到云函數(shù)

通過前面小節(jié),我們已經(jīng)可以編寫和發(fā)布云函數(shù)了。但是有個問題,既然是 HTTP 服務(wù),前端傳遞的參數(shù)如何獲取呢?

http://api.serverless80.com/say-hello?name=vczero

例如上面 url 中的 name 參數(shù)該如何獲取呢?可以通過 queryStringParameters 獲取。例如計算兩個數(shù)之和,代碼如下:

'use strict';
exports.main = async (event, context) => {
    //這里代碼比較簡單
    //這里通過 queryStringParameters 獲取請求參數(shù)
    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 請求參數(shù)如下:

//可以點擊生成的路徑直接方案,需要加上 a, b 兩個參數(shù)
https://你的環(huán)境ID.service.tcloudbase.com/say-hello?a=1&b=23     

返回結(jié)果如下:

{
  "msg": "Hello Serverless! Good good study !",
  "maybe": "從入門到放棄",
  "sum": 24
}

詳細內(nèi)容可以參考 云接入

開啟跨域訪問

云函數(shù)可以通過 HTTP 訪問了,也可以獲取請求參數(shù)了,那么。在前端應(yīng)用中,使用 ajax 請求生成的 http url 肯定會存在跨域情況。那么,在哪設(shè)置該函數(shù)可以被「指定域名」訪問,其他域名不能訪問呢。那就是開啟 「安全域名」

可以配置:

  • 域名,例如 serverless80.com;
  • IP,例如 127.0.0.1:8000;
  • localhost:8000

可以根據(jù)開發(fā)、正式環(huán)境進行修改;應(yīng)用正式上線后,記得刪除無關(guān)域名。

自定義云函數(shù)服務(wù)域名

一般情況,可以使用默認生成的域名進行服務(wù)調(diào)用。但是如果有自己的域名,也可以配置。因為默認的域名生成的比較長,也沒有規(guī)律,配置自定義域名顯得統(tǒng)一性高一些。

可以按照上圖進行配置,如果沒有 SSL 安全證書,可以選擇騰訊云的免費證書。免費證書只能配置一個域名,不能配置通配符域名,也就是子域名都需要重新申請。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號