introducing c# in aws lambda

32
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

Upload: atsushi-fukui

Post on 16-Apr-2017

673 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Introducing C# in AWS Lambda

【 AWS re:Invent 2016 Serverless Follow Up 】 Introducing C# in AWS Lambda

Amazon Web Services Japan K.K.Solutions ArchitectAtsushi Fukui2016.12.08

Page 2: Introducing C# in AWS Lambda

#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

Page 3: Introducing C# in AWS Lambda

#aws_serverless

Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ

3

Page 4: Introducing C# in AWS Lambda

#aws_serverless

Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ

4

Page 5: Introducing C# in AWS Lambda

#aws_serverless

持続的スケーリングサーバーの管理不要 実行時のみ課金待機時間は無料

AWS Lambda のメリット

Page 6: Introducing C# in AWS Lambda

#aws_serverless

リクエストごとの課金

• 実行時間 100 ミリ秒ごとに 21 マイクロセント

• アイドルタイムは課金なし

無料トライアル100 万リクエストかつ 毎月 400,000 GB のコンピュータリソースまで

Page 7: Introducing C# in AWS Lambda

AWS Lambda の利用

• 独自開発コードの持ち込み

• Node.js 、 Java 、 Python、 C#

• 独自ライブラリの実行

シンプルなリソースモデル• 128MB から1.5GBまで処

理能力を選択• CPU とネットワークをメ

モリと比例して割り当て• 実際の利用状態をレポートフレキシブルな認可• VPC を含むリソースへのセ

キュアなアクセス権限の割り当て

• 誰がファンクションをコール可能かを詳細な粒度で制御

フレキシブルな利用• メソッド呼び出し、またはイベント駆動• 他の AWS サービスとの連携• 全体をサーバーレス エコシステムで構築

Page 8: Introducing C# in AWS Lambda

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 への組み込みログ機能

Page 9: Introducing C# in AWS Lambda

#aws_serverless

Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ

9

Page 10: Introducing C# in AWS Lambda

#aws_serverless

AWS Lambda for C# とは

• .NET Core で動作– Win32 API や COM コンポーネントは呼べません

• Visual Studio に統合された環境を利用できます– AWS Tools for Visual Studio 最新版をインストールして

ください

• dotnet CLI ベースの開発も可能です– Mac や Linux 上で開発できます

10

Page 11: Introducing C# in AWS Lambda

#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

Page 12: Introducing C# in AWS Lambda

#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

Page 13: Introducing C# in AWS Lambda

#aws_serverless

Lambda 関数ハンドラ( C# )

• クラスの静的またはインスタンス メソッドとして定義可能

• Context オブジェクトを利用する場合は、メソッド パラメータとして ILambdaContext 型を指定

13

returnType handler-name(inputType input, ILambdaContext context) { ... }

Page 14: Introducing C# in AWS Lambda

#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 インスタンス

Page 15: Introducing C# in AWS Lambda

#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

Page 16: Introducing C# in AWS Lambda

#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

Page 17: Introducing C# in AWS Lambda

#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"     }    } }

Page 18: Introducing C# in AWS Lambda

#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){}

Page 19: Introducing C# in AWS Lambda

#aws_serverless

C# Lambda の作成

• C# のメソッドを Lambda 関数として実行するためには、 AWS Lambda に対してハンドラ文字列を渡す必要がある– ” アセンブリ :: タイプ :: メソッド”

19

Page 20: Introducing C# in AWS Lambda

#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

Page 21: Introducing C# in AWS Lambda

#aws_serverless

AWS Lambda C# Project Template

21

Page 22: Introducing C# in AWS Lambda

#aws_serverless

AWS Labmda C# Blue Print

22

Page 23: Introducing C# in AWS Lambda

#aws_serverless

Publish to AWS Lambda

23

Page 24: Introducing C# in AWS Lambda

#aws_serverless

Publish to AWS Lambda

24

Page 25: Introducing C# in AWS Lambda

#aws_serverless

ローカル環境で Lambda C# コードのデバッグ

25

Page 26: Introducing C# in AWS Lambda

#aws_serverless

Demo

26

Page 27: Introducing C# in AWS Lambda

#aws_serverless

Agenda• AWS Lambda とは• AWS Lambda for C# 概要• まとめ

27

Page 28: Introducing C# in AWS Lambda

#aws_serverless

まとめ

• AWS Lamdba が C# で記述できるようになりました!

• .NET Core で動作します!

• Visual Studio と統合されたツールで開発できます!

• ぜひ使ってみてください!

Page 29: Introducing C# in AWS Lambda

#aws_serverless

Let‘s develop Serverless Application!!

29

Page 31: Introducing C# in AWS Lambda

#aws_serverless

ご参加ありがとうございました

31

Page 32: Introducing C# in AWS Lambda

#aws_serverless32