天天看點

開發函數計算的正确姿勢——運作 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/