Upload
yuki0211s
View
2.661
Download
5
Embed Size (px)
Citation preview
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 の情報を配信していきます