在 Serverless 中,云函數(shù)是作為計(jì)算容器存在的,可以作為服務(wù)接口使用,也可以做為中轉(zhuǎn)服務(wù)使用,也可以編寫(xiě)業(yè)務(wù)邏輯。我們經(jīng)常談的 FaaS(Functions as a Service)中最核心的是云函數(shù)。如果需要簡(jiǎn)單理解,那就是寫(xiě)了一段代碼(一個(gè)函數(shù)),可以直接部署在服務(wù)器上,但是這個(gè)函數(shù)是具備伸縮性的。流量來(lái)了,可以直接將函數(shù)拉起,可以進(jìn)行資源擴(kuò)充;流量回落,可以降至 0。這里不討論業(yè)界如何實(shí)現(xiàn)冷啟動(dòng)或者 0 - 1 的優(yōu)化。
上一節(jié),我們?cè)诳刂婆_(tái)創(chuàng)建了自己的環(huán)境;這里我們就可以在控制臺(tái)編寫(xiě)第一個(gè)函數(shù)了。
第 1 步:登錄云開(kāi)發(fā)控制臺(tái)
網(wǎng)址:https://console.cloud.tencent.com/tcb
第 2 步:創(chuàng)建云函數(shù)
如下圖:
如果云函數(shù)不需要占用大內(nèi)存,可以選擇 128 MB;在控制臺(tái)默認(rèn)選擇的是 256 MB 。
然后,可以直接點(diǎn)擊【下一步】即可,如下圖:
我們?cè)诳刂婆_(tái)創(chuàng)建函數(shù)完成,下面即可編寫(xiě)代碼了。目前控制臺(tái)默認(rèn)提供了 Cloud Studio 作為編輯器,基本滿(mǎn)足基礎(chǔ)的 Web IDE 需要。
點(diǎn)擊「函數(shù)名」,進(jìn)入函數(shù)配置和詳情頁(yè)。
我們精簡(jiǎn)默認(rèn)生成的,修改代碼成如下:
'use strict';
exports.main = async (event, context) => {
//這里代碼比較簡(jiǎn)單
//后期會(huì)準(zhǔn)備從數(shù)據(jù)庫(kù)取數(shù)據(jù),然后返回結(jié)果
return {
msg: 'Hello Serverless! Good good study !',
maybe: '從入門(mén)到放棄'
}
};
這里點(diǎn)擊【保存】。【保存】和【保存并安裝依賴(lài)】是有區(qū)別的:
如果實(shí)在分不清楚,就直接點(diǎn)擊【保存并安裝依賴(lài)】吧。
訪(fǎng)問(wèn)函數(shù)的形式有好幾種,比如函數(shù)間調(diào)用,客戶(hù)端 SDK 調(diào)用等;當(dāng)前這里只介紹「開(kāi)啟 HTTP」觸發(fā)的形式。有的同學(xué)對(duì)觸發(fā)不理解,其實(shí)可以理解為 “使用 HTTP 訪(fǎng)問(wèn)“。
點(diǎn)擊【函數(shù)配置】,對(duì)函數(shù)進(jìn)行設(shè)置。
點(diǎn)擊【編輯】,開(kāi)始設(shè)定 HTTP 訪(fǎng)問(wèn)路徑,這里設(shè)置為 “/say-hello” 。只需要修改這一個(gè)地方點(diǎn)擊保存。
點(diǎn)擊生成的鏈接,即可在瀏覽器看到返回的數(shù)據(jù)。
瀏覽器返回?cái)?shù)據(jù)如下:
{
"msg": "Hello Serverless! Good good study !",
"maybe": "從入門(mén)到放棄"
}
當(dāng)你發(fā)布完成,這個(gè)云函數(shù)就具備下面特性:
當(dāng)然真實(shí)的服務(wù)不止這么簡(jiǎn)單,例如:
通過(guò)前面小節(jié),我們已經(jīng)可以編寫(xiě)和發(fā)布云函數(shù)了。但是有個(gè)問(wèn)題,既然是 HTTP 服務(wù),前端傳遞的參數(shù)如何獲取呢?
http://api.serverless80.com/say-hello?name=vczero
例如上面 url 中的 name 參數(shù)該如何獲取呢?可以通過(guò) queryStringParameters
獲取。例如計(jì)算兩個(gè)數(shù)之和,代碼如下:
'use strict';
exports.main = async (event, context) => {
//這里代碼比較簡(jiǎn)單
//這里通過(guò) queryStringParameters 獲取請(qǐng)求參數(shù)
let a = parseInt(event.queryStringParameters.a || 0)
let b = parseInt(event.queryStringParameters.b || 0)
return {
msg: 'Hello Serverless! Good good study !',
maybe: '從入門(mén)到放棄',
sum: a + b
}
}
HTTP 請(qǐng)求參數(shù)如下:
//可以點(diǎn)擊生成的路徑直接方案,需要加上 a, b 兩個(gè)參數(shù)
https://你的環(huán)境ID.service.tcloudbase.com/say-hello?a=1&b=23
返回結(jié)果如下:
{
"msg": "Hello Serverless! Good good study !",
"maybe": "從入門(mén)到放棄",
"sum": 24
}
詳細(xì)內(nèi)容可以參考 云接入
云函數(shù)可以通過(guò) HTTP 訪(fǎng)問(wèn)了,也可以獲取請(qǐng)求參數(shù)了,那么。在前端應(yīng)用中,使用 ajax 請(qǐng)求生成的 http url 肯定會(huì)存在跨域情況。那么,在哪設(shè)置該函數(shù)可以被「指定域名」訪(fǎng)問(wèn),其他域名不能訪(fǎng)問(wèn)呢。那就是開(kāi)啟 「安全域名」。
可以配置:
可以根據(jù)開(kāi)發(fā)、正式環(huán)境進(jìn)行修改;應(yīng)用正式上線(xiàn)后,記得刪除無(wú)關(guān)域名。
一般情況,可以使用默認(rèn)生成的域名進(jìn)行服務(wù)調(diào)用。但是如果有自己的域名,也可以配置。因?yàn)槟J(rèn)的域名生成的比較長(zhǎng),也沒(méi)有規(guī)律,配置自定義域名顯得統(tǒng)一性高一些。
可以按照上圖進(jìn)行配置,如果沒(méi)有 SSL 安全證書(shū),可以選擇騰訊云的免費(fèi)證書(shū)。免費(fèi)證書(shū)只能配置一個(gè)域名,不能配置通配符域名,也就是子域名都需要重新申請(qǐng)。
更多建議: