Rアプリケーションを実行してFunction Computeを開発する方法

このチュートリアルでは、Rアプリケーションを実行して**Function Compute**を開発する方法を学びます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/develop-function-compute-by-running-r-applications_595254)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#背景
まず、Alibaba Cloudの[Function Compute](https://www.alibabacloud.com/ja/products/function-compute)がありますが、これはイベント駆動型のサービスで、ユーザーはサーバーの健全性を管理したり、その他の要因を考慮することなくコードを書いたりアップロードしたりすることができます。Function Computeは、ユーザーのコードを実行するために必要なコンピューティングリソースの量を準備し、自動的にスケーリングします。ユーザーは、コードを実行するために必要なリソースのみを支払うことになります。

次に、サーバーレスアプリケーションのためのデプロイメントツールである[Fun](https://github.com/alibaba/funcraft/blob/master/README-en.md?spm=a2c65.11461447.0.0.2abd13danal8zX&file=README-en.md)があります。これは、Function Compute、[API Gateway](https://www.alibabacloud.com/ja/product/api-gateway)、[Log Service](https://www.alibabacloud.com/ja/product/log-service)などのリソースを管理するのに役立ちます。Funを使用して、`template.yml`ファイルに指定したリソースを記述することで、リソースの開発、ビルド、デプロイを行うことができます。

注意: この記事で説明したテクニックは、Fun 2.10.1 以降に適用されます。

#ツール
このチュートリアルでは、Rアプリケーションを実行して関数計算を開発する方法について説明します。このチュートリアルで概説されているプロジェクトはmacOS上で開発されていますが、LinuxやWindowsと互換性のあるプラットフォームに依存しないツールも含まれています。この例に進む前に、[Docker](https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c65.11461447.0.0.2abd13danal8zX&url=https://www.docker.com/)、[Fun](https://github.com/alibaba/funcraft/blob/master/README-en.md?spm=a2c65.11461447.0.0.2abd13danal8zX&file=README-en.md)、[Fcli](https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c65.11461447.0.0.2abd13danal8zX&url=https://github.com/aliyun/fcli)が正しくインストールされ、最新バージョンにアップデートされ、適切に設定されていることを確認してください。これらのツールのダウンロード、アップデート、設定は、ここにリンクされているページの指示とリソースで行うことができます。

FunとFcliはローカル環境をシミュレートするためにDockerに依存しています。MacOSユーザーは、これらのツールをインストールするために[homebrew](https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c65.11461447.0.0.2abd13danal8zX&url=https://brew.sh/)を使用することができます。

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

Windows と Linux ユーザーは、これらのツールのインストール方法については、[Installation]() を参照してください。インストール後、最初に `fun config` を実行して設定を初期化することを忘れないでください。

注意: 既にFunをインストールしている場合は、バージョン2.10.1以上であることを確認してください。

```
$ fun --version
2.10.1
```

#R アプリケーションの実行
まずはプロジェクトを初期化します。`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)'))
```

前述のコードは、`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`コマンドを使ってアプリケーションをデプロイします。

```
$ 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](https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c65.11461447.0.0.2abd13danal8zX&url=https://github.com/vangie/rlang-example/tree/master/%7B%7BprojectName%7D%7D/.fun)ディレクトリの下に置かれています。通常、自分でコンパイルする必要はありません。私自身の経験では、コンパイルには毎回30分程度かかります。既存のR言語のコンパイルオプションがビジネスの要件を満たすことができない場合は、コンパイルとインストール方法の完全なリストを提供する[fun.yml](https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c65.11461447.0.0.2abd13danal8zX&url=https://github.com/vangie/rlang-example/blob/master/%7B%7BprojectName%7D%7D/fun.yml)ファイルを見ることができます。それに応じていくつかの調整を行い、`fun install` コマンドを使ってインストールを完了させることができます。

#参考文献
1、[ソースからRを構築する](https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source?spm=a2c65.11461447.0.0.2abd13danal8zX)
2、[Rソース](https://cran.r-project.org/sources.html?spm=a2c65.11461447.0.0.2abd13danal8zX)
3、[rpy2に関するドキュメント](https://rpy2.readthedocs.io/en/version_2.8.x/?spm=a2c65.11461447.0.0.2abd13danal8zX)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*