【Alibaba Cloud】Function Compute を使ってみた Part1

# はじめに

Alibaba Cloud を使ってみようと思いましたが、まだまだ情報も少ないので自分のメモも兼ねて書いてみました。
`Function Compute`は名前から思いっきり判りやすいですがAlibaba Cloudの:zap:FaaS（AWSで言うとLambda）です。
まずは簡単に`Hello World`が動くところまで見てみたいと思います。

ちなみに2018年11月21日現在`Function Compute`がサポートしている実行環境は以下のようです。
:warning: 日本語のマニュアルだと`PHP`が記載されていなかったりところどころ古い情報のままだったりします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/31b60219-0b9f-c249-a78a-7492236c95ba.png)

## サービスの作成

Alibaba CloudのFaaSは「Function Compute」という名前なのでそれを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/52f58ab2-deef-bf3d-9c75-ae7be11c398a.png)

初回にはサービスの有効化が必要なようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/96f543fa-9709-ae3c-205b-819032ad7df6.png)

サービスを購入するという扱いになるようですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/7d9d63af-de4c-ffda-e87f-2698865ce334.png)

ちなみに購入履歴をみるとまだ何も動かしてないので費用は掛かっていないようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/3b499b4a-b968-2c80-10f8-f0344f6ae2ac.png)

コンソールに戻って「Function Compute」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/262c6ceb-4f8f-486f-ac86-1ed25884ebb7.png)

ちゃんと日本語でメニューが表示されまし・・・おや・・・？
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/a4a2b496-2c91-760d-885e-73dd9cc7a72f.png)

リージョン選択っぽい所が中国語になっているようです。
おもむろにリロードしてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/216cfe9a-9866-2869-e0d8-c938f7aa0884.png)

日本語になったようですね・・・若干表示されてるリージョンが違いますが・・・
まぁ、気にしないでおきましょう。:flag_jp:日本リージョンを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/06895f9c-99a8-b5bd-00e9-f4329527081a.png)

「サービスの作成」をしてみます。
:book:公式ドキュメントによると以下の記載があります
[サービスの作成](https://jp.alibabacloud.com/help/doc-detail/51924.htm)

> サービスは、Function Compute のリソースを管理するための単位です。承認、ログ設定、関数作成などの操作をサービスで実行できます。サービス内のすべての関数は、設定を共有します。コンソールまたはコマンドラインツールを使用すると、簡単にサービスを作成できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/13c97c15-1e43-d547-6034-7aedb4aab7b0.png)

「詳細設定」があるので開いてみましょう。
:tools:「サービス名」以外の項目はあとから設定変更が可能な項目です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/a5855f92-8fa4-19f3-a489-d30a0b10307d.png)

### ネットワーク設定
デフォルトでは「インターネットアクセス」がONになっています。
このパラメータは***「このサービスがパブリックネットワークにアクセスできるかどうか」***を設定しています。
:warning: ***「このサービスに」***では無いのでご注意ください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/4fd5f837-b46b-7c57-f35b-68f2478e5508.png)

### VPC設定
デフォルトでは「VPCを設定しない」になっています。
VPC内のリソースへのON/OFFを設定できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/90592a06-51d0-95df-7ccc-1662d9926105.png)

### ログ設定
`Log Service `を使ってサービスのログを確認できるようにする機能のようです。
全くログが見れないのか確認してみたいので今回は有効化せずに進めてみたいと思います。

:warning: ドキュメントに以下の記載がありました。Log Service 課金の対象になるようです。

> 注意：作成されたログ設定は Alibaba Cloud Log Service を使用します。Log Service は特定のリソース予約料金を請求します。つまり、ログを書き込まなくても、少なくともJPY1.15/日を支払う可能性があります。詳細については、Log Service 課金の説明 をご参照ください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/81217222-32ba-2907-c80b-6a87a2127071.png)


### ロール設定

Alibaba Cloud には RAM (Resource Access Management) という機能があります。
AWS IAM と同じ様なものだと・・・
デフォルトは「新しいロールを作成」になっているのでこのまま進んでみたいと思います。

> 各サービスは、RAM ロール (サービスロール) に関連付けられています。サービスの作成または更新時に、サービスのロールを指定できます。ロールに付与された許可によって、サービス内の関数を実行するときに、Function Compute が実行できる操作が決定されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/62bd4d6f-581a-557a-26e1-764ae3583c64.png)

ということで詳細設定はデフォルトの状態で「作成」してみたいと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/32169e68-8464-84e2-adf1-3cd6498d6f3f.png)

少しするとこの様な画面が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/6775004d-dc41-4d17-7fb9-1068556050d9.png)

「詳細設定」の編集を押してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/1c2f942f-be7a-1fd3-a61d-4dc09ff66a05.png)

