Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LambdaとMobileの美味しいかもしれない関係

791 views

Published on

DEVIO-MTUP11-SAPPORO-005

Published in: Mobile
  • Be the first to comment

  • Be the first to like this

LambdaとMobileの美味しいかもしれない関係

  1. 1. LambdaとMobileの美味し いかもしれない関係 Ⓒ Classmethod, Inc. 1 DEVIO-MTUP11-SAPPORO-005 小室啓, iPhoneアプリサービス事業部, ク ラスメソッド 2014年12月12日
  2. 2. 自己紹介 2
  3. 3. 小室 啓(KOMURO, Hiraku) •iPhoneアプリ・サービス 事業部札幌チーム •PL, Server, Android •Java, Scala •埼玉出身 •2012年 JOIN •2014年10月~ 札幌市民 Ⓒ Classmethod, Inc. 3
  4. 4. モバイルアプリ開発側から の話です! 4
  5. 5. アプリケーション開発側 から見た AWSとの付き合い方 5
  6. 6. AWSのサービスはアプリ側には優しくない Ⓒ Classmethod, Inc. 高度な魔法 6
  7. 7. アプリ以外の色々が面倒 • アーキテクチャの構築 • EC2上にサーバーを動かすための環境構築 • モバイルアプリ作りたいんだけど、サーバーが登場す ると工数が膨らむ・・・ • AWS SDKを使えば、AWSの主要な機能はアクセス できるけど、サーバーサイドを拡張することが一切で きなかった Ⓒ Classmethod, Inc. サーバーサイド開発 がっつり必要に 7
  8. 8. 最近のモバイル開発の工数割合(イメージ) Ⓒ Classmethod, Inc. 顧客の想要像求する工機数能 モバイル・アプリケーション 8 開発 ちょっとした サーバー機能 の開発
  9. 9. 最近のモバイル開発の工数割合(イメージ) Ⓒ Classmethod, Inc. 実際の工数 仕様変更度重なる仕様変更 モバイル・アプリケーション 9 開発 多大な夢の詰まった 多大な夢の詰まった要 望 要望 ちょっとしたサーバー機能 野望 大人の事情
  10. 10. ※イメージです 10
  11. 11. モバイルアプリ? • サーバー側のガチ開発が多くなってきてる • モバイルアプリ専業の会社にたまたまサーバー開発の 経験のあるエンジニアがいれば良いけど • 別の会社? • APIの仕様とかで揉める。結構トラブる • 良いのはクライアントサイドのエンジニアにやさしい バックエンド技術 • 徐々に浸透しはじめているMBaaS • AWSには?まだなかった Ⓒ Classmethod, Inc. 11
  12. 12. AWS re:Invent Ⓒ Classmethod, Inc. 12
  13. 13. 社内で情報共有されていた中 • どうやらモバイルアプリ側の機能が続々と発表されてい るらしい? ! • どうもその中で、バックエンドを拡張するサーバーサイ ドスクリプトのサービスがあるらしい? ! • 将来的にはEC2を自前メンテは一切不要になるらしい? ! • どうやらそれはJavaScriptで書けるらしい Ⓒ Classmethod, Inc. 13
  14. 14. 待ち望んでいたのは これだ 14
  15. 15. AWS Lambda 15
  16. 16. AWS Lambdaとは? • Event Drivenである • サーバーサイドスクリプト(JavaScript, Node.js) • 容易に記述できる(はず) • 余計な箇所は記述しなくて良い(はず) • 動作させる基盤が不要 • サーバーセットアップとかいらない(はず) Ⓒ Classmethod, Inc. 16
  17. 17. Event Driven 17
  18. 18. “AWS Lambda starts running your code within milliseconds of an event such as an image upload, in-app activity, website click, or output from a connected device.” – http://aws.amazon.com/jp/lambda/ AWSのIntroduction
  19. 19. Event Driven A. 何らかのEventをトリガに起動される B. 今のところ対応してるEvent A. Dynamo DBのInsert, Update, Delete B. S3のInsert, Update, Delete Ⓒ Classmethod, Inc. 19
  20. 20. ざっくり概要 Ⓒ Classmethod, Inc. 20 ここがDynamo DBの イベントだったりS3の イベントだったり お金がかかるのはこれ が動いてる間だけ
  21. 21. サーバーサイドスクリプト 21
  22. 22. 特徴 1. サーバーサイドにコードをDeployしておくだけ 2. Eventを検知すると、対応するLambdaをAWSが勝 手に起動してくれる 3. 開発言語はJavaScript, Node.js 4. AWS SDK for JavaScriptでできることは大体でき る(模様) ※一部出来なかった(後述) 5. 大量に実行しても勝手にスケールされるため、数千 単位を同時に実行可能 Ⓒ Classmethod, Inc. 22
  23. 23. Eventのテスト データを発行する とこ Lambdaエディタ テストボタン
  24. 24. Eventの詳細を表示するためのテストスクリプト console.log('Loading event'); // Lambda Function exports.handler = function(event, context) { console.log('value1 = ' + JSON.stringify(event)); // 受信したEvent Jsonを表示 var array = event.Records; for(var i=0; i<array.length; i++) { var record = array[i]; console.log('event name : ' + record.eventName); } context.done(null, 'Hello World'); // SUCCESS with message }; Ⓒ Classmethod, Inc. 24
  25. 25. 開発する(2014.12.12現在) 1. サーバーサイドjsなので当然画面なぞ存在しない 2. 鬼のconsole.log デバッグ 3. Deploy方法 1.Webページ上のエディタでの編集 2.ディレクトリごとZipに圧縮したファイルをアップ ロード Ⓒ Classmethod, Inc. 25 デバッガ? そんなもんないよ! ログ? AWS Consoleページで確認せよ!
  26. 26. 動作基盤の構築がいらない 26
  27. 27. インフラを用意しなくて良い • LambdaはEC2などの動作基盤となるインフラを用 意する必要がない • Lambdaが実行される環境は独自のSandboxで閉じ ている。同時に実行されているLambdaに侵食され たりしない • テンポラリで一時的に格納できる領域を事前に用意 してある • 起動して終了する(ループとかしない) Ⓒ Classmethod, Inc. 27
  28. 28. 大きな利点 • EC2は起動時間に応じて課金対象 • 待機時間も当然動作時間に含まれる • 処理が必要なときだけ起動されるLambdaは、処理 を行っていない待機時間は当然課金されない Ⓒ Classmethod, Inc. 28
  29. 29. 向いてる仕事 29
  30. 30. 小規模な機能 • データの変更を検知して自動計算させる とか • 画像のアップロードを検知したら自動的に解析して 結果を格納する とか • サムネイル画像生成の処理 とか • 雨量を計測できるセンサーからのデータ更新を検知 したら、Twitterに投稿する とか Ⓒ Classmethod, Inc. 30
  31. 31. モバイルアプリに Lambdaを組み込む 31
  32. 32. 一般的なWeb APIサービス •REST APIで定義されたWeb APIサービス •ユーザーのリクエストに応じてデータを加工したり、検索結果を返す •必要な機能はこんな感じ •APIフロントエンド(Apache, nginxなど) •データ永続化(RDBMS, Storage) •Cache(Memory Cache) •DNS •APIサーバープログラム環境(Java?RoR?PHP?Python?Haskell?) Ⓒ Classmethod, Inc. 32
  33. 33. Web APIサービスをAWSで作る時はこんな感じ Ⓒ Classmethod, Inc. データの格納、取得、Push通知 のリクエストとか全部 33 EC2インスタンス上にサー バープログラムを展開 サーバーの起動時間=EC2の起動時間
  34. 34. ところで •Webサーバーが仕事をするのっていつでしょう? •リクエストを受信した時(クライアントから) •リクエストはいつ来るか分からないので、ひたすら待 機してる •その間のリソースは遊んでる状態 Ⓒ Classmethod, Inc. 34 結構もったいない 起動時間で課金されているのに 待機が大半
  35. 35. Lambdaを使った構成 Ⓒ Classmethod, Inc. 35 EC2インスタンス がいらない サーバーの起動時間=Lambdaが処理した時間 データの格納、取得 はSDK経由 ちょっと複雑な データ更新 Push通知 のリクエスト
  36. 36. サーバーが消えた 36
  37. 37. 役割が分割された • 今までEC2上のサーバーが一挙に引き受けていた仕 事をLambdaで分割 • モバイルアプリは、データ格納・取得はSDK経由で DBから直接行う • 対象データの更新に応じて、細かく役割の異なる Lambdaが実行される Ⓒ Classmethod, Inc. 37
  38. 38. サーバーサイドの工数(理想) Ⓒ Classmethod, Inc. Lambdaを使うと!(こうなってほしい) モバイル・アプリケーション 38 開発 ちょっとしたサーバー機能
  39. 39. MBaaS として使いたい 39
  40. 40. MBaaSとは • Mobile Backend As A Serviceの略 • モバイルアプリを作る際に必要になるバックエンド (サーバー側)の環境や機能をまるっと提供してくれ る • サーバーサイドのコーディングがほぼ不要 • サーバーサイドスクリプトとして動作拡張が可能 • アプリに組み込むSDKが提供されている • データの変化を検知してバックエンド処理を実行でき る Ⓒ Classmethod, Inc. 40
  41. 41. AWS+Lambdaでは • モバイルアプリを作る際に必要になるバックエンド (サーバー側)の環境や機能をまるっと提供してくれ る • サーバーサイドのコーディングがほぼ不要 • サーバーサイドスクリプトとして動作拡張が可能 • アプリに組み込むSDKが提供されている Ⓒ Classmethod, Inc. ちょっと構築が必要 Lambda書かないとサー バーサイドっぽい動きを しない 41
  42. 42. だいたい MBaaSの機能 はありそう 42
  43. 43. モバイルアプリとMBaaS • モバイル・アプリの世界ではMBaaSが躍進中 • AWSでのMBaaSに該当する技術は存在せず、バック エンドの構築工数が高かった • ようやくMBaaSとして使える技術が出てきた • モバイル・アプリ案件で1からサーバーを構築するの は、最早時代遅れ(!?) • モバイルアプリから直接クラウドのリソースを操作し、 サーバーサイドスクリプトで裏側を拡張しましょう Ⓒ Classmethod, Inc. 43
  44. 44. まとめ AWS Lambdaはサーバーいらない! AWS LambdaはMBaaSっぽく使えそう! モバイルアプリ開発に注力できるかも! データ変化をトリガして大量に並列処理できるので、 IoTとかと相性良さそう! Ⓒ Classmethod, Inc. 44
  45. 45. おまけ 45
  46. 46. 今のところできないこと • LambdaからElastiCacheへアクセスできません • 同じVPC内で実行されてる保証がないため、Lambdaからア クセスすることができない模様。 • 多分他のAWSサービスも利用できないものがありそう(要調 査中) Ⓒ Classmethod, Inc. 46 4時間悩みました
  47. 47. Ⓒ Classmethod, Inc. #cmdevio ご静聴ありがとうございました。 スライドは後日ブログで公開します。 47 DEVIO-MTUP11-SAPPORO-005

×