Post on 21-Jan-2018
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
西谷圭介 / Keisuke Nishitani (@Keisuke69)
Specialist SA, Amazon Web Services Japan KK
Nov 3rd, 2017
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Growing up serverless
Who am I
Keisuke NishitaniSpecialist Solutions Architect, ServerlessAmazon Web Service Japan K.K
@Keisuke69 Keisuke69 Keisuke69 Keisuke69Keisuke69x
Agenda
サーバーレスとは?
サーバーを気にすることなく、アプリケーションを構築し実行
コンピューティングの進化
データセンタ内の物理サーバ
データセンタ内の仮想サーバ
クラウド上の仮想サーバ
コンピューティングの進化
データセンタ内の
物理サーバ
データセンタ内の
仮想サーバ• 高い使用率
• より速いプロビジョニング速度
• 改善されたアップタイム
• ディザスターリカバリ
• ハードウェアの独立性
• 運用コストと投資コストのトレード
• よりスケール
• 弾力性のあるリソース
• より速いスピードと俊敏性
• メンテナンスの削減
• より良い可用性と耐障害性
クラウド上の仮想サーバー
未だ残る制限
Physical servers
data centers
Virtual servers
data centers
• 投資コストと運用コストのトレード
• よりスケール
• 弾力性のあるリソース
• より速いスピードと俊敏性
• メンテナンスの削減
• より良い可用性と耐障害性
• 仮想マシンの管理が必要
• キャパシティや利用率の管理が必要
• ワークロードのサイズを変更が必要
• 可用性や耐障害性を管理する必要
• 断続的なジョブを実行するには高コスト
クラウド上の仮想サーバー
サーバーレスへの進化
サーバーレス
クラウド上の
仮想サーバー
データセンター内の物理サーバー
データセンター内の仮想サーバー
サーバーは管理しないほうが簡単
こういった責任からの開放
プロビジョニングと利用
可用性と耐障害性
スケーリング
運用と管理
サーバーレスはよりセキュア
• パッチが適用されていないサーバーは存在しない
• SSH不要
• すべてのリクエストは認可され、監査可能
• ファンクションは短命
イベントドリブン 連続したスケーリング 利用量に応じた支払い
オンデマンドの提供、アイドル時の支払い一切なし
コンピュートの選択肢
デプロイ可能な単位のサイズ
ファンクションAppコンテナ仮想マシン
IaaS Docker
PaaS責任
クラウドプロバイダ
お客様
シェアード
Function as a Service (FaaS)
コンピュートの選択肢
Amazon EC2 Amazon ECS
AWS Elastic
Beanstalk
Function as a Service (FaaS)
責任
デプロイ可能な単位のサイズ
ファンクションAppコンテナ仮想マシン
クラウドプロバイダ
お客様
シェアード
FaaSはオペレーションの責務が異なる
FaaS
FaaS
Function as a Service (FaaS)
FaaS
Amazon EC2 Amazon ECS
AWS Elastic
Beanstalk
責任
デプロイ可能な単位のサイズ
ファンクションAppコンテナ仮想マシン
クラウドプロバイダ
お客様
シェアード
サーバーレスは管理業務がないことを意味する
FaaS
FaaS
Function as a Service (FaaS)
Serverless
Amazon EC2 Amazon ECS
AWS Elastic
Beanstalk
責任
デプロイ可能な単位のサイズ
ファンクションAppコンテナ仮想マシン
クラウドプロバイダ
お客様
シェアード
サーバーレスは管理業務がないことを意味する
FaaS
FaaS
Function as a Service (FaaS)
Amazon EC2 Amazon ECS
AWS Elastic
Beanstalk
責任
デプロイ可能な単位のサイズ
ファンクションAppコンテナ仮想マシン
クラウドプロバイダ
お客様
シェアード
サーバーレスアプリケーションのビルディングブロック
AWS Lambda Amazon DynamoDB
Amazon SNS
Amazon API GatewayAmazon SQS
Amazon Kinesis
Amazon S3
Orchestration and State Management
API Proxy Messaging and Queues Analytics
Monitoring and Debugging
Compute Storage Database
AWS X-RayAWS Step Functions
Edge Compute
AWS Greengrass
Lambda@Edge
サーバーレスアプリケーションのビルディングブロック
Orchestration and State Management
AWS Step Functions
• Lambdaファンクションとその他のアクティビティを並列もしくはシリアルに実行
• バリア同期とリトライを実行
• サードパーティのシステムや既存ワークフローとの簡単なインテグレーション
サーバーレスはデリバリを変える
マーケットに対する
スピードアップ
イノベーションのためだけの時間
デベロッパーの生産性向上 運用の複雑さを解消
サーバーレスジャーニー
サーバーレスによってイノベーションしたカスタマ
事例:株式会社スクウェア・エニックス
• 1分あたり200〜300イメージを処理
• ピークで1分あたり6000イメージを処理
• 処理時間が数時間から10 数秒に
• オンプレミスと比べ 20 分の 1
程度までコスト削減
事例:凸版印刷株式会社
• 商品のライフサイクル管理や真贋判定をすることができる ID 利活用プラットフォーム
• LambdaやAPI Gateway、Cognitoといったサービスを活用することで新事業への初期投資コストを最小限に
https://aws.amazon.com/jp/solutions/case-studies/toppan-printing/
事例:株式会社日本経済新聞社
• 日経電子版の紙面ビューアー
• 紙面画像のリサイズ、JPEG変換、分割などをLambdaで処理
• 18000 invoke/分を処理
• Amazon EC2での同等な構成と比較すると、コストは10分の1程度
https://aws.amazon.com/jp/solutions/case-studies/nikkei/
大規模に利用しているエンタープライズ顧客例
• FINRA: 日々の株式取引の検証のために1日あたり5000万件を処理
• Hearst: メディアアナリティクスパイプラインへのデータ取込と処理の時間を97%削減
• Vevo: 通常時の80倍のスパイクトラフィックを処理
• Expedia: 1月あたり12億リクエストをLambdaで処理
サーバーレスのコンプライアンス
ISO PCI SOC HIPAA
API Gateway ◯ ◯ ◯
Lambda ◯ ◯ ◯
Step Functions
Cognito ◯ ◯
DynamoDB ◯ ◯ ◯ ◯
Kinesis ◯ ◯
S3 ◯ ◯ ◯
https://aws.amazon.com/jp/compliance/services-in-scope/
Chatbots
• チャットボットのロジック
• Amazon Echo用Alexa Skill
ユースケース
Web
アプリケーション
• 静的Webサイト
• 動的Webアプリ
• FlaskとExpress
のためのパッケージ
Backends
• アプリとサービス
• モバイル
• IoT
</></>
Media & Log
Processing
• リアルタイムデータ
• ストリーミングデータ
Big Data
• MapReduce
• バッチ
Big Data
• MapReduce
• Batch
Big data
Map Phase Reduce PhaseInputs Results
サーバーレスのMap / Reduceフレームワーク
https://github.com/awslabs/lambda-refarch-mapreduce
PyWren: Lambda用大規模データフレームワーク
• Lambdaを使ったオープンソースのMapReduceフレームワーク
• 25 TFLOPS
• S3に対して読み取り60GB/秒、書き込み50GB/秒
https://github.com/pywren/pywren
http://pywren.io/
http://ericjonas.com/
サーバーレスはモダンなアプリケーションのコアコンポーネント
EVENTSエンドポイントへのリクエストリソースの状態変化データの状態変化
FUNCTIONS
DOWNSTREAM
考え方の転換– どのようにアプリケーションを構築するか
イベントとAPIを通じたコミュニケーション
ステートレスでエフェメラルな関数
データ、キャッシュおよびステートとロジックの分離
• 既存アプリの分解をどうするか
• どのようにコンポーネント群が通信するか?
• サービス境界はどうするか?
• 適切な粒度は?
• サーバー上のローカルにあるステート/ストレージをどうするか
考慮点
Amazon
Kinesis
Amazon API
Gateway
Amazon SNS
Amazon S3
Amazon
DynamoDB
Amazon
SQS
Microservices
to
Functions
Microservices
to
Amazon API
Gateway
Amazon
SQS
Functions
Microservices
to
Amazon API
Gateway
Amazon
Kinesis
Amazon
DynamoDB
Functions
• ご要望の多かったCloudFrontを外せるようになりました• Reginal とEdge Optimizedの2種類に
• 同一リージョンのEC2などからのレイテンシ改善
• IP制限、WAFなどのためにCloudFrontを2段にすることが不要に• ご自身のCloudFrontディストリビューションを利用することも可能
New! API GatewayがReginal Endpointをサポート
サーバーレスプラットフォームの構築
アプリケーションモデリングフレームワーク
モノリシックアプリケーション
マイクロサービス
多くのファンクションを持つアプリがあった場合、何が起きるか?
サーバーレスアプリケーションの作成
AWS SAM
AWS Serverless Application Model (SAM)
AWS上のサーバーレスアプリケーションを表現するための標準モデル
ファンクション、API、イベントソースとデータストア
サーバーレスアプリケーションのために、デプロイと管理を簡素化
AWS Serverless Application Model (SAM)
• AWS CloudFormationによるネイティブサポート
• あらゆるファンクションをSAMテンプレートとしてエクスポート
• AWS CLIを使ってSAMテンプレートをパッケージし、デプロイ
• コミュニティ拡張のためにApache2.0によるオープンな仕様
DevOpsについては…?
Source Build Test Deploy Monitor
Source Build Test Deploy Monitor
サーバーベースのDevOps
Code
Fleet
Source Build Test Deploy Monitor
サーバーレスなDevOps
Code
Source Build Test Deploy Monitor
Fleet
サーバーレスアプリケーションのCI/CD
</>
AWS CodePipeline + SAM
GitHub
Amazon S3
AWS CodeCommit
AWS CodeBuild AWS CodeBuild
Third-party tools
AWS CloudFormation
Commit Build TestDeploy
to Prod
AWS CodeStar
サーバーレスアプリケーションのトラブルシューティング
複数のファンクションやサービスからなる
分散アプリケーションをどのようにデバッグするか?
ファンクションがどのように実行されているか、
動作しているかについての洞察をどのように得るか?
AWS X-Ray
• 本番環境の分散アプリケーションに対する分析とデバッグ
• アプリケーションのサービスコールグラフを可視化
• パフォーマンスボトルネックとエラーの特定
• サービス特有の問題を特定
• アプリのユーザに対する問題の影響の特定
• ファンクション実行をトレース
X-Rayの使い方
リクエストのトレース トレースの記録 サービスマップの表示 問題の分析
Example
Example
Example
Example
Example
Example
Example
開発者向けツール
コードの記述
顧客にデプロイ
ビルドとテスト
フィードバックの受け取り
エコシステム
Chalice
サーバーレスアプリケーション開発のためのフレームワーク
Serverless JavaContainer
プレゼンテーション層 ロジック層 データストア層
Webサーバ/アプリサーバブラウザ/モバイル データベース
一般的な3-tier Webアプリ
AWSで作る場合
AP(EC2)
DB(RDS)
LB(ELB)
Web(EC2)
Static Contents(S3)
ブラウザ/モバイルCDN
(CloudFront)
サーバーレススタックによる置き換え
ブラウザ/モバイル API Gateway AWS Lambda DynamoDB etc
S3CloudFront
サーバーレススタックによる置き換え
ブラウザ/モバイル API Gateway AWS Lambda DynamoDB etc
S3CloudFront
AWSによるマネージ(フルマネージド)
FaaSはマシンの境界からコードを抽象化すること
それなら、別の場所にファンクションを持っていくことも?
Lambda Everywhere
Devices: AWS Greengrass
• Lambdaファンクションをデバイスへと拡張
• 低レイテンシ、ニアリアルタイム
Storage: AWS Snowball Edge
• コンピュートとストレージを内蔵したペタバイトスケールのハイブリッドデバイス
• AWS LambdaのコードをSnowball
Edgeにデプロイ
• 独自の圧縮、マニフェストの生成、セキュリティ監査…
PoPs: Lambda@Edge
Lambda@EdgeはCloudFrontのエッジロケーションすべてで利用可能
• 低レイテンシ、リクエストとレスポンスのカスタマイズ
• ビューアーとオリジンのイベントをサポート
CloudFrontがLambda@Edgeのファンクションを呼び出し
Origin
server
End user CloudFront
cache
Viewer response Origin response
Viewer request Origin request
Lambda@Edgeユースケース
コンテンツのカスタマイズ
来訪者の検証 A/B テスト
サーバレスはモダンなアプリケーションの基本的なコンポーネント
AWS re:Invent Serverless reCap
• AWS re:Inventのサーバーレスにフォーカスしたrecap
• ライブストリーミングもあります
• 2017年12月11日(月)19:00〜
• 申し込みはこちらから会場参加: https://aws-serverless.connpass.com/event/67579/
• ストリーミング: https://aws-serverless.connpass.com/event/71179/
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
AWS Developers Meetup 開催します
• 2017/12/07 夜 @ 目黒 AWS オフィス
• 開発者の方向け、セッション形式のイベント
• 内容のイメージ(予定)• DeveloperのためのライブAWSウォークスルー• ユースケースから見た実装カタログ 〜AWS逆引きリファレンス〜• RESTful APIをChaliceで紐解く 〜Python Serverless Microframework for AWS〜
• Happy Hacking on AWS!
• 申し込みはこちらhttps://pages.awscloud.com/DeveloperMeetup20171207.html
• 記入したらブースへ• 未公開の日本語版ホワイトペーパーあげます
• AWS Lambda Tシャツあげます
• オンライン版もあります• http://bit.ly/scon17awsj
• サービスチームも来ているのでぜひ要望を
アンケートの回答をお願いします
Conclusion
Lambda is a fundamental
component of modern
application architectures
It has a place in everything
from data processing to
simple web apps