KEMBAR78
Introducing C# in AWS Lambda | PPTX
【 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
#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.Json
Serializer)]
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.html
30
#aws_serverless
ご参加ありがとうございました
31
#aws_serverless32

Introducing C# in AWS Lambda