モバイル開発を⽀支える
AWS  Mobile  Services
  2015.03.22
  Amazon  Data  Service  Japan,
      Solutions  Architect
      Keisuke  Nishitani(@Keisuke69)
Twi$erでJaws	
  Daysに参加しよう!	
  
たくさんリツイートされた⼈人にプレゼント!	
  
@jawsdays
参加⽅方法は簡単!3ステップ	
  
@awscloud_jp +
#jawsdaysをつけてツイート投稿!
1番リツイート数を集めた⼈人が	
  
優勝者です!
AWS公式Twi0erとJAWS	
  DAYS公式Twi0erをフォロー
??
17:00〜~の懇親会で優勝者発表です。	
  
※9:00〜~16:50のTweetが対象です。
+
Kindle JAWS	
  Tシャツ
+
ウェアラブル	
  
Moff	
  Band
JAWS	
  Tシャツ
Step	
  1	
   (参加条件になります)
Step	
  2	
  
Step	
  3	
  
(Jaws	
  Daysに関する投稿なら何でもOK!)
JAWS	
  Tシャツ
⾃自⼰己紹介
!   名前
•  ⻄西⾕谷圭介
•  @Keisuke69
!   ロール
•  ソリューションアーキテクト
•  WebサービスやEC、スタートアッ
プを担当
•  モバイルなどアプリ寄りなプロダ
クトを担当
モバイル開発における課題
モバイル開発における課題
デベロッパーが直⾯面している課題
複数プラットフォームの利利⽤用
スケーラブルな同期処理理の実装
運⽤用管理理コスト
ユーザエクスペリエンスの喪失
ユニークなユーザIDの管理理
アプリケーションごとに決められた予算
Undifferentiated  Heavy  Lifting
モバイルアプリケーション
ID管理理
ユーザの認可
データ同期
⾮非同期通信
アクティブなデバイスの分析
ユーザの⾏行行動分析
エンゲージメントの分析
Push通知
ファイル/メディア保管⽤用ストレージ
データベース
データの収集  
And  More….
AWS  Cloud  Infrastructure
AWS Mobile Services
Amazon  Cognito
Kinesis  Connector DynamoDB  Mapper S3  Transfer  Mgr SQS  Client SES  Client
グローバルインフラ
(リージョン、アベイラビリティゾーン、エッジロケーション)
コアとなるサービス群
モバイルに最適化
されたコネクタ
モバイルに最適化
されたサービス
お客様のモバイルアプリ、ゲーム、デバイス
AWS  Mobile  SDK,  API  Endpoints,  Management  Console
コンピュート ストレージ ネットワーク 分析 データベース
統合されたSDK
Amazon  Mobile  Analytics Amazon  SNS  Mobile  Push
AWS  Lambda
ユーザ認証
ユーザの管理理や
IDプロバイダとの連携
アクセスの認可
クラウドリソースへの
セキュアなアクセス
データの同期
ユーザ設定等の複数
デバイス間での同期
ユーザの⾏行行動分析
アクティブユーザや
エンゲージメントの追跡
保持率率率の追跡
ファンネルやキャペーン
効果の管理理
メディアの管理理
ユーザが投稿した写真やその他
メディアの保存と共有
メディアの配信
モバイルデバイスの⾃自動識識別と
素早く、グローバルなコンテンツの配信
プッシュ通知の送信
ユーザをアクティブに保つための信頼性の⾼高い
メッセージ送信
共有データの保存
複数ユーザ、デバイス間における共有データの
保存と⾼高速な検索索
データのリアルタイム解析
リアルタイムなクリックストリームやログ等の
収集とそれに対する素早いアクションの実施
Your  
Mobile  
App
ユーザ認証
アクセスの認可
データの同期
ユーザの⾏行行動分析
保持率率率の追跡
メディアの管理理
メディアの配信
プッシュ通知の送信
共有データの保存
データのリアルタイム解析
Amazon  Cognito
(Identity  Broker)
AWS  Identity  and  
Access  Management
Amazon  Cognito  
(Sync)
Amazon  Mobile  
Analytics
Amazon  Mobile  
Analytics
Amazon  S3
Transfer  Manager
Amazon  CloudFront
(Device  Detection)
Amazon  DynamoDB
(Object  Mapper)
Amazon  Kinesis
(Recorder)
Amazon  SNS  
Mobile  Push
Your  
Mobile  
App
AWS  Mobile  SDK
ユーザ認証
アクセスの認可
データの同期
ユーザの⾏行行動分析
保持率率率の追跡
メディアの管理理
メディアの配信
プッシュ通知の送信
共有データの保存
データのリアルタイム解析
Amazon  Cognito
(Identity  Broker)
AWS  Identity  and  
Access  Management
Amazon  Cognito  
(Sync)
Amazon  Mobile  
Analytics
Amazon  Mobile  
Analytics
Amazon  S3
Transfer  Manager
Amazon  CloudFront
(Device  Detection)
Amazon  DynamoDB
(Object  Mapper)
Amazon  Kinesis
(Recorder)
Amazon  SNS  
Mobile  Push
Your  
Mobile  
App
AWS  Mobile  SDK
Amazon  Cognito
!   シンプルなアイデンティティの管理理
•  複数のIDプロバイダや独⾃自認証基盤との連携
•  パブリックなIDプロバイダを利利⽤用することで認証基盤の実装が不不要
•  ユニークIDの作成と管理理、識識別
•  クロスプラットフォーム、クロスデバイスで⼀一意のIDとして識識別
•  AWS  SDKを利利⽤用する際のセキュリティのベスト・プラクティス実装が簡単に
!   デバイスをまたいだデータ同期
•  ローカルに保存したデータのクラウドへのセキュアな同期
•  クロスプラットフォーム、クロスデバイスでデータを同期
•  あらゆるデータをKey/Value形式で保存可能
•  アプリケーションはオフラインでも機能
Cognito  Identity:
AWSサービスへのゲートウェイ
Amazon Cognito
(AWS IAM / STS)
Java
 Python (boto)
