本文將介紹 Serverless 生態下的開發者工具,並簡述這些工具是如何貫穿開發、調試、測試和部署的生命週期,提高開發者效率的。
因爲 Serverless 平臺具有彈性擴縮、免運維、按需付費等特色,愈來愈多的公司和我的開始使用 Serverless 承載項目。但對於開發者而言,Serverless 必定程度上減小了開發難度,可讓咱們聚焦業務邏輯進行開發;但同時,因爲 Serverless 顛覆了傳統的開發模式,從而在相關的開發工具,函數編排組織上也面臨着重大挑戰。linux
從一個開發者的角度而言,Serverless 開發和傳統的開發方式相比發生了很大的改變。開發者習慣了在本地進行開發,調試,測試和持續集成,持續部署等流程,在面向 Serverless 進行開發時,免不了會有不少疑問:git
面臨開發過程當中的種種挑戰,開發者工具將從開發者的視角出發,使 Serverless 的項目開發更貼近用戶習慣。架構
下面是一張項目開發的生命週期流程圖,能夠看到,在項目的開發過程當中,至少要經歷需求、編碼、構建、測試、發佈、部署和運維等幾個階段。併發
在代碼的編碼和構建階段經過持續集成完成代碼的自動構建,成爲持續集成 CI(Continuous Integration);在代碼的發佈和部署階段,經過配置灰度策略,告警和回滾計劃等,從而能夠完成代碼的持續交付 CD(Continuous Delivery)。app
此外,在開發者的開發過程當中,也會遇到編碼、調試和單元測試,集成測試等場景,這些功能的支持也是面向 Serverless 架構進行開發中必不可少的一環。對開發者工具的建設,則會重點解決在整個生命週期中的痛點。框架
在 Serverless 技術趨勢大熱的今天,已經涌現出不少面向開發者的解決方案和工具,例如開源的 Serverless Framework,Zappa 和 ClaudiaJS 等工具。less
開發者工具大部分都經過調用雲廠商中 Serverless 產品的 API/SDK,封裝底層能力,並提供給客戶更加直觀便捷的使用方式。目前比較常見的開發工具中,主要分爲 CLI 命令行工具以及 IDE 插件這兩種形態。雖然展示方式不一樣,但本質上都是下降了本地開發 Serverless 項目的門檻,並在雲平臺提供的基礎能力上,封裝了更多組織和編排的方式。運維
本文將以騰訊雲的雲函數爲例,介紹較爲典型的開發工具 —— 騰訊雲 Serverless 本地開發工具及 VS Code 插件。編輯器
騰訊雲 Serverless 本地開發工具(SCF CLI)以開源項目的形式維護,目的在於讓用戶方便的實現函數打包、部署、本地調試,也能夠方便的生成雲函數的項目並基於 demo 項目進一步的開發。SCF CLI 經過一個函數模板配置文件,完成函數及相關周邊資源的描述,並基於配置文件實現本地代碼及配置部署到雲端的過程。函數
下面咱們以一個 Serverless 項目爲例,展現 Serverless 開發工具的使用流程:
首先,安裝並配置了 SCF CLI 後,能夠經過 --help 命令查看所支持的命令,以後經過 scf init 命令快速生成一個函數 demo。在建立完畢後,能夠看到生成了 index.js 文件和template.yaml 文件。
其中,index.js 是函數的入口文件,tempate.yaml 則是經過特定的格式記錄了函數的配置信息,如內存大小,超時時間等信息。tempate.yaml 也是後續對函數進行編排和組織的關鍵。除了簡單的 init 命令以外,SCF CLI 也支持從 git 拉取代碼和一些已有的函數模板,便於客戶基於特定的場景快速開發。
在開發過程當中,開發者會選取本身熟悉的 IDE 代碼編輯器進行代碼編寫。爲了便於更快速直觀的進行本地開發和調試,經過騰訊雲 VS Code 插件支持了一鍵調試的能力。
首先,能夠打開剛建立函數的文件目錄,在插件中會自動識別這個函數。以後能夠經過 F9 進行斷點,F5 啓動調試能力。函數調試過程當中的輸出會打印在 terminal 中,而且支持單步調試,查看變量和堆棧等信息。
完成了開發和測試後,也能夠分別經過 VS Code 插件或 CLI 進行代碼的發佈。目前分別支持了zip 打包發佈,經過 COS(對象存儲)上傳併發布,以及經過 git 倉庫發佈,每次只提交增量修改的文件。在發佈完畢後,還能夠經過插件中的雲端調試,來查看在雲端的運行情況和返回日誌。
在 VS Code 插件及 CLI 中,能夠很方便的將單函數部署在雲端,那麼若是但願快速發佈多個函數時,應該怎樣操做呢?
目前也能夠直接經過 SCF CLI 的 deploy 命令來實現。只須要經過一個 template.yaml 來維護多個函數的信息便可。
除了發佈以外,還能夠經過 template.yaml 文件中的 Global 字段來定義一些函數的通用配置,從而解決開發過程當中,但願多個函數共用相同配置的痛點(例如共用相同的環境變量,超時時間和內存等,不須要重複配置)
例如,在個人工做空間下,有兩個函數「hellotinatest234」以及「testscflinux」需批量部署上傳,而且兩個函數使用公共配置。則能夠在 template.yaml 中分別定義兩個函數的屬性,而且定義 Global 字段指定公共配置。部署過程和 yaml 的樣式以下:
除了開發流程以外,在生產環境異常時,也能夠經過 CLI 的 logs --tail 等命令,快速靈活地進行日誌查詢等,而且能夠配合 grep awk 等工具使用。當發佈新版本時,採用 tail 模式能夠實時打印雲端日誌,方便開發者快速查看問題。
最後是雲函數的 DevOps 能力。目前已經支持了和 Jekins,Coding 和藍鯨平臺等對接。而且還在持續對 Coding 平臺作更深度的整合,提供開箱便可用的 DevOps 能力。
隨着 Serverless 生態的逐步完善,工具能夠覆蓋的場景會愈來愈多。例如,能夠在本地模擬 API 網關的請求,或是經過集成經常使用的測試框架,對函數進行單元測試和總體性測試等。開發者也有更廣闊的空間能夠去參與其中,構建一個面向 Serverless 的開發架構。
後續開發者工具會更加着重於對函數及函數週邊資源的組織方式(網關,DB 等),從項目/應用的維度出發,讓開發者能夠快速經過工具搭建一個經常使用的使用場景(如 WEB 網站,文件上傳工具等),從而更好地瞭解 Serverless 項目的組織方式。
此外,在持續集成和持續交付的對接中,開發者工具也將支持更便捷,通用的配置,便於規範開發流程,承載大型項目和核心業務。
歡迎關注: 騰訊雲 Serverless 團隊推薦閱讀:Serverless 基本概念入門
咱們專一於 Serverless 架構的最佳實踐!