Serverless 的開發者工具建設

本文將介紹 Serverless 生態下的開發者工具,並簡述這些工具是如何貫穿開發、調試、測試和部署的生命週期,提升開發者效率的。

由於 Serverless 平臺具備彈性擴縮、免運維、按需付費等特點,越來越多的公司和個人開始使用 Serverless 承載項目。但對於開發者而言,Serverless 一定程度上減少了開發難度,可以讓我們聚焦業務邏輯進行開發;但同時,由於 Serverless 顛覆了傳統的開發模式,從而在相關的開發工具,函數編排組織上也面臨著重大挑戰。

▎面向 Serverless 開發的挑戰

從一個開發者的角度而言,Serverless 開發和傳統的開發方式相比發生了很大的改變。開發者習慣了在本地進行開發,調試,測試和持續集成,持續部署等流程,在面向 Serverless 進行開發時,免不了會有很多疑問:

  • 怎樣本地開發一個 Serverless 項目?
  • 怎樣對 Serverless 函數進行本地調試?
  • 開發過程中打印的日誌是否可以方便的檢索並用於 debug?
  • 如何保證本地環境和雲端環境的一致?
  • 發佈時怎樣將多個函數一次性發布到雲環境中?

面向 Serverless 的工具建設邏輯

面臨開發過程中的種種挑戰,開發者工具將從開發者的視角出發,使 Serverless 的項目開發更貼近用戶習慣。

下面是一張項目開發的生命週期流程圖,可以看到,在項目的開發過程中,至少要經歷需求、編碼、構建、測試、發佈、部署和運維等幾個階段。

在代碼的編碼和構建階段通過持續集成完成代碼的自動構建,成為持續集成 CI(Continuous Integration);在代碼的發佈和部署階段,通過配置灰度策略,告警和回滾計劃等,從而可以完成代碼的持續交付 CD(Continuous Delivery)。

此外,在開發者的開發過程中,也會遇到編碼、調試和單元測試,集成測試等場景,這些功能的支持也是面向 Serverless 架構進行開發中必不可少的一環。對開發者工具的建設,則會重點解決在整個生命週期中的痛點。

Serverless 的開發者工具建設

面向 Serverless 的開發者工具

在 Serverless 技術趨勢大熱的今天,已經湧現出很多面向開發者的解決方案和工具,例如開源的 Serverless Framework,Zappa 和 ClaudiaJS 等工具。

開發者工具大部分都通過調用雲廠商中 Serverless 產品的 API/SDK,封裝底層能力,並提供給客戶更加直觀便捷的使用方式。目前比較常見的開發工具中,主要分為 CLI 命令行工具以及 IDE 插件這兩種形態。雖然展現方式不同,但本質上都是降低了本地開發 Serverless 項目的門檻,並在雲平臺提供的基礎能力上,封裝了更多組織和編排的方式。

本文將以騰訊雲的雲函數為例,介紹較為典型的開發工具 —— 騰訊雲 Serverless 本地開發工具及 VS Code 插件。

騰訊雲 Serverless 本地開發工具(SCF CLI)以開源項目的形式維護,目的在於讓用戶方便的實現函數打包、部署、本地調試,也可以方便的生成雲函數的項目並基於 demo 項目進一步的開發。SCF CLI 通過一個函數模板配置文件,完成函數及相關周邊資源的描述,並基於配置文件實現本地代碼及配置部署到雲端的過程。

下面我們以一個 Serverless 項目為例,展示 Serverless 開發工具的使用流程:

1、函數開發和編碼

首先,安裝並配置了 SCF CLI 後,可以通過 --help 命令查看所支持的命令,之後通過 scf init 命令快速生成一個函數 demo。在創建完畢後,可以看到生成了 index.js 文件和template.yaml 文件。

其中,index.js 是函數的入口文件,tempate.yaml 則是通過特定的格式記錄了函數的配置信息,如內存大小,超時時間等信息。tempate.yaml 也是後續對函數進行編排和組織的關鍵。除了簡單的 init 命令之外,SCF CLI 也支持從 git 拉取代碼和一些已有的函數模板,便於客戶基於特定的場景快速開發。

2、代碼調試

在開發過程中,開發者會選取自己熟悉的 IDE 代碼編輯器進行代碼編寫。為了便於更快速直觀的進行本地開發和調試,通過騰訊雲 VS Code 插件支持了一鍵調試的能力。

首先,可以打開剛創建函數的文件目錄,在插件中會自動識別這個函數。之後可以通過 F9 進行斷點,F5 啟動調試能力。函數調試過程中的輸出會打印在 terminal 中,並且支持單步調試,查看變量和堆棧等信息。

Serverless 的開發者工具建設

3、代碼發佈

完成了開發和測試後,也可以分別通過 VS Code 插件或 CLI 進行代碼的發佈。目前分別支持了zip 打包發佈,通過 COS(對象存儲)上傳併發布,以及通過 git 倉庫發佈,每次只提交增量修改的文件。在發佈完畢後,還可以通過插件中的雲端調試,來查看在雲端的運行狀況和返回日誌。

Serverless 的開發者工具建設

4、多函數部署

在 VS Code 插件及 CLI 中,可以很方便的將單函數部署在雲端,那麼如果希望快速發佈多個函數時,應該怎樣操作呢?

目前也可以直接通過 SCF CLI 的 deploy 命令來實現。只需要通過一個 template.yaml 來維護多個函數的信息即可。

除了發佈之外,還可以通過 template.yaml 文件中的 Global 字段來定義一些函數的通用配置,從而解決開發過程中,希望多個函數共用相同配置的痛點(例如共用相同的環境變量,超時時間和內存等,不需要重複配置)

例如,在我的工作空間下,有兩個函數「hellotinatest234」以及「testscflinux」需批量部署上傳,並且兩個函數使用公共配置。則可以在 template.yaml 中分別定義兩個函數的屬性,並且定義 Global 字段指定公共配置。部署過程和 yaml 的樣式如下:

Serverless 的開發者工具建設

5、異常排查 - 日誌能力

除了開發流程之外,在生產環境異常時,也可以通過 CLI 的 logs --tail 等命令,快速靈活地進行日誌查詢等,並且可以配合 grep awk 等工具使用。當發佈新版本時,採用 tail 模式可以實時打印雲端日誌,方便開發者快速查看問題。

Serverless 的開發者工具建設

6、DevOps 能力

最後是雲函數的 DevOps 能力。目前已經支持了和 Jekins,Coding 和藍鯨平臺等對接。並且還在持續對 Coding 平臺做更深度的整合,提供開箱即可用的 DevOps 能力。

Serverless 的開發者工具建設

開發者工具總結和展望

隨著 Serverless 生態的逐步完善,工具可以覆蓋的場景會越來越多。例如,可以在本地模擬 API 網關的請求,或是通過集成常用的測試框架,對函數進行單元測試和整體性測試等。開發者也有更廣闊的空間可以去參與其中,構建一個面向 Serverless 的開發架構。

後續開發者工具會更加著重於對函數及函數週邊資源的組織方式(網關,DB 等),從項目/應用的維度出發,讓開發者可以快速通過工具搭建一個常用的使用場景(如 WEB 網站,文件上傳工具等),從而更好地瞭解 Serverless 項目的組織方式。

此外,在持續集成和持續交付的對接中,開發者工具也將支持更便捷,通用的配置,便於規範開發流程,承載大型項目和核心業務。


分享到:


相關文章: