本文へスキップ
BecomeCoder

C#実践コース · 第9章 AWS SDK for .NET · レッスン55

AWS Lambda で C# を動かす(サーバーレス)

ローカル実施

導入

AWS Lambdaは、サーバーを管理せずにコードを実行できるサーバーレスの仕組みです。C#のメソッドをアップロードすると、イベント(HTTPリクエスト、S3へのアップロード、SQSメッセージ等)に応じて自動で実行されます。使った分だけ課金され、スケールも自動です。

図解

flowchart LR
    EV["イベント<br/>API Gateway / S3 / SQS"] -->|トリガー| L["Lambda関数(C♯)<br/>あなたのメソッドが実行される"]
    L --> OUT["結果を返す / 他サービスを呼ぶ"]
    style L fill:#e8f5e9

サンプル(読み物)

using Amazon.Lambda.Core;

// [assembly: LambdaSerializer(...)] などの設定は省略
public class Functions
{
    // このメソッドがLambdaのエントリポイント。inputはイベントのデータ
    public string Handler(string input, ILambdaContext context)
    {
        // ILambdaContext はログや残り時間などの実行情報を持つ
        context.Logger.LogInformation($"受信: {input}");
        return $"こんにちは、{input}さん";
    }
}
  • Lambdaは「イベントで起動するメソッド」を書く。Handlerがエントリポイント
  • 引数inputにイベントのデータ、ILambdaContextに実行情報(ログ・残り時間)が渡る
  • サーバー管理不要自動スケール使った分だけ課金が利点
  • 起動のたびに立ち上がる特性上、初回起動の遅延(コールドスタート)に注意
  • デプロイはAWS Toolkit for Visual Studio、またはdotnet lambdaツールで行う

詳細手順

  1. Visual StudioにAWS Toolkit拡張を入れ、AWS Lambda Project (.NET)テンプレートで作成する(またはスターター147-aws-lambda/starter.zip
Visual StudioのAWS Lambdaプロジェクトテンプレート選択と、Publish to AWS Lambdaメニュー
AWS Toolkit:Lambdaプロジェクトの作成とデプロイ
  1. Handlerメソッドを実装し、右クリック → Publish to AWS Lambda でデプロイする
  2. AWSコンソールのLambdaでテストイベントを送り、結果とログ(CloudWatch)を確認する

まとめ

  • Lambdaはサーバー管理不要でC#メソッドを実行するサーバーレス基盤
  • Handlerメソッドがイベントで起動、ILambdaContextで実行情報を得る
  • 自動スケール・従量課金が利点、コールドスタートに注意

次章: C#でブロックチェーン(Ethereum)を扱う方法へ進みます。