71
Going Serverless, Build Applications with No Servers Keisuke Nishitani (@Keisuke69) Amazon Web Services Japan K.K. Jul 17th, 2016

Going Serverless, Building Applications with No Servers

Embed Size (px)

Citation preview

Page 1: Going Serverless, Building Applications with No Servers

Going Serverless, Build Applications with No Servers

Keisuke Nishitani (@Keisuke69)Amazon Web Services Japan K.K.

Jul 17th, 2016

Page 2: Going Serverless, Building Applications with No Servers

ProfileKeisuke NishitaniSolutions Architect, Amazon Web Service Japan K.K

@Keisuke69 Keisuke69

✤ ソリューションアーキテクト✤ クラウドを使ったアプリ開発とかモバイル開発の話しをよくします

✤ モバイルニンジャ1号機✤ RESTおじさん✤ Lambda Wizards

✤ 餃⼦の王将エヴァンジェリスト(⾃称)✤ ⾳楽が好きです、フジロッカーです、今年も⾏きます

✤ でもサマソニも毎年⾏きます✤ ⼩説⼤好き、マンガ⼤好き、空想好き✤ ブログ: http://keisuke69.hatenablog.jp/

Keisuke69 Keisuke69Keisuke69x

Page 3: Going Serverless, Building Applications with No Servers

What is the Server?

Page 4: Going Serverless, Building Applications with No Servers

The box in which applications run

Page 5: Going Serverless, Building Applications with No Servers

What is responsible for the business logic?

Page 6: Going Serverless, Building Applications with No Servers

Application

Page 7: Going Serverless, Building Applications with No Servers

Undifferentiated Heavy Lifting

Page 8: Going Serverless, Building Applications with No Servers

Undifferentiated Heavy Lifting付加価値を⽣まない重労働

Page 9: Going Serverless, Building Applications with No Servers

付加価値を⽣まない重労働の例✤ サーバ構築

✤ OSのセットアップとネットワークなどの設定✤ ランタイムやミドルウェアのセットアップ

✤ インフラの運⽤管理✤ キャパシティ✤ スケーラビリティ✤ 耐障害性✤ モニタリングやロギング✤ セキュリティパッチの適⽤

✤ スロットリング

✤ ビジネスの差別化には直接繋がらない機能の実装✤ 認証

✤ Opsとの軋轢✤ 低いデプロイ頻度

Page 10: Going Serverless, Building Applications with No Servers

Serverless freesapplication developersfrom these concern.

Page 11: Going Serverless, Building Applications with No Servers

What is Serverless Computing?

Page 12: Going Serverless, Building Applications with No Servers

AWSのComputeサービス

Amazon EC2 Amazon ECS AWS Lambda

スケールの単位インスタンス アプリケーション ファンクション

抽象化ハードウェア OS ランタイム

使いドコロ

Page 13: Going Serverless, Building Applications with No Servers

AWSのComputeサービス

Amazon EC2 Amazon ECS AWS Lambda

スケールの単位インスタンス アプリケーション ファンクション

抽象化ハードウェア OS ランタイム

使いドコロ • OS、ネットワーク、ストレージのレベルで構成を制御したい

• 好みのOSを利⽤したい

• OS以上の全てを⾃分でコントロールしたい

• サーバを⾃分で構成して実⾏したい

• アプリケーションの構成を制御したい

• スケールを⾃分でコントロールしたい

• 必要なときだけコードの実⾏を⾏いたい

• インフラの構成・管理を⾏いたくない

Page 14: Going Serverless, Building Applications with No Servers

AWSのComputeサービス

Amazon EC2 Amazon ECS AWS Lambda

スケールの単位インスタンス アプリケーション ファンクション

抽象化ハードウェア OS ランタイム

使いドコロ • OS、ネットワーク、ストレージのレベルで構成を制御したい

• 好みのOSを利⽤したい

• OS以上の全てを⾃分でコントロールしたい

