AWS Lambda で C# が使えるようになったので早速試してみた

AWS Lambda が C# をサポートしました。

https://aws.amazon.com/jp/about-aws/whats-new/2016/12/aws-lambda-supports-c-sharp/

にわかC#erとしては試さざるを得ないと思い、とりあえずさっくりと動かしてみました。


## 用意するもの

### 前提

- Windows 端末
- Visual Studio
    - VS 2015 Enterprise Update 3 にて動作を確認。
    - Community でもいける…はず。確かめてはいない。

### 記事中でインストールするもの

- [AWS Toolkit for Visual Studio](https://aws.amazon.com/jp/visualstudio/)
- [.NET Core](https://www.microsoft.com/net/core#windowsvs2015)


※ Mac 用の Visual Studio がリリースされたのでそれでも行けるかな？と思いましたが、
現時点では VS for Mac 用の AWS Toolkit が見当たらないので厳しそうです。


## 使ってみる

AWS の Credential は発行済みで、アクセスキーの類を持っている前提。
持っていない方は公式ドキュメントの以下のページあたりを見て作成してください。

http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/setup.html


### AWS Toolkit のインストール

Visual Studio を起動し、メニューのツール->拡張機能と更新プログラムを開きます。
左メニューでオンラインを選択し、右上の検索窓にAWSなどと入力すると、
AWS Toolkit for Visual Studioが出てくるので、ダウンロードボタンを押します。

![aws-toolkit-01.png](https://qiita-image-store.s3.amazonaws.com/0/70758/51c20cf5-832a-42d4-5eb6-6a273cb758ad.png)

ちなみにVSを開かないでAWS Toolkit for Visual Studioを直接ググってもダウンロードできます。お好きな方でどうぞ。

ダウンロードページでAWS Toolkit for Visual Studioのインストーラをダウンロードしたら、そのままインストールします。
特に気を付けることはなく、普通に画面の指示に従ってインストールするだけで大丈夫です。

インストール出来たら、VSを起動していた場合は一回立ち上げなおしておきましょう。
先ほどの拡張機能と更新プログラムを開くと、無事インストールされていることが確認できます。
（特に確認する必要はないですが）

![installed.png](https://qiita-image-store.s3.amazonaws.com/0/70758/38504acd-4f4f-8da6-4c71-72b0efab092f.png)


### .NET Core のインストール

これで早速 Lambda Function が作れる！…と思ったらそうもいきませんでした。
Windows環境下でも.NET Coreのインストールが必須で、入れない状態だと以下のようなエラーが出てプロジェクトの作成に失敗します。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/70758/42ad260e-157b-f7ff-6b8a-377a0229d264.png)

なので、.NET Coreを先に入れます。

https://www.microsoft.com/net/core#windowsvs2015

上記サイト内の手順2、Install the .NET Core tools preview for Visual Studio までやれば大丈夫です。
これもインストーラをダウンロードして、普通にインストールするだけです。


### AWS Lambda Project の作成

さて、いよいよ C# で AWS Lambda Function を作る作業に入ります。
と言っても、AWS Toolkit for Visual Studio に用意されているテンプレートを使うだけで簡単に作成できてしまいます。

![select-project.png](https://qiita-image-store.s3.amazonaws.com/0/70758/0f6514e0-43bd-95e9-3657-df8ec378ee41.png)

新しいプロジェクトの作成で、テンプレート内の Visual C# 以下に AWS Lambda という項目があるので、
それを選択すると上記の画像のようなテンプレート選択画面になります。
今回は一番上の AWS Lambda Project(.NET Core) を使います。
名前や場所、ソリューション名などはご自由にどうぞ。そのままでも構いません。

OK を押せばあとは自動的に Lambda Function with C# なプロジェクトが出来上がります。素晴らしいですね。


### Lambda Function を AWS にデプロイする

実際の処理はプロジェクト内の `Function.cs` に記述していきますが、今回は特にいじらずに行きます。
デフォルトでは入力された値を全角文字に変換して出力するような Lambda Function になっており、
このままデプロイしてもちゃんと動作するようになっています。

デプロイするには、ソリューションエクスプローラ上でプロジェクトを右クリックし、`Publish to AWS Lambda...`をクリックします。

![init.png](https://qiita-image-store.s3.amazonaws.com/0/70758/1d37f0b2-916c-f5ad-2444-36514aa6c878.png)

`Publish to AWS Lambda...`をクリックすると、以下のようなウィンドウが現れます。

![add-aws-account.PNG](https://qiita-image-store.s3.amazonaws.com/0/70758/d58fc322-c4fc-3512-86c4-db86a75f6047.png)

ここで AWS に Lambda Function をアップロードする際に必要な認証情報などを入力します。
`Account profile to use` の右にある人のアイコンをクリックすると上の画像のような新たなフォームが出てきます。
Profile Name は好きな名前を、Access Key ID と Secret Access Key には IAM の Credential を入力してください。
残りの2つはそのままで構いません。

画像では隠れてしまっている元のウィンドウでの設定ですが、
Function Name には好きな Lambda Function の名前を入力し、それ以外はそのままの設定で大丈夫です。
名前を入れたら Next を押して次に進みます。


#### Lambda Function の詳細設定

![function-settings.PNG](https://qiita-image-store.s3.amazonaws.com/0/70758/b7a84247-26a4-2731-3db6-48ee698507c7.png)

作成した Lambda Function の詳細設定です。
IAM role の設定やメモリ使用量、タイムアウト時間の設定などが行えます。
他にもVPSの設定や環境変数の設定などもできますが、今回は触れません。

Lambda用の IAM role を作成していない場合、適当な IAM role をここで作成することができます。

![select-role.PNG](https://qiita-image-store.s3.amazonaws.com/0/70758/173f4919-49e3-d5d0-86f5-333bfec42f98.png)

見切れてて申し訳ないですが、 `New Role Based on AWS Managed Policy` を選択すると、
AWSが用意してくれたいい感じの IAM Role を作成できます。
もちろん既に用意した IAM Role も選択できますので、適宜選択してください。

今回は例として、一番スタンダードな `AWSLambdaRole` で新しい Role を作ることにします。

Roleの選択が終わったら Upload を押しましょう。AWS に Lambda Function がアップロードされます。


### アップロードした Lambda Function を動かしてみる

無事アップロードが終わったら以下のような画面になると思います。

![test.PNG](https://qiita-image-store.s3.amazonaws.com/0/70758/284f3cd8-d6cd-ae58-9a23-469d3dddaa68.png)

この画面から Lambda Function の動作テストを行うことができます。
試しに左の Sample Input 内に `'hello, c#!'` などと打って Invoke してみましょう。
右側の Response に `"HELLO, C#!"` と表示され、画面下部の Log output に実行時の諸情報が表示されているはずです。

これで C# で書いた AWS Function を動かすことができました。

ちなみに、AWS マネジメントコンソールから Lambda の管理画面に行くと、
（当たり前ですが）VSで作成、アップロードした Lambda Function が確認できます。


### まとめ

非常に簡単な手順を踏むだけで Lambda Function を C# で書いて動かすことができました。

今回はVSと AWS Toolkit for Visual Studio を使って作成しましたが、
.NET Core CLI から Lambda Function を作成することもできるようです。
そちらであれば Mac でも C# で Lambda Function を作ることができる…はず？

お手軽さでは今回の方法が一番だと思われますが、CLIで作成する方法も試してみたいですね。