Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSで動くプログラムをC#で書こう ~主にLambdaのお話~

AWSで動くプログラムをC#で書こう ~主にLambdaのお話~

2025/1/25に開催されたイベント「JAWS-UG熊本リブート」でお話しした内容です。
発表から公開可能な部分のみアップしています。

Ken'ichirou Kimura

January 25, 2025
Tweet

More Decks by Ken'ichirou Kimura

Other Decks in Technology

Transcript

  1. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. AWSで動くプログラムを C#で書こう

    ~主にLambdaのお話~ 木村健一郎 2025年1月25日 JAWS-UG熊本reboot
  2. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. 名前 :木村健一郎

    所属 :株式会社オルターブース JAWS-UG福岡 SORACOM UG九州 娘ちゃんのパパ(7歳6ヶ月) お仕事:IoT番長 受賞歴:AWS Samurai 2019 APJ Commnity Award 2023(Ownership) SORACOM MVC 2021,2023 好きなAWSサービス :Lambda、App Runner、IoT Core 気になる.NET :.NET nanoFramework SNS : @show_m001
  3. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C#、ご存じですか? •

    Windowsでしか動かない奴でしょ? • Windowsアプリ作る奴だよね? • ASP.NETって、ActiveServerPages?
  4. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C#、ご存じですか? •

    Windowsでしか動かない奴でしょ? → それは.NET Frameworkです。現在の.NET(旧.NET Core) はLinuxでも動きます • Windowsアプリ作る奴だよね? → Windowsアプリ「も」作れます。サーバサイドもクライア ントも色々作れます • ASP.NETって、ActiveServerPages? → C#でWebアプリを作るときのフレームワークの名前です
  5. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C#は・・ •

    マルチスレッド対応で、非同期処理の実現が容易 • 静的型付け言語 • 活発なコミュニティ • Semantic Kernelなど最近のLLMを活用するフレームワークも 充実 • The modern, innovative, open-source programming language for building all your apps • Microsoft製品との親和性が高いのは事実だが、AWSでも強力 にサポートされている
  6. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C# on

    AWS C#のプログラム(主にサーバサイド)をAWSで動かす方法 • EC2(Windows/Linux) • ECS,EKS,App Runner(コンテナ) • Elastic Beanstalk(Windows/Linux) • Lambda 特に今日はLambdaについてお話しします。
  7. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C# on

    AWS Lambda • 公式にランタイムをサポート • カスタムランタイムやコンテナではなく、ネイティブ対応 • 正確に言うとサポートしているのは.NETのランタイムなのでF#も動 く • 最新のLTS(現在は.NET8)に対応 • ただし、多少リリースから正式サポートまで時間はかかっている • .NET8は2023/11に発表されたが、正式サポートは2024/3だった • AOT(Ahead of Time)コンパイラによるネイティブバイナリに 対応 • 最大で起動時間が86%短縮 • SnapStartに対応
  8. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. C#でのLambda関数の書き方 関数ハンドラーの書き方はいくつかあります

    • クラスライブラリハンドラー • 実行可能アセンブリハンドラー • Lambda Annotations Framework 今回は最新の.NET8に対応した、Lambda Annotations Framework を紹介しようと思います。 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/csharp- handler.html
  9. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. Lambda Annotations

    Frameworkとは • .NET8用のフレームワーク • Amazon.Lambda.Annotationsパッケージをnugetで導入して 使う • 通常のC#のプログラミングモデルで書いたコードを簡単に置 き換えられる • 例えばMinimal APIなどで書いたもの
  10. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. public APIGatewayHttpApiV2ProxyResponse

    LambdaMathAdd(APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context) { if (!request.PathParameters.TryGetValue("x", out var xs)) { return new APIGatewayHttpApiV2ProxyResponse { StatusCode = (int)HttpStatusCode.BadRequest }; } if (!request.PathParameters.TryGetValue("y", out var ys)) { return new APIGatewayHttpApiV2ProxyResponse { StatusCode = (int)HttpStatusCode.BadRequest }; } var x = int.Parse(xs); var y = int.Parse(ys); return new APIGatewayHttpApiV2ProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = (x + y).ToString(), Headers = new Dictionary≪string, string> { { "Content-Type", "text/plain" } } }; } リクエストのパスパラメータをチェック して、xを取得 なければBadRequestを返す リクエストのパスパラメータをチェック して、yを取得 なければBadRequestを返す x + yの結果をBodyに入れて、200 OKを返 す Content-typeはtext/plain
  11. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. [LambdaFunction] [HttpApi(LambdaHttpMethod.Get,

    "/add/{x}/{y}")] public int Add(int x, int y) { return x + y; } こうなります
  12. Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. まとめ •

    C#はいいぞ • C#はAWSでも色々なサービスで動くぞ • 特にLambdaの対応は凄いぞ • Lambda Annotations Framework + .NET8は凄いぞ • AWSで動かすサービスのコード、ぜひC#で書いてみて!