• サーバを⾃分で構成して実⾏したい

• アプリケーションの構成を制御したい

• スケールを⾃分でコントロールしたい

• 必要なときだけコードの実⾏を⾏いたい

• インフラの構成・管理を⾏いたくない

Serverless

Page 15: Going Serverless, Building Applications with No Servers

AWS Lambda

Page 16: Going Serverless, Building Applications with No Servers

サーバを意識せずコードを実⾏

AWS Lambda

あらゆるスケールで⾼性能費⽤対効果が⾼く効率的

インフラ管理不要

使った分だけの⽀払いリクエスト量に応じて⾃動的に

キャパシティ調整100ms単位のコンピュート課⾦

⾃⾝のコードを持ち込み

標準的な⾔語でコードを実⾏スレッド、プロセス、ファイルやシェルスクリプトも利⽤可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけで、Lambdaが全てをハンドリング

Page 17: Going Serverless, Building Applications with No Servers

AWS Lambda✤ インフラを⼀切気にすることなくアプリケーションコードを実⾏でき

るコンピュートサービス

✤ 実⾏基盤は全てAWSが管理

✤ 他のAWSサービスと連携したイベントドリブンなアプリケーションを簡単に実装可能

✤ コード実⾏時間に対しての課⾦でありコスト効率が⾮常に⾼い

Page 18: Going Serverless, Building Applications with No Servers

AWS LambdaBYOC(Bring Your Own Code)✤Node.js、Java、Python✤カスタムライブラリも利⽤可能

(ネイティブライブラリを含む)

柔軟な認可✤VPCを含め、リソースへの

アクセスをセキュアに付与✤ファンクションを誰が呼び

出せるのかを細かく制御

シンプルなリソースモデル✤128MB〜1.5GBのメモリ選択✤それに⽐例したCPUとネット

ワークの割り当て✤実際の利⽤状況をレポート

柔軟な使⽤法✤イベントの呼び出しまたは送

信✤他のAWSサービスとの統合✤サーバーレスエコシステム全

体の構築

Page 19: Going Serverless, Building Applications with No Servers

AWS Lambdaプログラミングモデル✤ビルトインされたAWS SDK

(Python and Node.js)✤Lambdaは「Webサーバ」✤プロセス、スレッド、/tmp、

ソケットを利⽤可能

ファンクションの作成✤コンソール上のエディタを

使った直接編集✤ZIP形式でパッケージし、

Lambda/S3へアップロード✤Eclipse,Visual Studio向けプ

ラグイン✤コマンドラインツール

モニタリングとロギング✤リクエスト、エラー、レ

イテンシ、スロットルに関する組み込みのメトリクス

✤Amazon CloudWatch Logsへのログ出⼒

ステートレス✤Amazon DynamoDB、S3、

ElastiCacheを使ってデータを永続化

✤インフラストラクチャは気にしない(ログインできない)

Page 20: Going Serverless, Building Applications with No Servers

連携可能なAWSサービス✤ 現時点では以下のAWSサービスをサポート

✤ Amazon S3✤ Amazon Kinesis Streams✤ Amazon DynamoDB✤ Amazon Simple Notification Service✤ Amazon Echo (Alexa)✤ Amazon CloudWatch Logs✤ AWS CloudFormation✤ Amazon Cognito✤ AWS IoT✤ Amazon CloudWatch Events✤ Scheduled Event✤ Amazon API Gateway✤ Amazon Simple Email Service✤ AWS Config✤ Custom Event

Page 21: Going Serverless, Building Applications with No Servers

サーバレスのメリット✤ サーバレスはバックエンドのアウトソース

✤ サーバサイドやインフラがわからないフロントエンジニアだけでシステムを実現することも可能

✤ ⾃分の書いたコードをすぐ試せる、そのままプロダクションに持っていける✤ インフラの⼈にお願いすることが不要になる

