首先介紹下在本文出現的幾個比較重要的概念:
函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊 參考。
Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔
2.0 版本的 Fun,在部署這一塊做了很多努力,并提供了比較完善的功能,能夠做到将雲資源友善、平滑地部署到雲端。但該版本,在本地開發上的體驗,還有較多的工作要做。于是,我們決定推出 Fun Init 彌補這一處短闆。
Fun Init: Fun Init 作為 Fun 的一個子指令存在,隻要 Fun 的版本大于等于 2.7.0,即可以直接通過
指令使用。Fun Init 工具可以根據指定的模闆快速的建立函數計算應用,快速體驗和開發函數計算相關業務。官方會提供常用的模闆,使用者也可以自定自己的模闆。
fun init
背景
阿裡雲函數計算是事件驅動的全托管計算服務。通過函數計算,您無需管理伺服器等基礎設施,隻需編寫代碼并上傳。函數計算會為您準備好計算資源,以彈性、可靠的方式運作您的代碼,并提供日志查詢、性能監控、報警等功能。借助于函數計算,您可以快速建構任何類型的應用和服務,無需管理和運維。而且,您隻需要為代碼實際運作所消耗的資源付費,代碼未運作則不産生費用。
當我們寫 nodejs 函數時,函數往往會依賴很多第三方依賴,這樣導緻函數代碼少則幾十兆,多則上百兆。代碼包太大,會有如下問題:
- 可能會導緻沒法成功上傳代碼到函數計算服務,因為函數計算服務對代碼包大小是有限制的,壓縮後最大不能超過 50 MB,解壓後最大不能超過 250 MB
- 會導緻冷啟動時間是變大,因為下載下傳代碼的過程變大了
- 每次更新代碼時間變大
另外,函數計算目前隻支援 nodejs8 和 nodejs6 這兩個版本,這兩版本不支援 es6 文法,但是我們可能已經寫習慣了 es6 文法該怎麼辦呢?
熟悉 nodejs 的同學應該知道,項目工程化管理工具 webpack,我們完全可以通過 webpack 将 es6 代碼編譯成 es5,并且剪切打包壓縮成一個 js 檔案,然後将該 js 檔案上傳到函數計算中運作。
快速開始
我這裡提供了一個 fun 模闆,幫助快速搭建一個函數計算 nodejs 項目骨架,支援 es6 代碼編譯成 es5,并且剪切打包壓縮成一個 js 檔案,然後将該 js 檔案上傳到函數計算中運作。操作作步驟如下:
1. 安裝 node
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash
nvm install 8
2. 安裝 fun 工具
npm install @alicloud/fun -g
fun 工具的某些子指令可能會用到 docker,是以你需要安裝好 docker,具體參考文檔:
Fun 安裝教程3. 通過 fun 模闆生成項目骨架
fun init -n demo https://github.com/muxiangqiu/fc-skeleton-nodejs8.git
項目生成好後,在根目錄下有個 README.md 檔案,閱讀該檔案可以幫你快速了解項目骨架為你做了什麼,以及相關的指令。具體詳情:
README.md4. 安裝依賴
cd demo # 切換到項目根下面,後面的所有指令,都是在項目根下面執行
npm install
注意:有少數特殊 npm 子產品的安裝可能會依賴目前系統環境,為了能正确安裝函數運作時的系統環境的 npm 子產品,可以通過
fun install
指令來實作,比如 puppeteer,具體參考:
開發函數計算的正确姿勢 —— 安裝第三方依賴5. 編譯
# 生産編譯
npm run build
# 開發編譯(這種編譯方式不會進行代碼混淆,并且生成 source map 資訊,友善開發調試)
npm run dev
6. 本地運作函數
fun local invoke demo/demo
7. 運作調試函數
運作調試之前,請先用
npm run dev
指令編譯源碼,然後以調試的方式運作函數:
fun local invoke -d 3000 demo
程式會提示你輸入函數的 event,如果你不需要輸入,可以按
ctrl+d
跳過輸入,接下來,并不會繼續往下執行,隻有 vs code 的連接配接上來後,程式才會繼續執行。如何通過 vs code 連上來,并開始調試呢?如下圖所示:
8. 部署函數到雲端
部署函數的時候需要用到 AK 等下資訊,可以通過
fun config
來配置,如果配置過請忽略,部署函數指令如下:
fun deploy
小結
通過函數項目工程化,可以讓我們的函數代碼體積變得更加小,代碼可能由 100 MB 左右降到 KB 級别,不管是冷啟動延時,還是代碼的更新上傳效率,都有了極大的提升。另外,你也可以根據你自己的業務場景定義你自己的 fun 模闆。