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

47
Ⓒ Classmethod, Inc. LambdaとMobileの美味し いかもしれない関係 1 DEVIO-MTUP11-SAPPORO-005 小室啓, iPhoneアプリサービス事業部, ク ラスメソッド 2014年12月12日

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

Ⓒ Classmethod, Inc.

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

1

DEVIO-MTUP11-SAPPORO-005

小室啓, iPhoneアプリサービス事業部, クラスメソッド2014年12月12日

自己紹介

2

Ⓒ Classmethod, Inc.

小室 啓(KOMURO, Hiraku)•iPhoneアプリ・サービス事業部札幌チーム •PL, Server, Android •Java, Scala •埼玉出身 •2012年 JOIN •2014年10月~ 札幌市民

3

モバイルアプリ開発側からの話です!

4

アプリケーション開発側 から見た AWSとの付き合い方

5

Ⓒ Classmethod, Inc.

AWSのサービスはアプリ側には優しくない

6

高度な魔法

Ⓒ Classmethod, Inc.

アプリ以外の色々が面倒• アーキテクチャの構築 • EC2上にサーバーを動かすための環境構築 • モバイルアプリ作りたいんだけど、サーバーが登場すると工数が膨らむ・・・

• AWS SDKを使えば、AWSの主要な機能はアクセスできるけど、サーバーサイドを拡張することが一切できなかった

7

サーバーサイド開発 がっつり必要に

Ⓒ Classmethod, Inc.

最近のモバイル開発の工数割合(イメージ)

8

モバイル・アプリケーション 開発

ちょっとしたサーバー機能

の開発

顧客の想像する工数顧客の要求する機能

Ⓒ Classmethod, Inc.

最近のモバイル開発の工数割合(イメージ)

9

モバイル・アプリケーション 開発

ちょっとしたサーバー機能

実際の工数

多大な夢の詰まった 要望多大な夢の詰まった

要望度重なる仕様変更仕様変更

野望大人の事情

※イメージです

10

Ⓒ Classmethod, Inc.

モバイルアプリ?• サーバー側のガチ開発が多くなってきてる • モバイルアプリ専業の会社にたまたまサーバー開発の経験のあるエンジニアがいれば良いけど

• 別の会社? • APIの仕様とかで揉める。結構トラブる

• 良いのはクライアントサイドのエンジニアにやさしいバックエンド技術 • 徐々に浸透しはじめているMBaaS • AWSには?まだなかった

11

Ⓒ Classmethod, Inc.

AWS re:Invent

12

Ⓒ Classmethod, Inc.

社内で情報共有されていた中• どうやらモバイルアプリ側の機能が続々と発表されているらしい? !

• どうもその中で、バックエンドを拡張するサーバーサイドスクリプトのサービスがあるらしい? !

• 将来的にはEC2を自前メンテは一切不要になるらしい? !

• どうやらそれはJavaScriptで書けるらしい

13

待ち望んでいたのは これだ

14

AWS Lambda

15

Ⓒ Classmethod, Inc.

AWS Lambdaとは?

• Event Drivenである • サーバーサイドスクリプト(JavaScript, Node.js)

• 容易に記述できる(はず) • 余計な箇所は記述しなくて良い(はず)

• 動作させる基盤が不要 • サーバーセットアップとかいらない(はず)

16

Event Driven

17

– 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.

ざっくり概要

20

ここがDynamo DBのイベントだったりS3のイベントだったり

お金がかかるのはこれが動いてる間だけ

サーバーサイドスクリプト

21

Ⓒ Classmethod, Inc.

特徴1. サーバーサイドにコードをDeployしておくだけ 2. Eventを検知すると、対応するLambdaをAWSが勝手に起動してくれる 3. 開発言語はJavaScript, Node.js 4. AWS SDK for JavaScriptでできることは大体できる(模様) ※一部出来なかった(後述) 5. 大量に実行しても勝手にスケールされるため、数千単位を同時に実行可能

22

Eventのテストデータを発行する

とこ

Lambdaエディタ