✤ アプリの開発に多くのメリット✤ バックエンド側のコードとサーバが減るため開発運⽤コストを最⼩化✤ AWSによってマネージされ、スケーラビリティやキャパシティ、セキュリティの⼼配

が不要✤ ⾮常にコスト効率化が⾼く、多くの場合コスト減が⾒込める✤ トライ&エラーが容易

✤ 開発者がビジネスにフォーカスできる

Page 22: Going Serverless, Building Applications with No Servers

解決される課題✤ サーバ構築

✤ OSのセットアップとネットワークなどの設定✤ ランタイムやミドルウェアのセットアップ

✤ インフラの運⽤管理✤ キャパシティ✤ スケーラビリティ✤ 耐障害性✤ モニタリングやロギング✤ セキュリティパッチの適⽤

✤ スロットリング

✤ ビジネスの差別化には直接繋がらない機能の実装✤ 認証

✤ Opsとの軋轢✤ 低いデプロイ頻度

Page 23: Going Serverless, Building Applications with No Servers

解決される課題✤ サーバ構築

✤ OSのセットアップとネットワークなどの設定✤ ランタイムやミドルウェアのセットアップ

✤ インフラの運⽤管理✤ キャパシティ✤ スケーラビリティ✤ 耐障害性✤ モニタリングやロギング✤ セキュリティパッチの適⽤

✤ スロットリング

✤ ビジネスの差別化には直接繋がらない機能の実装✤ 認証

✤ Opsとの軋轢✤ 低いデプロイ頻度

不要(各サービスが適切にハンドリング)

不要( サービス/機能として提供 )

不要(サービスとして予め⽤意)

Page 24: Going Serverless, Building Applications with No Servers

やりたいことだけに集中できる

Page 25: Going Serverless, Building Applications with No Servers

ビジネスロジックだけに集中できる

Page 26: Going Serverless, Building Applications with No Servers

「何をするか」を書くだけでいい

Page 27: Going Serverless, Building Applications with No Servers

All you need is code.

Page 28: Going Serverless, Building Applications with No Servers

Serverless is a paradigm shift

Page 29: Going Serverless, Building Applications with No Servers

Serverless is a paradigm shiftインフラだけでなくアプリ開発やオペレーションを含めたパラダイムシフト

Page 30: Going Serverless, Building Applications with No Servers

誰にとって嬉しいのか?

Page 31: Going Serverless, Building Applications with No Servers

誰にとって嬉しいのか?✤ フロントエンドエンジニア

✤サーバサイドがわからないフロントエンドエンジニアだけでもサービスを実現✤シングルページアプリケーションやモバイルのバックエンドAPIとして

✤ サーバサイドエンジニア✤サーバサイドの⼀部をアウトソース✤よりコアな機能・ロジックそのものに集中

✤ インフラエンジニア✤イベントドリブンな運⽤を簡単に✤サービスとサービスを繋ぐGlue(糊)として活⽤

Page 32: Going Serverless, Building Applications with No Servers

サーバレスのパターン✤ Web & モバイルアプリケーション

✤フロントエンドエンジニア向け✤サーバサイドエンジニア向け✤いわゆるフロントエンド(SPA、モバイル)とバックエンドAPI

✤ 基盤系アプリケーション✤サーバサイドエンジニア向け✤インフラエンジニア向け✤イベントドリブンな画像変換、データ集計基盤など

Page 33: Going Serverless, Building Applications with No Servers

Serverless Web & Mobile Application

Page 34: Going Serverless, Building Applications with No Servers

従来の⼀般的なアーキテクチャ✤ブラウザアプリはサーバサイドでのHTML⽣成、モバイルはネイティブ+APIコール

✤Web/APIなどの各サーバはEC2で構築

✤ELBを配置し、オートスケーリング可能なスケーラブル構成に

✤Webサーバは冗⻑化

✤DBはRDSによるMulti AZ構成、もしくはEC2上で構築

