AWS Summit Tokyo 2019 セッションレポート【初級】いまから始めるサーバレスアプリケーション #AWSSummit

AWS Summit Tokyo 2019 Day3 (本日6/14)のセッション、「【初級】いまから始めるサーバレスアプリケーション」をレポートします。

ライブストリーミングでのセッション参加のレポートです。

セッション概要

サーバレスアプリケーションは、サーバを意識することなくアプリケーションを構築することが可能です。ウェブ、モバイル、IoT バックエンド、ストリーム処理、データ分析、チャットボットなど様々なシーンでサーバレスを活用できます。 本セッションでは、AWS Lambda や Amazon API Gateway を活用した基本的なサーバレスアプリケーションの構築についてご紹介します。

スピーカー

アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 ソリューションアーキテクト 清水 崇之

セッションレポート

アーキテクチャの種類紹介

モノリシックアーキテクチャ

  • 影響が全体に波及
  • デリバリが遅くなる

サービス思考アーキテクチャ(SOA)

  • UXはプレゼンテーション層
  • ビジネスロジックはロジック層
  • データ永続化はデータ層
  • インフラが分離していることが重要

マイクロサービスアーキテクチャ

  • SOAをよりブレイクダウンしたもの
  • 各モジュールは単一機能のみを担う
    • 少人数の開発チームで動ける
  • 組織構造にあったアーキテクチャを使うべき

AWSで利用できるツール

  • EC2
  • Auto-Scaling
  • ELB
  • Auto-Recovery
  • Trusted Advisor
  • EB
  • OpsWork
  • が、これらのツールは依存しあっている
    • 例えば仮想サーバーへの依存を考えると
    • どの規模のサーバーが良いか
    • 最新のパッチをどのように当てていくか
    • などなど

サーバレス とは何か

アプリを動かす際のサーバの管理、運用、パッチが不要

サーバレス への進化

  1. DC内物理サーバ
  2. DC内仮想サーバ
  3. クラウド上の仮想サーバ
  4. サーバレス

サーバーレスとは

  • サーバー管理不要
  • 柔軟なスケーリング
  • アイドル時のリソース確保不要、従量課金
  • 組み込まれた高可用性

    つまり、アプリの本質に集中することができる

サーバレス のためのビルディングブロック

  • Lambda以外にも色々あります
  • アプリはコードだけでは動かない 連携するストレージやDBなどが必要
  • それぞれ対応するAWSサービスが存在するので、それらを組み合わせて利用する

サーバレス はどうデリバリするかを変える

  • 運用の複雑さを解消
  • デベロッパーの生産性向上
  • マーケットに対するスピードアップ
  • イノベーションのためだけの時間

本番環境事例はすでに豊富

  • 一般的なユースケース
    • ほとんどの領域で活用できる
    • Webアプリ
    • モバイル
    • IoT
    • ビッグデータ(データ分析)
    • Media & Log Processing
    • チャットボット
  • 今回のSummitでもサーバレス の事例セッションがたくさん存在

従来方法とサーバレス の比較

従来

  • ELB
  • EC2
  • RDS
  • アプリは独自で作りこむ必要あり認証とかキャッシュとか

サーバレス

  • API Gateway
  • Lambda
  • DynamoDB
  • WAF
  • CloudWatch
  • Cognito
  • X-Ray

よくあるデザインパターン

モバイルバックエンド

AppSync - Lambda - DynamoDB

ワークフロー

StepFunctions でフロー管理

画像処理

S3のイベント(ファイルアップロードなど)をフックにLambda関数起動

Amazon Alexaスキル チャットボット

Lambda

デモ WEB APIを作ってみよう

  • Userデータを取得するAPI
  • 使用するサービス
    • API Gateway
    • Lambda
    • DynamoDB
  1. DynamoDB
    1. テーブル作成
    2. レコード登録
  2. Lambda
    1. 関数の作成
  3. API Gateway
    1. APIの作成
    2. リソースの作成
    3. メソッドの作成
    4. デプロイ
  4. API GatewayエンドポイントURLにブラウザアクセスして動作確認

5分くらいで作れる!

考え方の転換

  • イベントとAPIを通じたコミュニケーション
  • ステートレスでエフェメラルな関数
  • データ、キャッシュおよびステートとロジックの分離

考慮すべきこと

  • 既存アプリを分解しなければいけないという可能性
  • どのようにコンポーネント群が通信するか?
  • 明確なサービス境界は何か?
  • 関数は何に反応すべきか?
  • 適切な粒度は?
  • サーバー上のローカルにあるステート/ストレージを移動させる必要性

開発ワークフローは変わらない

  • コーディング
  • ビルド、テスト
  • デプロイ
  • モニタリング

モノリシックからマイクロサービスへ

  • パーツが増えると大変
  • どうするか?

AWS SAM(Serverless Application Model)

  • AWSサーバーレスアプリケーションを表現するスタンダードモデル
  • 関数、API、イベントソースとデータストア
  • サーバレス アプリをデプロイ
  • AWS SAMテンプレートでPackage&Deploy
  • Codeサービスと組み合わせてCI/CDパイプラインを構築できる
  • X-Rayでモニタリング
  • AWS Codestar
    • Codeシリーズの親玉的存在
    • テンプレートを選択するだけ
    • Demo
      1. CodestarコンソールでLambdaで検索
      2. Node.js選択
      3. プロジェクト作成
      4. codeの編集方法の選択 cloud9選択
      5. しばらく待つとプロジェクト環境とIDE環境の設定完了
      6. cloud9で開発開始
      7. サンプルのコード、テストコード、SAMテンプレートがデフォルトである
      8. デプロイパイプラインもできあがっている
      9. エンドポイントもある

まとめ

  • アーキテクチャ(モノリシック、マイクロサービス)
  • サーバレス の特徴
  • WebAPIのデモ
  • AWS SAMによる自動化
  • AWS Codestarで始めるCI/CD、デモ

もっと知りたい方は「めざせ!サーバレス プロフェッショナル」セッションにご参加ください!
(こちらのセッションのレポートは以下をご確認ください)

[レポート] めざせ!サーバレスプロフェッショナル #AWSSummit

感想

簡単に始められるというのをデモを用いて説明されたのがすごく説得力が高かったです。すぐにでもサーバレス アプリケーション開発を始めたくなりました!
また、冒頭に3種類のアーキテクチャパターンをご紹介いただきましたが、必ずしもその中でサーバレスが最も優れているわけではない、組織によって優劣は異なるというのは印象に残りましたね。闇雲にサーバレス化(マイクロサービス化)するのではなく、使いどころを見極められるようになりたいです。