はのちゃ爆発

はのちゃが技術ネタとか日常のこととかを書いてます。

【俺のメモ】 C# で Serverless Application を作成する手順

後でQiitaにも書く。

0. 前提条件

1. Serverless プロジェクトの新規作成

メニューの「ファイル」=>「新規作成」=>「プロジェクト」を開く。以下のウィンドウが表示される。

f:id:hano_tea:20170108123024p:plain

"AWS Serverless Application" を選択し、プロジェクト名などを決めて "OK" を押すと次の画面に進む。

2. 空の Serverless プロジェクトの作成

プロジェクト新規作成画面で "OK" を押すとこの画面になる。

f:id:hano_tea:20170108123054p:plain

使いたいプロジェクトのテンプレートを選択できる。 今回は空のプロジェクトを作成したいので "Empty Serverless Application" を選んでプロジェクトを作成する。

3. 作成された Serverless プロジェクト

作成された Serverless プロジェクトが以下のようなもの。

f:id:hano_tea:20170108123113p:plain

表示しているのはメインのファンクションを記述するファイル "Function.cs" 。

プロジェクト名と同じ名前空間が定義され、その内部に Functions というクラスが定義される。 クラス内には二つのメソッドが定義されている。

  • Functions
  • Get

"Functions" は Lambda の実行時に呼ばれるコンストラクタ的なもの。

GetAPIGatewayProxyResponse クラスのインスタンスを返すメソッド。 実装は以下のようになっている。

public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context)
{
    context.Logger.LogLine("Get Request\n");

    var response = new APIGatewayProxyResponse
    {
        StatusCode = (int)HttpStatusCode.OK,
        Body = "Hello AWS Serverless",
        Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }
    };

    return response;
}

非常にシンプル。リクエストを受け取ったことをロギングし、 その後 APIGatewayProxyResponse クラスのインスタンスを作成している。

APIGatewayProxyResponse は3つのメンバ、

  • StatusCode
  • Headers
  • Body

があるので、それぞれに適当な値をセットしてインスタンスを作成し、作成したインスタンスreturn している。

(参考: aws-lambda-dotnet/APIGatewayProxyResponse.cs at master · aws/aws-lambda-dotnet · GitHub

4. AWS にデプロイ

特にコードを書き換えたり設定を変えたりしなくても、この時点で Servrless アプリケーションとして動くようになっている。

f:id:hano_tea:20170108194319p:plain

ソリューションエクスプローラ上でプロジェクトを右クリックし、"Publish to AWS Lambda" をクリックするとデプロイ(パブリッシュ?)できる。

f:id:hano_tea:20170108195133p:plain

"Profile" ではアカウントやリージョンを適切なものに設定する。 "Build Settings" は現状だと特にいじる必要はなさそう。

"CloudFormation Settings" は 単純な Lambda Function では無かった設定。 Serverless は Lambda Function 以外にも各種AWSサービスを使用するが、それらもまとめて面倒見てくれる。

その際に、まとめて面倒見てくれる "CloudFormation" の設定に名前を付ける必要があるので、ここではその名前をつける。

"S3 Bucket" はおそらく初期値として適当な S3 の Bucket が設定されている…はず?なのでそのままでいい。 もちろん新しい Bucket を作成してもいい。

設定が終わったら "Publish" をクリックすると、 Serverless のデプロイが行われ、各種必要なAWSサービスがセットアップされる。

5. 動作確認

デプロイが開始されると以下のようなセットアップの進行状況を確認できる画面が表示される。

f:id:hano_tea:20170108214723p:plain

"Status" に現在の Serverless アプリケーションの状態が表示される。 "hogehoge_COMPLETE" というステータスであればデプロイに成功していることを示す。 (一度デプロイしてしまった都合で "UPDATE" になっていますが、初回は別のステータスだった気がします。)

デプロイに成功した状態で "AWS Serverless URL" に表示されているリンクを踏むと、稼働している Serverless アプリにアクセスすることができる。

f:id:hano_tea:20170108214942p:plain

6. まとめ

以上、とりあえず Visual Studio を使って C# Serverless Application を作る手順まとめでした。 あとは Function.cs にほしい機能を実装していけばいい、という感じかと。

エンドポイントの追加方法などはまだわかっていないので、今後も調査と実際の開発を続けてやっていきます。 まずは画像処理 Function を作成していくつもり。