テストボタン

Ⓒ 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ページで確認せよ!

動作基盤の構築がいらない

26

Ⓒ Classmethod, Inc.

インフラを用意しなくて良い• LambdaはEC2などの動作基盤となるインフラを用意する必要がない

• Lambdaが実行される環境は独自のSandboxで閉じている。同時に実行されているLambdaに侵食されたりしない

• テンポラリで一時的に格納できる領域を事前に用意してある

• 起動して終了する(ループとかしない)

27

Ⓒ Classmethod, Inc.

大きな利点• EC2は起動時間に応じて課金対象

• 待機時間も当然動作時間に含まれる • 処理が必要なときだけ起動されるLambdaは、処理を行っていない待機時間は当然課金されない

28

向いてる仕事

29

Ⓒ Classmethod, Inc.

小規模な機能• データの変更を検知して自動計算させる とか • 画像のアップロードを検知したら自動的に解析して結果を格納する とか

• サムネイル画像生成の処理 とか • 雨量を計測できるセンサーからのデータ更新を検知したら、Twitterに投稿する とか

30

モバイルアプリに Lambdaを組み込む

31

Ⓒ 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通知 のリクエスト

サーバーが消えた

36

Ⓒ Classmethod, Inc.

役割が分割された• 今までEC2上のサーバーが一挙に引き受けていた仕事をLambdaで分割

• モバイルアプリは、データ格納・取得はSDK経由でDBから直接行う

• 対象データの更新に応じて、細かく役割の異なるLambdaが実行される

37

Ⓒ Classmethod, Inc.

サーバーサイドの工数(理想)

38

モバイル・アプリケーション 開発

ちょっとしたサーバー機能

Lambdaを使うと!(こうなってほしい)

MBaaS として使いたい

39

Ⓒ Classmethod, Inc.

MBaaSとは• Mobile Backend As A Serviceの略 • モバイルアプリを作る際に必要になるバックエンド(サーバー側)の環境や機能をまるっと提供してくれる

• サーバーサイドのコーディングがほぼ不要 • サーバーサイドスクリプトとして動作拡張が可能

• アプリに組み込むSDKが提供されている • データの変化を検知してバックエンド処理を実行できる

40

Ⓒ Classmethod, Inc.

AWS+Lambdaでは• モバイルアプリを作る際に必要になるバックエンド(サーバー側)の環境や機能をまるっと提供してくれる

• サーバーサイドのコーディングがほぼ不要 • サーバーサイドスクリプトとして動作拡張が可能

• アプリに組み込むSDKが提供されている

41

ちょっと構築が必要

Lambda書かないとサーバーサイドっぽい動きをしない

だいたい MBaaSの機能 はありそう

42

Ⓒ Classmethod, Inc.

モバイルアプリとMBaaS• モバイル・アプリの世界ではMBaaSが躍進中 • AWSでのMBaaSに該当する技術は存在せず、バックエンドの構築工数が高かった

• ようやくMBaaSとして使える技術が出てきた • モバイル・アプリ案件で1からサーバーを構築するのは、最早時代遅れ(!?)

• モバイルアプリから直接クラウドのリソースを操作し、サーバーサイドスクリプトで裏側を拡張しましょう

43

Ⓒ Classmethod, Inc.

まとめAWS Lambdaはサーバーいらない! AWS LambdaはMBaaSっぽく使えそう! モバイルアプリ開発に注力できるかも! データ変化をトリガして大量に並列処理できるので、IoTとかと相性良さそう!

44

おまけ

45

Ⓒ Classmethod, Inc.

今のところできないこと

• LambdaからElastiCacheへアクセスできません • 同じVPC内で実行されてる保証がないため、Lambdaからアクセスすることができない模様。

• 多分他のAWSサービスも利用できないものがありそう(要調査中)

46

4時間悩みました

Ⓒ Classmethod, Inc.

#cmdevio

ご静聴ありがとうございました。 スライドは後日ブログで公開します。

47

DEVIO-MTUP11-SAPPORO-005