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

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