作成時と同じ様に設定できる画面が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/b3f88294-dc91-394c-5037-609a4977d9a3.png)

## 関数の作成
作成したサービスの中に「関数の作成」があるのでそれを選択して関数を作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/9cf8b5bf-88f0-e43c-cee2-da0cf6131441.png)

### 関数テンプレート
なんだか見たことがあるような気がする画面です。
今回はお試しなので「空の関数」から作ってみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/d03409ba-65a5-dd37-4877-d35e84c9f1cd.png)

### トリガーの設定
いくつかトリガーが設定できます。今回は「トリガーなし」を使います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/9adb011c-2ee1-f95d-5b89-78f74c975198.png)

### 関数の設定
「関数名」の設定は必須です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/1ed285f0-3e60-0911-1d7e-eeaf332ad402.png)

ランタイム環境の設定で`ハンドラ`,`メモリ`,`タイムアウト`が設定可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/6fb6310e-3519-83ed-cafb-6a15cec39150.png)

[Document Center > Function Compute > Limits](https://jp.alibabacloud.com/help/doc-detail/51907.htm)
制限事項は以下のようになっています

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/65695b3c-e440-a3bd-30f7-6aea66128559.png)

### 関数の許可の設定
サービス作成のところで出てきたロールの設定がココに関係しているようですね。
関数作成時にロールがないと作ろうとするようです。
とりあえずそのまま
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/134250e7-2d02-e622-d916-44d018115086.png)

この段階でRAMのコンソール画面を見ると確かにロールがまだありません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/70787230-ccde-23fe-c970-be1cb6ac318c.png)

### 関数の作成
問題なければ「作成」します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/a446ce08-b8ca-6d4a-f8b6-7f5d9f81ad7a.png)

関数が作成されました。ちゃんとインラインで編集もできますね。
「実行」してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/78dfdb52-1c8a-6628-2f89-a418ef41714c.png)

・・・何も起きない・・・？
と思いきや下にスクロールします。無事に成功したようです。:tada:
一応、手動で実行した時のログは確認できるようですね。
:warning: 数時間経過後に確認したところ結果以下のデータは消えていたので手動実行の結果のみココで見れるようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/0a3032eb-2396-80aa-10d3-8be46f853d74.png)

しばらくして「概要」タブに行くと呼び出し回数やリソース使用量が更新されてました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/4a05d2a4-3b7d-d21d-4448-57e9f67cb1b9.png)

関数プロパティの「編集」を選択すると「関数の設定」が編集可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/aa622b08-ab5b-511b-6ba2-6e0b3a27814a.png)

`ランタイム`からランタイムの変更も可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/a4d808eb-e362-3181-a338-428414899514.png)

`メモリ`も変えてみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/b3ee0b69-561b-e3f1-907b-6987ce87a31e.png)

Maxが3072MBのようですね・・・・・・・ん？

[ドキュメントセンター > Function Compute > 関数の構成 > 関数の作成](https://jp.alibabacloud.com/help/doc-detail/52077.htm)
> MemorySize (オプション): 関数の実行に必要なメモリリソース (MB単位) です。メモリサイズの範囲は 128 〜 1536 MB で、64 MB 刻みです。

あれ？1536MB・・・英語のマニュアルを見てみましょう。

[Document Center > Function Compute > Create Functions > Create a function](https://www.alibabacloud.com/help/doc-detail/52077.htm)
> (Optional) MemorySize: Indicates the memory required for function execution, in MB. The value of this property is in the range of 128 to 3072 and increases at increments of 64.

うん。日々サービスは進化しているということですね:thumbsup:


変更してみると`ランタイム`、`メモリ`は直ぐに変更されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/ca2ba6d0-73c6-d593-2f56-f93b745f8747.png)



## ログは？
そういえば、単体実行のログはでているようですが・・・
「Log」タブの状態も見てみましょう。

・・・うん、まぁ想定通りです。
以下の表示があるので`Log Service`とロールを設定してあげれば見れるのでしょう。
ココは別の記事にしよう。

> FC automatically stores function logs into Log Service if the service has Log Service project and logstore configured. Users can view logs by the following ways:

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11547/f0235296-f75a-8c81-a5ab-6b7e2274bd56.png)

# おわりに

とりあえず今回はココまで、次はログとかトリガーとかその辺を見てみようかな？

はじめて使ってみましたが、AWS Lambdaを使ったことがあれば直感的に理解できるような感じですね。
初回のみ個々のサービスを有効化しないといけないのは不用意に課金されないようにと言う意図なのかな？

日本語化もちゃんと出来ており、意味がわからないというような部分も無かったので（一瞬表示が変でしたが）普通に使ってみてくださいね。