✤EC2等のインフラは各最低1台は常時稼働

Web(EC2)

DB(RDS)

LB(ELB)

Page 35: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront

DynamoDB

Cognito

Page 36: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront

1. ブラウザアプリはJavaScriptによるSPA

DynamoDB

Cognito

1

Page 37: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

DynamoDB

Cognito

2

1

Page 38: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

DynamoDB

Cognito

2

3

1

Page 39: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront4. 認証・認可を提供するAmazon Cognito

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

DynamoDB

Cognito

2

34

1

Page 40: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront4. 認証・認可を提供するAmazon Cognito

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

5. HTTPSによるAPIを提供するAmazon API Gateway

DynamoDB

Cognito

2

34

5

1

Page 41: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront4. 認証・認可を提供するAmazon Cognito

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

5. HTTPSによるAPIを提供するAmazon API Gateway

6. 動的コンテンツを提供するAWS Lambda

DynamoDB

Cognito

2

34

5

6

1

Page 42: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront4. 認証・認可を提供するAmazon Cognito

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

5. HTTPSによるAPIを提供するAmazon API Gateway

6. 動的コンテンツを提供するAWS Lambda

DynamoDB

7. NoSQLデータストアを提供するAmazon DynamoDB

Cognito

2

34

5

6

7

1

Page 43: Going Serverless, Building Applications with No Servers

Serverless APIs

Lambda

API Gateway

その他AWSサービス

S3

CloudFront

8. 既存システムへのアクセスも当然可能

4. 認証・認可を提供するAmazon Cognito

1. ブラウザアプリはJavaScriptによるSPA

2. JavaScriptおよび静的コンテンツはS3から配信

3. CloudFrontによるコンテンツキャッシュ

5. HTTPSによるAPIを提供するAmazon API Gateway

6. 動的コンテンツを提供するAWS Lambda

DynamoDB

7. NoSQLデータストアを提供するAmazon DynamoDB

Cognito

2

34

5

6

78

1

Page 44: Going Serverless, Building Applications with No Servers

Amazon API Gateway

統⼀化されたAPIの作成と管理

APIの定義とホスティング

クラウド上のリソースへのアクセス認証におけるAWS IAMの活⽤

AWSのAuthを活⽤

バックエンド保護のためのDDoS対策やリクエス

トのスロットリング

ネットワークトラフィックの管理

Page 45: Going Serverless, Building Applications with No Servers

Amazon API Gateway複数バージョンとステージ

APIキーの作成と配布

リクエスト時におけるAWS SigV4の利⽤

リクエストのスロットリングとモニタリング

バックエンドとしてAWS Lambdaが利⽤可能

Page 46: Going Serverless, Building Applications with No Servers

Amazon API Gateway

レスポンスをキャッシュ可能

CloudFrontを利⽤したレイテンシの軽減とDDoS対策

iOS、AndroidとJavaScript向けSDKの⾃動⽣成

Swaggerのサポート

Request / Responseにおけるデータ変換

Page 47: Going Serverless, Building Applications with No Servers

Microservices

✤ AWS Lambda + Amazon API GatewayはMicroservicesを構成する最も簡単な⽅法

✤ イベントハンドラ✤イベントタイプごとに1つの関数

✤ サーバーレスバックエンド✤API/パスごとに1つの関数

✤ データ処理✤データ型ごとに1つの関数

Page 48: Going Serverless, Building Applications with No Servers

Serverless Microservicesの作成⽅法✤ AWS CloudFormation

✤AWS Lambda関数✤イベントハンドラ(Amazon S3、Amazon DynamoDB)✤API(Amazon API Gateway)

✤ オープンソースフレームワーク(Serverless.com)

✤ Flourish✤サーバーレスのアプリケーションモデル✤AWSが⽀援するGitHubのオープンソースプロジェクト✤今後登場予定

Page 49: Going Serverless, Building Applications with No Servers

