【レポート】 Going Serverless with AWS #AWSSummit
こんにちは、菊池です。
ASW Summit Tokyo 2017に参加しています。Day 2 Techトラック 1、Going Serverless with AWSのセッションを聴講しましたのでレポートします。
レポート
セッション概要
当セッションの登壇者及び概要は以下の通りです。
Ajay Nair氏
Principal Product Manager, AWS Serverless Applications
Amazon Web Services, Inc.
ゲストスピーカー:
八木田 隆氏
キヤノン株式会社
映像事務機開発統括センター 主席
セッション概要:
サーバレスコンピューティングでは、サーバについて考慮することなくアプリケーションを開発して実行することが可能です。サーバレスコンピューティングに よって、ウェブ、モバイル、そして IoT バックエンドを構築したり、ストリーム処理やビッグデータのワークロード、チャットボットなどの実行が可能です。 本セッションでは、AWS Lambda を用いた構築の基本や、お客様がどのように連続的なスケーリングや組み込み済の高可用性、AWS およびサードパーティのアプリケーションとの統合、そして秒以下の課金といった機能の恩恵を受けられかをご紹介します。参加者の方は AWS Lambda と幅広いポートフォリオをサーバレスアプリケーションの構築に組み込んでいるか、皆さんのような企業がサーバレスに向かう道筋を学ぶことができます。そし てまた、AWS Lambda と Amazon API Gateway に関するエキサイティングな新機能や開発についても学ぶことができます。
Agenda
- サーバレスとは
- サーバレスパターン
- サーバレスアプリケーション
サーバレスとは
サーバについて何も考えることなくアプリケーションをビルド・実行すること
- サーバレスへの進化
- 物理サーバ -> 仮想サーバ -> クラウド -> サーバレス
- モジュール化したアプチケーションへ
- マイクロサービス
- コンテナ化
- 分散・疎結合
アプリはどこでではなく何をするかで差別化されるもの
- サーバレスのコアエレメント
- 単純プリミティブ
- アイドル時に支払いなし
- プロビジョニングのたびではない
- 日経新聞の事例:Lambdaで利用料削減
- 利用量に応じたスケール
- リクエストの数に応じてスケール
- 分散化
- 組み込まれた可用性と耐障害性
- Lambdaはサーバレスプラットフォームの核
- S3
- Dynamo
- API Gateway
- SQS/SNS
- どうデリバリするか
- 運用の複雑さを解消
- インフラストラクチャの管理から解放
- S3はキャパシティのプロビジョニング不要
- コードの開発に注力
- ビシネスのスピードアップ
- イノベーションに注力
- 運用の複雑さを解消
ユースケース
- WEBアプリ
- バックエンド(モバイル/IoT)
- ビッグデータ(Map/Reduce・バッチ)
- メディア・ログプロセッシング
- チャットボット(Alexa Skill)
- PyWen:Lambdaのためのマッシブデータフレームワーク
- Lambdaを使ったMap/Reduceフレームワーク
- 25TFLOPS
- S3に60GB/sec
エンタープライズサーバレス事例
キャノン八木田様にバトンタッチし、サーバレスの取り組みについて紹介がありました。
- デバイスと連携したサービスを提供
- キーワード
- ドメイン駆動デザイン
- クラウドネイティブ
- マイクロサービス
- サーバレス
- 取り組みの結果多くのものを削減
- コード量
- テストと工数
- 期間
- コスト
- 課題認識
- 新サービスの追加や既存サービスの拡張が進む
- アプリケーションが肥大化し、複雑化・密結合
- スピード感が犠牲に
- テスト増大
- 10年後も健全なシステム・組織の状態でありたい
- コンウェイの法則を実感
- 連携不可
- モノリシック密結合
- マイクロサービス・疎結合 <- ここにありたい
エンジニアはエンジニアリングで課題を解決する
- マイクロサービスの推進
- ホスティング -> クラウドネイティブ -> マイクロサービスへ
- AWS移行直後、マージドサービスを活用していたが次第に肥大化
- 肥大化するサービスの分割
- レイヤが横方向に肥大化 -> 縦に分割する視点
- シンプルな構成を保ちつつ分割する
- 変更コストは少ない方がいい
- 楽な方法で対応できるのがいい
- 今あるシステムを徐々に
- DB分割
- 縦に分割:DBも分割すると言うこと
- データの依存性を意識
- ドメイン駆動モデリングがポイント
- レイヤ間の依存を減らす
- ロジックがDBに依存しないようにアーキテクチャを意識して設計(DDDのクリーンアーキテクチャ)
- 注意点
- Lambda + マネージドサービスは楽に機能を実現できるため、システムに複雑化をもたらす可能性
- Restful/ドメイン駆動デザインの視点で
- デプロイ自動化をす進める
- 継続的インテグレーション可能なプラットフォーム
- フルスタックエンジニア
- 縦に分割なのでインフラも含めた自動化が必要
- サーバレスで学習コストを大幅に抑えられる
- ミドル・脆弱性対応など省ける
- ミドルの勉強しなくていいい
- Lambda
- マネージドサービスとの連携用意
- Restful設計しやすい
- すぐ試せる
- 単にインスタンスを使用しないだけでなく、様々なものを削減できる
- まとめ
- 組織・システムの硬直化・密結合を防ぎ、イノベーションスピードを高められる
- 全てをやる必要はない。向いているところをサーバレスで。
サーバレスへの転換
- メインストリームである
- サーバレスはモダンなアプリケーションのコアコンポーネント
- 考え方の転換 ー どのようにアプリケーションを構築するか
- イベントとAPIを通じたコミュニケーション
- ステートレスでエフェメラルな関数
- データ・ステートとロジックの分離
- 考慮点
- 既存アプリケーションを分解しなければいけない
- どのようにコンポーネントが通信しているか
- サービス境界
- 適切な粒度は
- サーバーローカルのストレージ/ステートを移動させる
- 例:LambdaによるサーバレスなMap/Reduce
- S3のデータをイベントソースに駆動
- ステートの管理:StepFunctions
- パラレル/シリアルにアクティビティを実行
- 同期とリトライ
- サードパーティ/既存のワークフローとの容易な結合
- API Gateway
- マーケットプレイスでの提供
- プラグインとして利用
- ベストプラクティス
- メモリ=パワー(CPU)である
- ステートを持たないこと
- Dynamo/S3/環境変数を利用
- アクセスコントロール
- IAMロール
- Lambdaはイベント/リクエストでスケール
- 同期処理にはリトライを実装
- 関数ワークフロー
- 開発ツール・やり方は大きく変わらない
- スピードアップ
- SAM:Serverless Application Model
- AWSでのサーバレススンタードモデル
- CodePipeline + SAM
- commit
- build
- test
- deploy
- AWS CodeStarを最近リリース
- 信頼性とパフォーマンス
- 責任共有
- ログとモニタリングは普遍的
- CloudWatch/Logs
- DeadLetterQueues
- リトライ後にイベントをキャプチャ
- より信頼性の高いアプリケーションを
- SQS/SNSをターゲット
- X-Rayによるトラッキング
- リクエストをトレース トレースを記録
- グローバルスケール
サーバレスはモダンなアプリケーションの基本コンポーネント
まとめ
サーバレスはモダンなアプリケーションではすでに主流となるアプローチということです。また、キャノン八木田様のお話は、実際に取り組んでいるからこその伝わるものがあり、組織・システム両面での課題・アプローチが非常に印象的でした。