Serverless 是各大雲服務商提供出來的一種無服務的計算資源。爲何叫無服務呢,由於若是你使用 serverless
,你只須要關注應用層,而無需關心底層基礎設施,無需運維。簡而言之,serverless
並非真的無服務,而是關於有服務的不歸你管,雲服務商幫你搞定,好比 Google
,AWS
或者 TencentCloud
。javascript
關注點分離,好呀好!有了 serverless
之後只須要也只能關心業務了,這也不知是喜是憂。但你也無需過於擔憂,這是對已有而且成熟的開發模式的挑戰,解決痛點有限,所以不少團隊對於替換爲 serverless
也動力不足。java
可是我仍然建議你學習 serverless
,畢竟各大雲廠商對於 serverless
有不少免費額度可讓你薅羊毛,對於我的開發者利好。node
serverless
是基於各大雲服務商的產品,每個雲廠商對於 serverless
都有一套本身的 API。爲了可以兼容這些 API,爲了讓你的代碼 Write Once, Run Everywhere
,因而 serverless framework
誕生了。git
一般認爲 serverless = faas + baas,然而 serverless framework 只兼容到了 faas,對於 baas,如各家提供的數據存儲服務,要作到兼容仍是很難。github
serverless framework
與騰訊雲的雲函數來開始一個 hello world
吧!express
$ npm install -g serverless
$ mkdir hello $ cd hello $ serverless create --template tencent-nodejs --name hello Serverless: Generating boilerplate... _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__| _| | | -__| _| | -__|__ --|__ --| |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1.67.0 -------' Serverless: Successfully generated boilerplate for template: "tencent-nodejs"
此時在 hello
目錄自動生成了關於 serverless
在騰訊雲的 hello, world
版。因爲缺乏關於騰訊雲的 plugin
須要首先裝包npm
$ npm i
serverless.yaml
是 serverless framework
的核心,是一個 sls
服務的資源配置文件。若是把 sls
等同於 faas + baas
,那麼 faas
與 baas
的配置都在這裏。瀏覽器
service: hello # 雲廠商的信息,如 aws/google/aliyun/tencent provider: name: tencent runtime: Nodejs8.9 # Nodejs 版本號 credentials: ~/credentials plugins: - serverless-tencent-scf # 騰訊雲對 sls 的適配 functions: hello_world: # 函數名 handler: index.main_handler # 該函數所調用的函數
exports.main_handler = (event, context, callback) => { callback(null, 'Hello World'); };
index.js
中是 faas
中的核心,function
。在 callback
中來回調你所需的數據。微信
使用 sls deploy
打包資源並部署到騰訊雲,此時須要你在騰訊雲的憑證信息。你能夠經過與騰訊雲綁定的微信掃碼受權,相比其餘廠商須要手動維護憑證信息,仍是很方便的。架構
# 其中 sls 是 serverless 的簡寫 $ sls deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Uploading service package to cos[sls-cloudfunction-ap-guangzhou]. hello-dev-KamjFZ-2020-04-15-21-47-11.zip Serverless: Uploaded package successful /Users/xiange/Documents/hello/.serverless/hello.zip Serverless: Creating function hello-dev-hello_world Serverless: Updating code... Serverless: Updating configure... Serverless: Created function hello-dev-hello_world Serverless: Setting tags for function hello-dev-hello_world Serverless: Creating trigger for function hello-dev-hello_world Serverless: Deployed function hello-dev-hello_world successful Serverless: Service Information service: hello stage: dev region: ap-guangzhou stack: hello-dev resources: 1 functions: hello_world: hello-dev-hello_world # 若是須要部署到生產環境 $ sls deploy --stage production
稍等一分鐘,就能夠看到部署成功的信息。
本地函數能夠很簡單地經過調用函數名來執行,serverless
也能夠經過 sls invoke
來調用函數。
$ sls invoke --function hello_world Serverless: "Hello World" ---------- Log: START RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac Event RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac END RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac Report RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac Duration:64ms Memory:128MB MemUsage:21.8125MB
serverless
號稱 noops
,很大程度上是因爲少了 log
及 metrics
的基礎設施搭建。使用 sls logs
與 sls metrics
能夠獲取相關信息,可是豐富度及可定製化就徹底不如 kubernetes
運維了。
$ sls logs Serverless: { "FunctionName": "hello-dev-hello_world", "RetMsg": "\"Hello World\"", "RequestId": "fc72271f-eede-4dbb-8315-f24045597db7", "StartTime": "2020-04-15 21:48:55", "RetCode": 0, "InvokeFinished": 1, "Duration": 1, "BillDuration": 1, "MemUsage": 74870780, "Log": "START RequestId: fc72271f-eede-4dbb-8315-f24045597db7\nEvent RequestId: fc72271f-eede-4dbb-8315-f24045597db7\n2020-04-15T13:48:55.344Z\tfc72271f-eede-4dbb-8315-f24045597db7\t{}\n \nEND RequestId: fc72271f-eede-4dbb-8315-f24045597db7\nReport RequestId: fc72271f-eede-4dbb-8315-f24045597db7 Duration:1ms Memory:128MB MemUsage:71.402344MB", "Level": "", "Source": "" } Serverless: { "FunctionName": "hello-dev-hello_world", "RetMsg": "\"Hello World\"", "RequestId": "62b5760e-5545-4316-bef6-423d4b568396", "StartTime": "2020-04-15 21:48:45", "RetCode": 0, "InvokeFinished": 1, "Duration": 2, "BillDuration": 2, "MemUsage": 74870780, "Log": "START RequestId: 62b5760e-5545-4316-bef6-423d4b568396\nEvent RequestId: 62b5760e-5545-4316-bef6-423d4b568396\n2020-04-15T13:48:47.995Z\t62b5760e-5545-4316-bef6-423d4b568396\t{}\n \nEND RequestId: 62b5760e-5545-4316-bef6-423d4b568396\nReport RequestId: 62b5760e-5545-4316-bef6-423d4b568396 Duration:2ms Memory:128MB MemUsage:71.402344MB", "Level": "", "Source": "" } $ sls metrics Serverless: Service wide metrics 2020-04-14 22:09:45 - 2020-04-15 22:09:45 Service: Invocations: 5 Outflows: 0 Errors: 0 Duration(avg.): 7.3 ms Functions: hello-dev-hello_world: Invocations: 5 Outflows: 0 Errors: 0 Duration(avg.): 7.3 ms
從本篇文章,能夠大概知道如何在騰訊雲初建一個 serverless
函數,而且知道了如何執行而且調用它。而關於 sls
的原理,如服務編排以及容器化,能夠再繼續深刻學習。
3 秒你能作什麼?喝一口水,看一封郵件,仍是 —— 部署一個完整的 Serverless 應用?
複製連接至 PC 瀏覽器訪問:https://serverless.cloud.tencent.com/deploy/express
3 秒極速部署,當即體驗史上最快的 Serverless HTTP 實戰開發!
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您能夠在 最佳實踐 裏體驗更多關於 Serverless 應用的開發!