introducing c# in aws lambda
TRANSCRIPT
【 AWS re:Invent 2016 Serverless Follow Up 】 Introducing C# in AWS Lambda
Amazon Web Services Japan K.K.Solutions ArchitectAtsushi Fukui2016.12.08
#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
#aws_serverless
Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ
3
#aws_serverless
Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ
4
#aws_serverless
持続的スケーリングサーバーの管理不要 実行時のみ課金待機時間は無料
AWS Lambda のメリット
#aws_serverless
リクエストごとの課金
• 実行時間 100 ミリ秒ごとに 21 マイクロセント
• アイドルタイムは課金なし
無料トライアル100 万リクエストかつ 毎月 400,000 GB のコンピュータリソースまで
AWS Lambda の利用
• 独自開発コードの持ち込み
• Node.js 、 Java 、 Python、 C#
• 独自ライブラリの実行
シンプルなリソースモデル• 128MB から1.5GBまで処
理能力を選択• CPU とネットワークをメ
モリと比例して割り当て• 実際の利用状態をレポートフレキシブルな認可• VPC を含むリソースへのセ
キュアなアクセス権限の割り当て
• 誰がファンクションをコール可能かを詳細な粒度で制御
フレキシブルな利用• メソッド呼び出し、またはイベント駆動• 他の AWS サービスとの連携• 全体をサーバーレス エコシステムで構築
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 への組み込みログ機能
#aws_serverless
Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ
9
#aws_serverless
AWS Lambda for C# とは
• .NET Core で動作– Win32 API や COM コンポーネントは呼べません
• Visual Studio に統合された環境を利用できます– AWS Tools for Visual Studio 最新版をインストールして
ください
• dotnet CLI ベースの開発も可能です– Mac や Linux 上で開発できます
10
#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
#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
#aws_serverless
Lambda 関数ハンドラ( C# )
• クラスの静的またはインスタンス メソッドとして定義可能
• Context オブジェクトを利用する場合は、メソッド パラメータとして ILambdaContext 型を指定
13
returnType handler-name(inputType input, ILambdaContext context) { ... }
#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 インスタンス
#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
#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
#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" } } }
#aws_serverless
JSON シリアライゼーション
• シリアライザを属性として指定– アセンブリレベル
– メソッドレベル
18
[assembly: Amazon.Lambda.Core.LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
[LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer)]Employee GetEmployee(int empNo){}
#aws_serverless
C# Lambda の作成
• C# のメソッドを Lambda 関数として実行するためには、 AWS Lambda に対してハンドラ文字列を渡す必要がある– ” アセンブリ :: タイプ :: メソッド”
19
#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
#aws_serverless
AWS Lambda C# Project Template
21
#aws_serverless
AWS Labmda C# Blue Print
22
#aws_serverless
Publish to AWS Lambda
23
#aws_serverless
Publish to AWS Lambda
24
#aws_serverless
ローカル環境で Lambda C# コードのデバッグ
25
#aws_serverless
Demo
26
#aws_serverless
Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ
27
#aws_serverless
まとめ
• AWS Lamdba が C# で記述できるようになりました!
• .NET Core で動作します!
• Visual Studio と統合されたツールで開発できます!
• ぜひ使ってみてください!
#aws_serverless
Let‘s develop Serverless Application!!
29
#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.html30
#aws_serverless
ご参加ありがとうございました
31
#aws_serverless32