Serverless Mobile Backend✤各クライアント向けSDKから直接操作

✤AWSアクセスに必要なCredentialはCognitoを利⽤してセキュアに取得

モバイルからダイレクトにAWSサービスを利⽤するアーキテクチャ

Android/iOSSDK

JavaScriptSDK

DynamoDB SNS S3 LambdaCognito

Credentialの取得 直接操作

Page 50: Going Serverless, Building Applications with No Servers

Real-time File Processing✤ イメージのサムネイル⽣成やビデオの変換✤ ドキュメントのメタデータをインデックス化✤ ログの処理✤ メディアコンテンツのバリデーション

元画像 サムネイル画像

1

2

31.ファイルストレージを

提供するAmazon S32.処理ロジックを提供す

るAWS Lambda

Page 51: Going Serverless, Building Applications with No Servers

Real-time Stream Processing✤ クライアントのアクティビティトラッキング✤ クリックストリーム分析✤ メトリクス⽣成✤ データクレンジング✤ ログフィルタリング✤ インデクシング✤ デバイスデータのテレメトリと測定

1.ストリームデータの保存を提供するAmazon Kinesis

2.データ処理アプリケーションとしてのAWS Lambda

Page 52: Going Serverless, Building Applications with No Servers

Extract, Transform and Load✤ データバリデーション✤ バックアップ✤ 分析

1.NoSQLデータストアを提供するAmazon DynamoDB

2.変換およびロード処理を実⾏するAmazon Lambda

3.DWHを提供するAmazon Redshift

Page 53: Going Serverless, Building Applications with No Servers

新しいアプリケーションエコシステム:Alexaアプリ + Slack = Serveless bot!

Alexa、"今からデモを送る"をSlackで送信し

スケジュールされたポーリングによりメッセージを取得

Kevinから、"成功を祈る!"

(Slack APIを使って)メッセージをアップロード

チーム(チャネルユーザー)

Slack

Page 54: Going Serverless, Building Applications with No Servers

Real-Time Message Handling

New message published

Amazon SNS AWS Lambda

Amazon SNS

Amazon Kinesis

Page 55: Going Serverless, Building Applications with No Servers

Audit CloudTrail Activity

AWS Lambda

Amazon S3Amazon CloudTrail

Amazon SNS

AWS IAM

Page 56: Going Serverless, Building Applications with No Servers

Automated Infrastructure Management

AWS Lambda

Amazon SNS

Amazon CloudWatch Alarm

ec2runInstance

ecsstartTask

beanstalkupdateApp

kinesissplitShard

Any API call

https://aws.amazon.com/blogs/compute/scaling-amazon-ecs-services-automatically-using-amazon-cloudwatch-and-aws-lambda/

Page 57: Going Serverless, Building Applications with No Servers

Forward AWS Events to External Endpoints

http://danilop.net/aws/2015/07/26/sns2ifttt/ |https://github.com/danilop/SNS2IFTTT

AWS Lambda

Amazon SNS

IFTTT via the Maker channel

Amazon CloudWatch Events

Auto Scaling

Page 58: Going Serverless, Building Applications with No Servers

Deploy Lambda Functions

https://aws.amazon.com/blogs/compute/dynamic-github-actions-with-aws-lambda/

AWS Lambda

Amazon SNS

GitHub Repo

lambda createFn ()

Page 59: Going Serverless, Building Applications with No Servers

The Serverless Compute manifesto✤ ファンクションがデプロイメントとスケーリングの単位✤ プログラミングモデルにおいて、マシン、VM、コンテナは不可視✤ 永続的なストレージはあらゆる場所に✤ リクエストごとのスケーリング。少なめ、もしくは余分にキャパシ

ティをプロビジョニングすることは不可能✤ アイドル時間は課⾦されない(コールドサーバ/コンテナはなく、コ

ストは不要)✤ 関数はどこでも実⾏できることによる暗黙的な耐障害性✤ BYOC(Bring Your Own Code)✤ メトリックとロギングは普遍的な権利

