[レポート] モバイル開発におけるデータストアの選び方 #AWSSummit
AWS Summit Tokyo 2015 "モバイル開発におけるデータストアの選び方" [Dev-04 Mobile] のセッションレポートです。 スピーカーはアマゾンデータサービスジャパンの 清水さんです。
AWS Mobile サービスの紹介
Mobile SDK
- クロスプラットフォーム
- 共通の認証
- ネットワーク状況を自動ハンドリング
- オフライン対応
- メモリフットプリントの削減
- メモリ/ストレージなどのリソースを必要なだけ使う
2-Tier アーキテクチャ
- EC2を介さないアーキテクチャ
- Cognito
- キーとなる認証サービス
- Facebook、Googleなどの認証プロバイダ又は独自の認証
- ゲストアクセスも可能
- テンポラリのCredentialを発行するとこができる
- Credentialを埋め込まなくて良い
データストアの選び方
4つ紹介します。
Cognito Sync
Cognito Identity との密な連携、特定のユーザーに関連したシンプルなテキストデータの保存
- アプリデータ、設定、状態などを保存
- クラスデバイス、クロスプラットフォーム
- 20MBまで
- KVSで1024個
- バイナリデータはBase64で文字列化する
- オフライン
- 一旦ローカルに保存されるので、電波が悪くてもシームレスに動作する
- インテリジェントな同期
- 柔軟なコンクリフトの解決
- 複数アプリからの参照も可能
- SNS Mobile Pushとの連携
- データ同期時にSNSでPush通知が可能
- Kinesisとの連携
- データ同期時にKinesis -> Redshift -> BIツール など
- Lambdaとの連携
- データ同期時に何だかの処理が可能
DynamoDB
複雑な構造、検索が必要なテキストデータの保存 高い信頼性、スケーラビリティ、低レイテンシ、NoSQL
- Object Mapper
- テーブルと各言語のオブジェクトをマッピング
- 全件取得、検索、保存などシンプルな操作
- DynamoDB Stream(プレニュー)
- データ操作をトリガにLambdaやKCLワーカーと連携可能
S3
メディア、コンテンツなどのサイズの大きなデータ 安全、耐久性
- Transfer Manager
- 分割Upload
- 電波が悪い場合のDownload再開
- 進捗の取得、停止、レジューム
- Lambdaとの連携
- 画像変換してメタデータをDynamoDB、実データをS3など
Kinesis
アプリ内で頻発する行動イベントログなど、ストリーミングデータの保存
- Kinesis Recorder
- ある程度ローカルに保存してから一括して送信
- オフライン対応
- 例えばゲームアプリのユーザー行動イベントログが向いている
- ログが多い場合にローカルストレージの容量を意識する
- Kinesis -> KCL -> Redshift -> BIツールでデータ解析
- Kinesis -> Lambda -> DynamoDB, SNS Push エラー通知など
まとめ
モバイルアプリ開発において、コストやパフォーマンスの点から2-Tierアーキテクチャが注目されています。また、その中で複数のストレージが提供されユースケースに応じて何が最適なのかを選択する必要があります。その手がかりになったセッションでした。 最後に”AWSを活用して本来の業務へ集中しよう!”というまとめでしたが、オフライン対応などの時間がかかる割には他のアプリと違うような価値を提供しないようなな所はAWS SDKにお任せして、”本来考えるべき所に集中して良いもの作ろうぜ”、とう素敵なメッセージでした。