Slide 1

Slide 1 text

Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. AWSで動くプログラムを C#で書こう ~主にLambdaのお話~ 木村健一郎 2025年1月25日 JAWS-UG熊本reboot

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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でも強力 にサポートされている

Slide 6

Slide 6 text

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についてお話しします。

Slide 7

Slide 7 text

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に対応

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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; } こうなります

Slide 12

Slide 12 text

Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved. まとめ • C#はいいぞ • C#はAWSでも色々なサービスで動くぞ • 特にLambdaの対応は凄いぞ • Lambda Annotations Framework + .NET8は凄いぞ • AWSで動かすサービスのコード、ぜひC#で書いてみて!

Slide 13

Slide 13 text

Copyright © 2015-2023 ALTERBOOTH inc. All Rights Reserved.