Copyright © Classmethod, Inc.
Lambda × Mobile の可能性
2014.12.22 AWS Lambda Meetup #0
underscore Inc.
諏訪 悠紀
諏訪 悠紀
• アンダースコア株式会社 CTO
• iOS / Android アプリ開発 / デザイン
• AWSのモバイルへの活用
http://dev.classmethod.jp/author/suwa-yuki/
ブログ
http://underscore-app.tumblr.com/
アプリ
AWS Mobile SDKの
これまで
モバイルから直接使える AWS サービス
認証 : Cognito
データストア : DynamoDB
ストレージ : S3
プッシュ通知 : SNS
行動分析 : Mobile Analytics
データストリーミング : Kinesis
分散キュー : SQS
2 Tier ではちょっと使いづらい
• 各サービスが疎結合
• サービス同士をつなぎ込むには

アプリへの実装 or サーバーが必要
• アプリに実装する場合は Android / iOS の

それぞれの実装が必要
• サーバーレスでなければ AWS Mobile SDK
の真価が発揮されない
そこで Lambda の登場!
• イベントドリブン
• サービス同士の連係が可能
• サーバーレス
• モバイルで行わせたくない処理も実行可能
モバイルアプリへの
活用例
写真管理
• モバイルからS3で保存
• メタデータを抜き出してDynamoDBに保存
• モバイルからS3オブジェクトとメタデータを
取得
写真管理
ログイン
Credential 取得
写真ファイル
保存 / 取得
メタデータ取得
イベント発火
メタデータ保存
Like 機能
• DynamoDBにToとFromを保存
• ToのユーザーとFromのユーザーを取得
• ToのユーザーにPush通知
• モバイルに他のユーザー情報への

アクセス権が不要(IDだけ分かればOK)
Like 機能
ログイン
Credential 取得
To & From 保存
Push 通知
イベント発火
To に Publish
キャンペーン配信
• ゲームのイベント告知やクーポン配信など
• モバイルからユーザー情報を

DynamoDBに保存
• ユーザー情報を見てSNS Topicを

Subscribe / Unsubscribe
キャンペーン配信
Credential 取得
ユーザー情報
保存 イベント発火
条件に応じて
Subscribe
コンテンツ
取得
呼び出し
Publish
Push 通知
コンテンツ追加
Lambda は
モバイルアプリで
活用できそう!
本当に
サーバーレスで
いけるのか?
Lambda × Mobile のポイント
• イベントドリブンではあるが、要件によって
はイベントが足りない場合がある
• モバイルから実行させたくない処理を担当さ
せたい
• RDSのデータの読み書き
• アクセス権限の付与
iOS から
Lambda Functionを
InvokeAsync したい!
しかし
AWS SDK for iOS は
未対応
Lambda に対応させてみた
1. AWS SDK for iOS リポジトリを Fork
2. Lambda に使うクラスを追加
• AWSLambda, AWSLambdaModel の追加
3. 既存のクラスの改修
• AWSService, AWSSignature の修正
4. API の呼び出しテスト
• AWSLambdaTests の追加
InvokeAsync が
何故か成功しない…
“ The request signature we
calculated does not match the
signature you provided. Check your
AWS Secret Access Key and signing
method. Consult the service
documentation for details. “
orz
POST
/2014-11-13/functions/helloLambda/invoke-async/
content-length:19
content-type:binary/octet-stream
…
POST
/2014-11-13/functions/helloLambda/invoke-async
content-length:19
content-type:binary/octet-stream
…
正
誤
// InvokeAsync
if ([path containsString:@"invoke-async"]) {
path = [path stringByAppendingString:@"/"];
}
足りないところだけ追加
InvokeAsync 成功!
https://github.com/suwa-yuki/
aws-sdk-ios
Lambda の課題
• 対応しているイベントが少ない
- 特に SNS のサポートが欲しい
• Function の実行結果を受け取れない
- 非同期で処理が行われるため
- SQS や SNS の併用が必要
• バッチ処理ができない
- S3 で状態管理などの実装が必要
まとめ
• Lambda のモバイル活用は今後に期待
• AWS Mobile SDK も今後に期待
• 今後も Developers.IO で Lambda × Mobile
の情報を配信していきます
Lambda × Mobileの可能性

Lambda × Mobileの可能性