Page 60: Going Serverless, Building Applications with No Servers

サーバレスの考慮点✤ 単純にサーバの代わりとは考えない

✤ 従来の箱としてのサーバとは別物。同じように扱うことは難しい

✤ コストへの過剰な期待はやめる✤ コストの効率がいいのは事実だが、絶対的にコストが安いというものではない✤ コストだけに着⽬すると思ったような効果は得られず、失敗する

✤ 各サービスの特性を理解し、活かす✤ まずはやってみる、 やらなければ経験値はたまらない

✤ デプロイ/テストは今まで通り普通に粛々と✤ ファンクションに渡すイベントはモックで⽤意し、ローカルで単体テスト可能✤ デプロイはAPIで実⾏できるのでむしろ今までより簡単に

Page 61: Going Serverless, Building Applications with No Servers

サーバレスの考慮点✤ 全てをサーバレスにする必要はない

✤ サーバレスにすることが⽬的ではない✤ Dockerによるコンテナと使い分けたほうがいい

✤ Design for failureの考え⽅の重要性が増す✤ サービスを組み合わせて使うため、1コンポーネントのダウンがサービス全体の停⽌を

伴わないようにシステム全体を設計する✤ Fail Fast、Circuit Breaker、Graceful Degradationなど

✤ アプリ開発者は運⽤まで意識を広げること✤ 「⾃分でできる」は「⾃分で責任を持つ」の裏返し✤ インフラ運⽤は考えなくてよくなったとしてもサービスの運⽤は以前として存在する

Page 62: Going Serverless, Building Applications with No Servers

Join the serverless revolution!

Page 63: Going Serverless, Building Applications with No Servers

Appendix

Page 64: Going Serverless, Building Applications with No Servers

参考資料✤ Amazon API Gateway ドキュメント(⽇本語あります)

http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.html

✤ AWS Lambdaドキュメント(⽇本語あります)http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html

✤ API Gateway Secure Pet Storehttps://github.com/awslabs/api-gateway-secure-pet-store

Page 65: Going Serverless, Building Applications with No Servers

AWS Lambda, API Gateway, and AWS IoT regions

Availableregions

Page 66: Going Serverless, Building Applications with No Servers

Reference architecture: IoT back end using AWS Lambda and Amazon Kinesishttps://s3.amazonaws.com/awslambda-reference-architectures/iot-backend/lambda-refarch-iotbackend.pdfhttps://github.com/awslabs/lambda-refarch-iotbackend

Page 67: Going Serverless, Building Applications with No Servers

Reference architecture: Mobile back end using AWS Lambda and Amazon API Gatewayhttps://s3.amazonaws.com/awslambda-reference-architectures/mobile-backend/lambda-refarch-mobilebackend.pdfhttps://github.com/awslabs/lambda-refarch-mobilebackend

Page 68: Going Serverless, Building Applications with No Servers

Reference architecture: Web applications with AWS Lambdahttps://s3.amazonaws.com/awslambda-reference-architectures/web-app/lambda-refarch-webapp.pdfhttps://github.com/awslabs/lambda-refarch-webapp

Page 69: Going Serverless, Building Applications with No Servers

Reference architecture: Real-time file processing using AWS Lambdahttps://s3.amazonaws.com/awslambda-reference-architectures/file-processing/lambda-refarch-fileprocessing.pdfhttps://github.com/awslabs/lambda-refarch-fileprocessing

Page 70: Going Serverless, Building Applications with No Servers

Reference architecture: Real-time stream processing using AWS Lambda and Amazon Kinesishttps://s3.amazonaws.com/awslambda-reference-architectures/stream-processing/lambda-refarch-streamprocessing.pdfhttps://github.com/awslabs/lambda-refarch-streamprocessing

Page 71: Going Serverless, Building Applications with No Servers