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