Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducing C# in AWS Lambda

872 views

Published on

Introducing C# in AWS Lambda (Japanese)

Published in: Software
  • Be the first to comment

Introducing C# in AWS Lambda

  1. 1. 【 AWS re:Invent 2016 Serverless Follow Up 】 Introducing C# in AWS Lambda Amazon Web Services Japan K.K. Solutions Architect Atsushi Fukui 2016.12.08
  2. 2. #aws_serverless 自己紹介 名前:福井 厚(fatushi@) 所属:アマゾン ウェブ サービス ジャパン株式会社 技術本部エンタープライズ ソリューション部 ソリューション アーキテクト 経歴: メーカーサポート、ソフトハウス、SIベンダー(国産、外資)、開発系コンサルティング ファームを経て 2015年7月よりアマゾン ウェブ サービス ジャパン株式会社でソリューション アーキテクトとして活動。 2008年8月、Microsoft Certified Architect for Solutions Certification (MCA) に認定される。 マイクロソフトMVPアワード受賞歴11回(2015年7月にMVP 終了) C#を愛し、.NETが大好きなエンジニアとして .NET開発者向けにAWSを普及する活動を実施中。 好きなAWSサービス: AWS Lambda(C#)、AWS IoT、AWS CodeX、 AWS Step Functions
  3. 3. #aws_serverless Agenda • AWS Lambda とは • AWS Lambda for C#概要 • まとめ 3
  4. 4. #aws_serverless Agenda • AWS Lambda とは • AWS Lambda for C#概要 • まとめ 4
  5. 5. #aws_serverless 持続的スケーリングサーバーの管理不要 実行時のみ課金 待機時間は無料 AWS Lambda のメリット
  6. 6. #aws_serverless リクエストごとの課金 • 実行時間100ミリ秒ごと に21マイクロセント • アイドルタイムは課金 なし 無料トライアル 100万リクエストかつ 毎月 400,000 GBのコン ピュータリソースまで
  7. 7. AWS Lambda の利用 • 独自開発コードの持ち 込み • Node.js、Java、Python、 C# • 独自ライブラリの実行 シンプルなリソースモデル • 128MBから1.5GBまで処理能 力を選択 • CPUとネットワークをメモリと 比例して割り当て • 実際の利用状態をレポート フレキシブルな認可 • VPCを含むリソースへのセ キュアなアクセス権限の割り 当て • 誰がファンクションをコール可 能かを詳細な粒度で制御 フレキシブルな利用 • メソッド呼び出し、またはイベ ント駆動 • 他のAWSサービスとの連携 • 全体をサーバーレス エコシス テムで構築
  8. 8. AWS Lambda の利用 • プログラミング モデル • AWS SDK 組み込み (Python and Node.js, .NET Core) • Eclipse plugin (Java) • Visual Studio (C#) ステートレス • Amazon DynamoDB、S3、 ElastiCache などに状態を保 存 • インフラストラクチャに紐付か ない 編集機能 • コンソールで直接編集 • Zipでパッケージ化したコード をアップロードまたはS3 • Visual Studio またはEclipse でコードを編集 • コマンドライン ツール モニタリングとロギング • リクエスト、エラー、レイテン シー、スロットリングに対する 組み込みのメトリクス • Amazon CloudWatch Logs への組み込みログ機能
  9. 9. #aws_serverless Agenda • AWS Lambda とは • AWS Lambda for C#概要 • まとめ 9
  10. 10. #aws_serverless AWS Lambda for C#とは • .NET Core で動作 – Win32 API や COMコンポーネントは呼べません • Visual Studio に統合された環境を利用できます – AWS Tools for Visual Studio 最新版をインストールして ください • dotnet CLIベースの開発も可能です – Mac や Linux 上で開発できます 10
  11. 11. #aws_serverless dotnet core環境の構築 • .NET Core 最新版のインストール https://www.microsoft.com/net/core • AWS Tools for Visual Studio 最新版のインストール https://aws.amazon.com/visualstudio/?nc1=h_ls 11
  12. 12. #aws_serverless AWS サービス イベント オブジェクト(POCO) • AWSの各サービス用のイベント オブジェクト • Amazon.Lambda.APIGatewayEvents • Amazon.Lambda.CognitoEvents • Amazon.Lambda.ConfigEvents • Amazon.Lambda.DynamoDBEvents • Amazon.Lambda.KinesisEvents • Amazon.Lambda.S3Events • Amazon.Lambda.SNSEvents 12
  13. 13. #aws_serverless Lambda関数ハンドラ(C#) • クラスの静的またはインスタンス メソッドとし て定義可能 • Contextオブジェクトを利用する場合は、メ ソッド パラメータとしてILambdaContext型を 指定 13 returnType handler-name(inputType input, ILambdaContext context) { ... }
  14. 14. #aws_serverless Context オブジェクト(ILambdaContext) 14 プロパティ 値 MemoryLimitInMB Lambda関数に設定したメモリ制限(MB) FunctionName 実行しているLambda関数名 FunctionVersion 実行しているLambda関数のバージョン InvokedFunctionArn このLambda関数を実行しているソースのARN AwsRequestId AWSリクエストID。AWSサポートへの問い合わせに利用可能 LogStreamName CloudWatch Logのストリーム名。CloudWatchへの許可がないIAMの場合 はnullを返す LogGroupName CloudWatch Logのグループ名。CloudWatchへの許可がないIAMの場合 はnullを返す ClientContext Mobile SDKから実行した場合のクライアント アプリとデバイスの情報 Identity Mobile SDKから実行した場合のAmazon Cognito Identityの情報 RemainingTime 関数の残り実行時間をTimeSpan型で返す Logger Lambda Logger インスタンス
  15. 15. #aws_serverless AWS Lambda (C#)は以下のライブラリを提供 • Amazon.Lambda.Core – static Lambda.Logger、Serializationインターフェイス、context オブ ジェクト(Lambda関数の実行時情報)を提供 • Amazon.Lambda.Serialization.Json – Selializationインターフェイスの実装 • Amazon.Lambda.Logging.AspNetCore – ASP.NET用ロギング ライブラリ • 上記ライブラリはすべてNuget パッケージから取得可能 – https://www.nuget.org/packages/ 15
  16. 16. #aws_serverless Lambdaメソッドのシグニチャ • デフォルトではSystem.IO.Stream型をサポート • それ以外の型はシリアライザが必要 • シグニチャの例 – public Stream RunLambda(Stream inputStream); – public string RunLambda(string inputString); – public MyResponse RunLambda(MyRequest request); • POCO in(イベント オブジェクトを含む), POCO out – public void RunLambda(MyRequest request); – public async Task<MyResponse> RunLambda(...); • 非同期呼び出し • 但し、Labmdaは戻り値を無視する(void にすることも可能だがasync voidは未サ ポート) 16
  17. 17. #aws_serverless JSON シリアライゼーション • パラメータ型をJSONからマッピング – アセンブリのdependancyをproject.jsonに指定 17 { "version": "1.0.0-*", "dependencies":{ "Microsoft.NETCore.App": { “type”: “platform”, “version”: “1.0.1” }, "Amazon.Lambda.Serialization.Json": "1.0.0” }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" } } }
  18. 18. #aws_serverless JSON シリアライゼーション • シリアライザを属性として指定 – アセンブリレベル – – メソッドレベル 18 [assembly: Amazon.Lambda.Core.LambdaSerializer(typeof(Amazon.Lambda. Serialization.Json.JsonSerializer))] [LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.Json Serializer)] Employee GetEmployee(int empNo){}
  19. 19. #aws_serverless C# Lambdaの作成 • C#のメソッドをLambda関数として実行するた めには、AWS Lambdaに対してハンドラ文字列 を渡す必要がある – ”アセンブリ::タイプ::メソッド” 19
  20. 20. #aws_serverless ロギング機能 • Global Logging の利用 Amazon.Lambda.Core.LambdaLogger.Log("Logging information"); • ILambdaContext内のLoggingを利用 ambdaContext.Logger.Log("Logging information"); • Consoleの利用 Console.Write / Console.WriteLine – すべてのConsole出力はCloudWatchの保存される 20
  21. 21. #aws_serverless AWS Lambda C# Project Template 21
  22. 22. #aws_serverless AWS Labmda C# Blue Print 22
  23. 23. #aws_serverless Publish to AWS Lambda 23
  24. 24. #aws_serverless Publish to AWS Lambda 24
  25. 25. #aws_serverless ローカル環境でLambda C#コードのデバッグ 25
  26. 26. #aws_serverless Demo 26
  27. 27. #aws_serverless Agenda • AWS Lambda とは • AWS Lambda for C#概要 • まとめ 27
  28. 28. #aws_serverless まとめ • AWS Lamdba が C# で記述できるようになりまし た! • .NET Core で動作します! • Visual Studio と統合されたツールで開発できま す! • ぜひ使ってみてください!
  29. 29. #aws_serverless Let‘s develop Serverless Application!! 29
  30. 30. #aws_serverless Appendix:参考資料 • AWS LambdaのC#サポートの発表 https://aws.amazon.com/jp/blogs/news/announcing-c- sharp-support-for-aws-lambda/ • AWS Lambda プログラミング モデル http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ programming-model-v2.html • Programming Model for Authoring Lambda Functions in C#(英語) http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ dotnet-programming-model.html 30
  31. 31. #aws_serverless ご参加ありがとうございました 31
  32. 32. #aws_serverless32

×