はじめに
みなさん、AWS Lambda 使っていますか?
私は、始めたばかりです。
自分は C# で書きたいのでネットで情報を集めてみたのですが、ほとんどないですね。
サーバーレスアーキテクチャがまだメジャーになっていないのに、その中でマイナーな C# ですからね。
まあ、予想通り。
なので、AWS Lambda を C# で使う場合に、最初の一歩を踏み出せるようご紹介してみます。
なお、環境は以下の通りです。
- Windows 10
- Visual Studio Community 2017
- AWS Toolkit for Visual Studio
- .NET Core 2.1
AWS で IAM ユーザーを作成する
Lambda の最初の壁は、AWS の IAM ユーザーを作成しなければいけないところでしょうね。
ちょっとした関数を実行したいだけなのに、インフラに関わる部分に対処しなければいけないので。
まず、AWS へログインして IAM メニューを表示します。
そして、IAM ユーザーとして「lambda_user」を「プログラムによるアクセス」で追加します。
ポリシーは既存の「AWSLambdaFullAccess」を設定します。
確認後、ユーザーを作成します。
「アクセスキー ID」 と「シークレットアクセスキー」を控えます。
このキーは漏洩すると大変なので厳重に管理してください。
また、Lambda 関数を実行するためのロールも作成が必要です。
ロールを作成し、ロールを使用するサービスに Lambda を指定します。
ポリシーに既存の「CloudWatchFullAccess」を設定します。
ロール名とロールの説明を入力後、ロールを作成します。
これで AWS の設定は終了です。
AWS Toolkit for Visual Studio のインストール
下記サイトより、AWS Toolkit for Visual Studio をダウンロードしてインストールします。
AWS Toolkit for Visual Studio | AWS
なお、Visual Studio 2017 では .NET Core 2.1 がインストールされているので、.NET Core 2.1 のインストールは不要です。
AWS Toolkit for Visual Studio をインストール後に、Visual Studio を起動すると Lambda の設定画面が表示されるので、「アクセスキー ID」 と「シークレットアクセスキー」を入力して保存します。
Lambda 関数の作成
新規プロジェクトの作成で、「AWS Lambda Project (.NET Core)」テンプレートを選択します。
Blueprint という Lambda 関数のひな形から「Empty Function」を選択して関数を作成します。
今回作成する Lambda 関数は、デフォルトのものにちょっと手を加えてみます。
Cloud Watch Log に値を出力後、値をリターンしています。
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.Lambda.Core; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace AWSLambda1 { public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public string FunctionHandler(object input, ILambdaContext context) { var hello = "Hello, Lambda!!"; Console.WriteLine(hello); return hello; } } }
Lamda 関数の実行
Lambda 関数を実行するには、Lambda 関数を AWS にアップロードする必要があります。
Visual Studio でプロジェクトを右クリックして表示される「Publish to AWS Lamba」をクリックします。
「Function Name」に適当な内容を入力します。
「Role Name」に先ほど作成した「MyLambdaRole」を指定しアップロードします。
アップロードが完了すると、Lambda 関数の実行画面が表示されるので、インプットに「test」と入力してテストを実行すると「Hello,Lambda!!」と表示されるので問題ないことが分かります。
なお、インプットに JSON の値を入力するとエラーが発生しますが、これについては別記事を作成したのでそちらをご参照ください。
また、Cloud Watch Log を確認すると、以下のようにログが出力されていたのでこちらも問題ありませんね。
2018-10-18 16:46:41: START RequestId: f3e0ec8c-d2a9-11e8-bb9a-710aeadbf1ec Version: $LATEST 2018-10-18 16:46:41: Hello, Lambda!! 2018-10-18 16:46:41: END RequestId: f3e0ec8c-d2a9-11e8-bb9a-710aeadbf1ec
おわりに
C# で Lamda 関数を書いて実行するまでをご紹介してみました。
実際の Lamda 関数は、他の AWS サービスと連携することになると思いますが、基本を押さえておくことで習得がしやすくなるのではないかと思います。