開發函式計算的正確姿勢 —— 依賴安裝方法一覽

大濤學長發表於2019-09-24

1. 前言

首先介紹下在本文出現的幾個比較重要的概念:
函式計算(Function Compute): 函式計算是一個事件驅動的服務,透過函式計算,使用者無需管理伺服器等執行情況,只需編寫程式碼並上傳。函式計算準備計算資源,並以彈性伸縮的方式執行使用者程式碼,而使用者只需根據實際程式碼執行所消耗的資源進行付費。函式計算更多資訊 參考Fun: Fun 是一個用於支援 Serverless 應用部署的工具,能幫助您便捷地管理函式計算、API 閘道器、日誌服務等資源。它透過一個資源配置檔案(template.yml),協助您進行開發、構建、部署操作。Fun 的更多文件 參考
如何在函式計算中安裝依賴,一直是一個困擾使用者的難題。我們寫過很多文章,也推出很多功能,都是為了解決使用者安裝依賴“痛”的問題。
*備註:請確保 Fun 工具版本在 3.0.0+

2. 依賴安裝方法一覽

我們曾寫過一系列文章介紹如何安裝函式依賴,這次,我們從使用者需求的視角對這些安裝方式進行簡單分類,以便於使用者可以根據自己的需求,尋找到正確的解決方法。

2.1 使用者需求一:我就想安裝一個庫到函式,能不能不讓我理解 pip、apt-get 等包管理工具的複雜概念?

fun install 支援這種安裝方式,使用方法為,安裝到某個函式下程式碼目錄下,只需要在 template.yml 所在的目錄執行:
  1. 安裝 apt-get 依賴: fun install -f functionName -p apt libzbar0
  2. 安裝 pip 依賴: fun install -f functionName -p pip flask
-p 指的是安裝的庫型別,現在支援 pip、apt 兩種。因為這兩種型別的庫安裝難度是比較大的。那麼對於 npm、maven 這些庫,怎麼裝? 往下看
另外,-f functionName 指的是會將依賴安裝到這個函式目錄下。如果想安裝依賴到當前目錄也是支援的,可以透過 fun install -h 檢視更多幫助資訊或者閱讀 《開發函式計算的正確姿勢 —— 安裝第三方依賴》

2.2 使用者需求二:我想裝的庫,安裝步驟比較複雜,我只知道怎麼在 linux 伺服器上裝,函式計算能否提供相同的安裝體驗?

透過 Fun 3.0 提供的 fun innstall sbox 可以做到這一點。
使用方法為,在 template.yml 所在的目錄,執行如下命令:
fun install sbox -f pyzbar-fun -i
其中 -f pyzbar-fun 指的是 template.yml 宣告的一個函式。
執行完成後,就會進入一個用於安裝依賴的互動式環境。這個互動式環境其實是一個函式計算的模擬環境,在這個環境上裝的依賴,可以在最大程度上保證,部署後,不會出現因為環境差異導致的相容問題。
在這個環境裡,常見的 linux 命令都是可以使用的,比如 apt-get、pip、npm 等等。只不過,在安裝 apt-get 以及 pip 庫時,需要新增 fun-install 字首。比如原先裝一個包的步驟為 pip install flask,那在這個環境中,只需要新增 fun-install 字首就好了,也就是 fun-install pip install flask。
注意: 直接在互動環境使用 pip 也是可以的,只不過,透過原生命令 pip 安裝的依賴都會被安裝到系統目錄裡,退出互動式環境時,這些依賴不會保留下來。而透過 fun-install 安裝的依賴會被安裝到程式碼目錄,退出互動式命令時,可以被保留下來。
互動式安裝依賴的更多幫助資訊,請參考 《開發函式計算的正確姿勢——使用互動模式安裝依賴》

2.3 使用者需求三:我是 node/java/php/c# 使用者,我想裝一些庫,怎麼裝?

npm 的庫安裝本身就比 python、apt-get 的庫容易很多。原因是 npm install 後,會直接安裝在專案目錄的 node_modules 裡,只要打包的時候,也就是將 template.yml 中的 CodeUri 指向 node_modules 所在的目錄就好了。更多資訊 參考
java 庫安裝思路為在 maven 宣告依賴,然後在打包時,將所有依賴都打包到同一個 jar 中,然後部署就可以了。更多資訊 參考
php 以及 c# 的思路其實都是類似的,可以參考 php 的文件以及 c# 的文件

2.4 使用者需求四:裝完後,有沒有辦法“錄製”下來,再次需要的時候,可以一鍵安裝?

2.5 使用者需求五:我的安裝比較複雜,即使在本地,我也不知道要怎麼裝,你們有什麼方案嗎?

這種場景,其實並沒有統一的解決方案,只能 case by case 的解決。目前,我們已經積累了一些解決方案,基本上都是“開箱即用”的。可以參考 Fun 主頁的 “第三方模板”章節。
可以閱讀下我們的 《函式計算安裝依賴庫方法小結》,這個是原理性文章,包括我們推出的一些功能,都是基於這裡介紹的原理來實現的。
如果依舊沒能解決問題,可以去我們的 部落格裡扒一扒,也許有意外收穫。

3. 總結

上面介紹了一些常見的依賴安裝的問題以及相關的解決方案。

本文作者:tanhe123
本文為雲棲社群原創內容,未經允許不得轉載。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947441/viewspace-2658072/,如需轉載,請註明出處,否則將追究法律責任。

相關文章