12月にAWS LambdaがC#でも使えるようになって、Serverlessでも1.4.0からC#用のテンプレートが提供されましたが、プロジェクトファイルは別で準備しないといけなかったり、ちょっと不便でした。
ところが、AWS SDKでServerless用のプロジェクトテンプレートが提供されていましたので、改めて使ってみました。
プロジェクトの作成
Visual Studioを立ち上げてプロジェクトの新規作成から「AWS Serverless Application(.NET Core)」を作成します(プロジェクト名はAWSServerlessとします)。
肝はserverless.template
で、デプロイするLambdaの設定値やトリガとなるイベントなどを定義します。
サンプルではAPI GatewayでのGetリクエストをトリガとする1個のLambdaが定義されています。
{ "AWSTemplateFormatVersion" : "2010-09-09", "Transform" : "AWS::Serverless-2016-10-31", "Description" : "An AWS Serverless Application.", "Resources" : { "Get" : { "Type" : "AWS::Serverless::Function", "Properties": { "Handler": "AWSServerless::AWSServerless.Functions::Get", "Runtime": "dotnetcore1.0", "CodeUri": "", "MemorySize": 256, "Timeout": 30, "Role": null, "Policies": [ "AWSLambdaBasicExecutionRole" ], "Events": { "PutResource": { "Type": "Api", "Properties": { "Path": "/", "Method": "GET" } } } } } }, "Outputs" : { } }
デプロイ
AWSServerlessプロジェクトを右クリックして、「Publish AWS Lambda...」をクリックするとデプロイ用の画面が開きます。
試しにtest-stack
と適当に決めてPublishすると、Visual Studio上でCloudFormationと同じようなウィンドウが表示され、たちまちS3へのアップロード、IAMの設定、LambdaとAPI Gatewayの作成とそれらの紐付けが行われます。
test-stack
の作成が完了し、URLにブラウザからアクセスしてみると、Hello AWS Serverless
と表示されます。
AWSコンソールからtest-stack
を作成できたことを確認できます。
まとめ
サンプルそのままとは言え、Visual Studio内で完結してノーエラーで環境構築ができたので、個人的にはかなり驚きました。
CloudWatch、DynamoDB、Kinesisともそのうち連携させてみたいと思います。