開發函數計算的正確姿勢——運行 R 語言程序

前言

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情況,只需編寫代碼並上傳。函數計算準備計算資源,並以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息參考
Fun: Fun 是一個用於支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日誌服務等資源。它通過一個資源配置文件(template.yml),協助您進行開發、構建、部署操作。Fun 的更多文檔參考

備註: 本文介紹的技巧需要 Fun 版本大於等於 2.10.1。

依賴工具

本項目是在 MacOS 下開發的,涉及到的工具是平臺無關的,對於 Linux 和 Windows 桌面系統應該也同樣適用。在開始本例之前請確保如下工具已經正確的安裝,更新到最新版本,並進行正確的配置。

Fun 和 Fcli 工具依賴於 docker 來模擬本地環境。

對於 MacOS 用戶可以使用 homebrew 進行安裝:

brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli

Windows 和 Linux 用戶安裝請參考:

  1. https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
  2. https://github.com/aliyun/fcli/releases

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

注意, 如果你已經安裝過了 fun,確保 fun 的版本在 2.10.1 以上。

$ fun --version
2.10.1

快速開始

初始化

使用 fun init 命令可以快捷地將本模板項目初始化到本地。

fun init vangie/rlang-example

本地測試

測試代碼 index.py 的內容爲:

import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri

def handler(event, context):  
    pandas2ri.activate()
    return str(robjects.r('paste0("1 + 1 = ", 1 + 1)'))

上面的代碼 import 了 rpy2 ,用 R 語言執行了一個簡單的加法運算。使用 fun local 命令可以本地測試一下函數。該步驟依賴本地環境正確安裝了 docker。

$ fun local invoke onePlusOne
skip pulling image aliyunfc/runtime-python3.6:1.4.0...
['1 + 1 = 2']

RequestId: 6e1f2402-9443-4392-9f6a-d87b4f79887a      Billed Duration: 7543 ms      Memory Size: 1998 MB      Max Memory Used: 123 MB

部署

$ fun deploy
using region: cn-shanghai
using accountId: ***********4733
using accessKeyId: ***********KbBS
using timeout: 60

Waiting for service rlang to be deployed...
    Waiting for function onePlusOne to be deployed...
        Waiting for packaging function onePlusOne code...
        package function onePlusOne code done
    function onePlusOne deploy success
service rlang deploy success

執行

$ fcli function invoke -s rlang -f onePlusOne
['1 + 1 = 2']

編譯 R 語言

預編譯好的 R 語言環境、rpy2 庫以及相關的 apt 依賴文件已經放置在 .fun 目錄下了,正常使用不用自行編譯 R 語言,編譯一次在 MacBook Pro 15 上大概需要半個小時左右。假如當前的 R 語言的編譯選項不滿足業務需求可以參考一下 fun.yml 文件,該文件有完整的編譯和安裝方法,進行適當調整後使用 fun install 命令安裝即可。

參考閱讀

  1. https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source
  2. https://cran.r-project.org/sources.html
  3. https://rpy2.readthedocs.io/en/version_2.8.x/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章