開發函式計算的正確姿勢 使用互動模式安裝依賴

2021-10-02 03:52:23 字數 3348 閱讀 8440

函式計算(function compute): 函式計算是乙個事件驅動的服務,通過函式計算,使用者無需管理伺服器等運**況,只需編寫**並上傳。函式計算準備計算資源,並以彈性伸縮的方式執行使用者**,而使用者只需根據實際**執行所消耗的資源進行付費。函式計算更多資訊參考。

fun: fun 是乙個用於支援 serverless 應用部署的工具,能幫助您便捷地管理函式計算、api 閘道器、日誌服務等資源。它通過乙個資源配置檔案(template.yml),協助您進行開發、構建、部署操作。fun 的更多文件參考。

備註: 本文介紹的技巧需要 fun 版本大於等於 3.0.0-beta.1 。本專案是在 macos 下開發的,涉及到的工具是平台無關的,對於 linux 和 windows 桌面系統應該也同樣適用。在開始本例之前請確保如下工具已經正確的安裝,更新到最新版本,並進行正確的配置。

fun 和 fcli 工具依賴於 docker 來模擬本地環境。

對於 macos 使用者可以使用 homebrew 進行安裝:

windows 和 linux 使用者安裝請參考:

安裝好後,記得先執行fun config初始化一下配置。

注意, 如果你已經安裝過了 fun,確保 fun 的版本在 3.0.0-beta.1 以上。

函式計算以 zip 壓縮檔案格式作為約定的交付物,交付物通常包含**和依賴庫檔案。這些依賴庫檔案通常分為系統依賴(使用 apt-get 包管理安裝的庫)和語言執行時依賴(使用語言相關的包管理器如 npm、pip 安裝的庫)。

通常情況下系統依賴和環境相關,比如我們希望在函式裡呼叫 brotli 命令解壓檔案,如果我們在開發機 mac 上,使用brew install brotli安裝了 brotil 命令,然後打包發布到函式計算平台是無法執行的。有時候即使開發機是 linux 也不一定可以。這是因為通過系統提供的包管理工具安裝的可執行程式和動態鏈結庫與系統的型別和版本強相關。不同系統上安裝的這些程式和檔案不具備可移植性。

通常情況下語言依賴是平台無關的,比如說使用npm install jszip安裝乙個 nodejs 依賴,該依賴可以執行在不同的作業系統和不同的 nodejs 版本下。語言平台上的依賴通常是可移植的,單也有例外的情況。如:npm install node-pty就是乙個存在原生繫結(native binding)的例子。node-pty 模組安裝過程中,依賴一些 c/c++ **,這些**會在安裝的過程中進行編譯,我們知道 c/c++ **雖然也具備平台移植性,但是其編譯產物是不可移植的。

fun 2.0 版本支援依賴安裝 dsl 檔案 fun.yml,fun.yml 為依賴安裝提供了批量模式。日常開發提供了一種命令模式,如:fun install --package-type pip tensorflow。在 fun 3.0 中我們提供了一種全新的 dsl 檔案 funfile。funfile 可以理解為 dockerfile 的語法子集,讓熟悉 docker 的開發者可以快速上手。

但是無論是 fun.yml 或 funfile,以及命令模式,對於開發者都有乙個痛點。那就是不知道環境裡當前的狀態:

已經安裝的軟體有哪些

某個目錄下有些什麼檔案

檔案的內容以及屬性是什麼

開發者需要可以互動的沙箱環境。該功能在 fun 2.0 中沒有,使用者常常使用fcli sbox命令作為替代,或者直接使用 fc-docker 專案提供的映象啟動乙個 container。docker run --rm -it -v $(pwd):/code aliyunfc/runtime-python2.7:build bash但是這些複雜的命令和引數需要使用者具備足夠的 docker 背景知識以及對函式計算工作原理的了解。

為了更好的解決上述問題,提公升使用者的開發體驗,我們在 fun 3.0 中提供了fun install sbox子命令。

下面以專案 pyzbar_example 為例, pyzbar_example 專案包含如下檔案

其中 template.yml 檔案內容如下

在 template.yml 所在的專案目錄執行 fun install sbox,其中引數

如果 template.yml 檔案並不存在,或者 template.yml 配置檔案內的函式尚未配置可以 使用 --runtime 引數啟動互動模式,此時當前目錄會被掛載到沙箱環境的 /code 目錄。

上面的方法適用於臨時啟動乙個 sbox 做些動手實驗的場景。

使用 fun-install 安裝 apt 和 pip 依賴

使用如下一行命令列印出 pyzbar-fun 函式的 sbox 內預裝的 deb 包。

也可以通過管道將外部命令的內容傳遞到內部

注意這裡-i引數不能省略,該引數表示接受標準輸入。

fun install sboxfcli sbox的替代工具,除了支援互動模式,沿用了指定 runtime 啟動 sbox,也實現了 fun 風格的指定函式啟動 sbox,更加便利。同時也支援內聯命令和管道等非互動模式的用法,為編寫指令碼提供了更好的支援。

開發函式計算的正確姿勢 排查超時問題

通常我們寫 bug,哦,不對,寫 時總不會一帆風順,往往各種 bug 充斥其中,即使測試有較高的 覆蓋率往往也會有漏網之魚。能寫出一些比較隱蔽或者看起來像 feature 的 bug,並且經過了測試 code review 等層層的考驗,最終 merge 到主幹,這也算的上是一種本事。這次,我們討論...

開發函式計算的正確姿勢 排查超時問題

寫不盡的 code,查不完的 bug 通常我們寫 bug,哦,不對,寫 時總不會一帆風順,往往各種 bug 充斥其中,即使測試有較高的 覆蓋率往往也會有漏網之魚。能寫出一些比較隱蔽或者看起來像 feature 的 bug,並且經過了測試 code review 等層層的考驗,最終 merge 到主幹...

開發函式計算的正確姿勢 排查超時問題

通常我們寫 bug,哦,不對,寫 時總不會一帆風順,往往各種 bug 充斥其中,即使測試有較高的 覆蓋率往往也會有漏網之魚。能寫出一些比較隱蔽或者看起來像 feature 的 bug,並且經過了測試 code review 等層層的考驗,最終 merge 到主幹,這也算的上是一種本事。這次,我們討論...