PHP
.NET
 Ruby
iOS
 Android
JavaScript
JavaScript
ユーザ認証
アクセスの認可
データの同期
ユーザの⾏行行動分析
保持率率率の追跡
メディアの管理理
メディアの配信
プッシュ通知の送信
共有データの保存
データのリアルタイム解析
Amazon  Cognito
(Identity  Broker)
AWS  Identity  and  
Access  Management
Amazon  Cognito  
(Sync)
Amazon  Mobile  
Analytics
Amazon  Mobile  
Analytics
Amazon  S3
Transfer  Manager
Amazon  CloudFront
(Device  Detection)
Amazon  DynamoDB
(Object  Mapper)
Amazon  Kinesis
(Recorder)
Amazon  SNS  
Mobile  Push
Your  
Mobile  
App
AWS  Mobile  SDK
Amazon  SNS
Cross-‐‑‒
platform  
Mobile  Push  
Internet
Apple  APNS
Google  GCM
Amazon  ADM
Windows  WNS  
and  MPNS
Baidu  CP
業界初!
Amazon  SNS  Mobile  Push
!   世界中のクロスプラットフォームのユーザにプッシュ通知を送信可能
!   標準で1000万デバイスまでの同報通知
Android  Phones  and  Tablets
Apple  iPhones  and  iPads
Kindle  Fire  Devices
Android  Phones  and  Tablets  in  China
iOS
Windows  Desktop  and  Windows  Phone  Devices
ユーザ認証
アクセスの認可
データの同期
ユーザの⾏行行動分析
保持率率率の追跡
メディアの管理理
メディアの配信
プッシュ通知の送信
共有データの保存
データのリアルタイム解析
Amazon  Cognito
(Identity  Broker)
AWS  Identity  and  
Access  Management
Amazon  Cognito  
(Sync)
Amazon  Mobile  
Analytics
Amazon  Mobile  
Analytics
Amazon  S3
Transfer  Manager
Amazon  CloudFront
(Device  Detection)
Amazon  DynamoDB
(Object  Mapper)
Amazon  Kinesis
(Recorder)
Amazon  SNS  
Mobile  Push
Your  
Mobile  
App
AWS  Mobile  SDK
Amazon  Mobile  Analytics
!   利利⽤用状況に関するデータを⼤大規模に収集、可視化して把握することが可能
!   グラフィカルなレポートとデータを提供
•  アプリケーション側はAmazon  Mobile  SDKを組み込むだけ
•  CSVでのダウンロード以外に⽣生データのS3/Redshiftへの⾃自動エクスポートも可能
!   ⾼高速かつスケーラブル
•  データを受け取ったら60分以内にレポート反映
•  数百万のユーザーからの数⼗十億イベント/⽇日を収集・処理理可能
!   クロスプラットフォーム
•  各種デバイス、OS(Android,  iOS,  FireOS)からデータを送信可能
•  AWS  SDK  for  JavaScriptでもサポート
ユーザ認証
アクセスの認可
データの同期
ユーザの⾏行行動分析
保持率率率の追跡
メディアの管理理
メディアの配信
プッシュ通知の送信
共有データの保存
データのリアルタイム解析
Amazon  Cognito
(Identity  Broker)
AWS  Identity  and  
Access  Management
Amazon  Cognito  
(Sync)
Amazon  Mobile  
Analytics
Amazon  Mobile  
Analytics
Amazon  S3
Transfer  Manager
Amazon  CloudFront
(Device  Detection)
Amazon  DynamoDB
(Object  Mapper)
Amazon  Kinesis
(Recorder)
Amazon  SNS  
Mobile  Push
Your  
Mobile  
App
AWS  Mobile  SDK
AWS  Mobile  SDK
!   全てのサービスに共通の認証機構
!   オンライン・オフラインを⾃自動でハンドリング
!   クロスプラットフォームのサポート:
Android,  iOS,  Fire  OS,  Unity,  Xamarin
!   Mobile  OSへの最適化  
•  例例:  ローカルオフラインキャッシュを利利⽤用するアーキテクチャ
!   モバイルに最適化されたクライアントライブラリ
•  Amazon  DynamoDB  Object  Mapper
•  Amazon  S3  Transfer  Manager
•  Amazon  Kinesis  Recorder
!   メモリフットプリントの削減
•  導⼊入するパッケージをサービス単位で選択することが可能
DynamoDB  Clientの初期化(Android)
AWSCredentials credentials =
AmazonSharedPreferencesWrapper
.getCredentialsFromSharedPreferences(this.sharedPrefe
rences);
AmazonDynamoDBClient ddb = new
AmazonDynamoDBClient(credentials);
DynamoDBMapper mapper = new DynamoDBMapper(ddb);
マッピングクラスの⽤用意(Android)
@DynamoDBTable(tableName = "TestUserPereference")
public static class UserPreference {
private int userNo;
private String firstName;
      ・・・省省略略・・・
@DynamoDBHashKey(attributeName = "userNo")
public int getUserNo() {
return userNo;
}
public void setUserNo(int userNo) {
this.userNo = userNo;
}
@DynamoDBAttribute(attributeName = "firstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
・・・省省略略・・・
}
データの保存/リスト(Android)
//保存
UserPreference userPreference = new UserPreference();
userPreference.setUserNo(i);
userPreference.setFirstName(Constants.getRandomName());
userPreference.setLastName(Constants.getRandomName());
mapper.save(userPreference);
//リスト化
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
PaginatedScanList result = mapper.scan(
UserPreference.class,
scanExpression);
S3へのダウンロード/アップロード(Android)
//S3 TransferManagerの初期化
TransferManager transferManager = new TransferManager(getCredProvider(this));
//ダウンロード
Download download = transferManager.download(BUCKET_NAME, mKey, file);
//アップロード
Upload upload = transferManager.upload(BUCKET_NAME, fileName, file);
AWS Mobile SDK for Unity
!   クロスプラットフォームなゲーム開発環境として⼈人気の⾼高いUnityのPlugin
•  .NETベースのクラス群で構成
!   現在はDeveloper Previewでありサポートするサービスは限定的
•  Amazon Cognito
•  Amazon S3
•  Amazon DynamoDB
•  Amazon Mobile Analytics
!   Unity4.0以降降をサポート
AWS Mobile SDK for Xamarin
!   クロスプラットフォームの開発環境であるXamarinのPlugin
•  評価⽤用のベータ版として提供中
•  https://github.com/awslabs/aws-sdk-xamarin
!   サポートするサービス
•  Amazon Cognito
•  Amazon S3
•  Amazon DynamoDB
•  Amazon SNS Mobile Push
AWS  Lambda
!   イベントをトリガーに独⾃自のコードを稼働させるComputeサービス
•  Lambda実⾏行行環境はAWSが管理理
•  EC2インスタンスやOS等インフラの管理理作業が不不要
•  イベントに対して即座に応答するアプリケーションを、特別な仕組みなく簡単に実装できる
•  毎⽇日数件から毎秒数千件のリクエストまで⾃自動的にスケール
•  実際にコードが稼働した時間に対してのお⽀支払であり、EC2インスタンス費⽤用が不不要
•  サポートするAWSサービス
•  S3上のオブジェクト作成/更更新時
•  DynamoDB  Table更更新時
•  Kinesisへのストリーム⼊入⼒力力時
!   Lambda  function
•  JavaScript(Node.js)で記述
•  サードパーティライブラリも利利⽤用可能
もっと楽をしよう
2-‐‑‒Tier  Architecture
2-‐‑‒Tier  Architectureとは?
!   いわゆるサーバレスな、クライアントとバックエンドだけのアーキテクチャ
•  AWS  SDKとマネージドサービスを積極的に利利⽤用
•  モバイルアプリやブラウザから直接AWSサービスを呼ぶ
!   特にモバイルにおすすめ
直接呼び出し
モバイルアプリの差別化をするものは何か?
もっとも時間を費やすべき箇所はどこか?
なぜ、2-‐‑‒Tier  Architectureなのか?
モバイルアプリの差別化をするものは何か?
もっとも時間を費やすべき箇所はどこか?
なぜ、2-‐‑‒Tier  Architectureなのか?
2-‐‑‒Tier  Architectureのメリット
!   アプリの開発に多くのメリット:
•  バックエンド側の開発コストを最⼩小化
•  バックエンド側の運⽤用コストを最⼩小化
•  スケーラビリティの⼼心配なし
•  バックエンドのEC2を減らせるため⾦金金額⾯面でもローコスト(当社⽐比*)
!   必要に応じてEC2も導⼊入できる安⼼心感
•  後からバックエンド側にロジックを⼊入れてシステムの最適化ことも可能
!   よりビジネスに集中することが可能
*  EC2で同規模のサーバを⽴立立てる場合に⽐比べ
例例えば、静的ファイル
だけで動的サイト
例例えば、ブラウザ/モバイル両対応
のRSSリーダサービス
例例えば、⼝口コミアプリ
例例えば、写真共有アプリ
サーバレスで
全部できます
例例1:静的ファイルだけで動的サイト
!   DynamoDBやS3などをデータの保存先とするHTML+JSをS3に置けばWeb
サーバ無しで動的サイトを構築可
3.  認証・認可
・  FBアプリと連携
Cognito
DynamoDB
S3
1.  HTTP(S)アクセス
2.  HTMLとJSをレスポンス
JavaScript
SDK
4.  データの読み書き
例例2:  RSSリーダサービス
!   ブラウザとモバイルアプリ間でシームレスにデータ連携
!   サーバサイドのコードなし、この程度度であればDynamoDBすら不不要
App  with  
AWS  Mobile  
SDK
JavaScript
SDK
S3
1.  HTTP(S)アクセス
2.  HTMLとJSをレスポンス
Cognito  Identity
3.  認証・認可
・  FBやGoogleのIDでログイン
Cognito  Sync
4.  データの同期
・  MobileSDK、ブラウザ間でデータ同期
5.  データのPush/Pull
例例3:  ⼝口コミアプリ
!   投稿の書き込み/表⽰示はDynamoDBと直接
!   レートの計算はモバイルアプリから直接Lambdaを実⾏行行し⾮非同期で実⾏行行
1.  認証・認可
・  FBアプリと連携
Cognito
DynamoDBApp  with  
AWS  Mobile  
SDK
2.  ⼝口コミの投稿
・  投稿内容とレーティング
4.  過去の全データを元に平均値の計算と
    結果のDynamoDBへの登録等
3.  Lambda  functionの起動
Lambda
Followers
例例4:  写真共有アプリ
4.  メタデータをDynamoDBに登録
-‐‑‒  タイトル、コメント等
1.  認証・認可
・  FBアプリと連携
6.  Push通知
-‐‑‒  フレンドやフォロワーに通知
Cognito
Mobile  Analytics
DynamoDB
S3
SNS7.  画像をポストしたことをAnalyticsに登録
3.  画像のリサイズ
2.  S3への画像アップロード
5.  結果をSNSへ通知
App  with  
AWS  Mobile  
SDK
ベストプラクティス
!   まずはサーバレスで実装することを検討
•  マネージドサービスを積極的に利利⽤用
•  ビジネスの差別化に繋がりにくいにも関わらず⼿手
間ヒマのかかる箇所はサービスを利利⽤用してオフ
ロード
!   マネージドサービスだけでは難しい箇所のみ
EC2を使って実装
!   限りあるエンジニアリングリソースはビジネ
スの差別化に集中
2015.06.02-03 Save the Date
モバイル開発を支えるAWS Mobile Services

モバイル開発を支えるAWS Mobile Services