145
Keisuke Nishitani Solutions Architect Amazon Web Services Japan K.K. AWS おける モバイル向けサービス及び 事紹介

AWSにおける モバイル向けサービス及び事例紹介(20151211)

Embed Size (px)

Citation preview

Page 1: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Keisuke NishitaniSolutions Architect

Amazon Web Services Japan KK

AWSにおけるモバイル向けサービス及び事例例紹介

自己紹介Name 西谷圭介Twitter Keisuke69Profile Role Solutions ArchitectCustomers [ Web Services Start-‐‑‒uprdquo

]Services [ Amazon API GatewayrdquoAWS LambdaAll Mobile Servicesrdquo

]

Amazonの代表的なサービス

Amazonの代表的なサービス

amazoncojpおなじみの通販サイト

Amazonの代表的なサービス

amazon services出品出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 2: AWSにおける モバイル向けサービス及び事例紹介(20151211)

自己紹介Name 西谷圭介Twitter Keisuke69Profile Role Solutions ArchitectCustomers [ Web Services Start-‐‑‒uprdquo

]Services [ Amazon API GatewayrdquoAWS LambdaAll Mobile Servicesrdquo

]

Amazonの代表的なサービス

Amazonの代表的なサービス

amazoncojpおなじみの通販サイト

Amazonの代表的なサービス

amazon services出品出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 3: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazonの代表的なサービス

Amazonの代表的なサービス

amazoncojpおなじみの通販サイト

Amazonの代表的なサービス

amazon services出品出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 4: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazonの代表的なサービス

amazoncojpおなじみの通販サイト

Amazonの代表的なサービス

amazon services出品出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 5: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazonの代表的なサービス

amazon services出品出店サービス

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 6: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazonの代表的なサービス

amazon web servicesITインフラサービス

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 7: AWSにおける モバイル向けサービス及び事例紹介(20151211)

10年年以上にわたるAmazoncomのITインフラ運用ノウハウをサービスに

2006年年 AWSサービス開始

2011年年 Tokyoリージョンサービス開始

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 8: AWSにおける モバイル向けサービス及び事例紹介(20151211)

はサーバやストレージといったITリソースを電気ガス水道と同じように必要なときに必要なだけ使えるようにしたサービスです

どんなサービスか一言でいうとhellip

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 9: AWSにおける モバイル向けサービス及び事例紹介(20151211)

もう少し具体的にhellip初期費用不不要で使った分だけの従量量課金金(長期契約不不要)

スケールアウトスケールアップスケールダウンが容易易

汎用的な技術で構成

便便利利なマネージドサービスが豊富

世界中のデータセンタ群を利利用出来る

スモールスタートが出来る

急なサービス成長にも対応出来る効率率率的な利利用でコスト削減も可能

既存の技術知識識ですぐに始められる

少ない人数で効率率率的に運用出来る

グローバル展開も容易易

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 10: AWSにおける モバイル向けサービス及び事例紹介(20151211)

無料料でお試し出来ます

httpsawsamazoncomjpfree

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 11: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ベーシック デベロッパー ビジネス エンタープライズ

フォーラム 利利用可能 利利用可能 利利用可能 利利用可能

サポートへのコンタクト

EC2の健全性エラーが発生

した場合コンタクトフォーム

電話チャットコンタクトフォーム

電話チャットコンタクトフォーム

初回応答時間 不不可 12時間(営業時間内) 1時間 15分

連絡先登録 -‐‑‒ 1 5 無制限

24365対応 なし なし あり あり

Trusted Advisor なし なし あり あり専任スタッフ特別サポート なし なし なし あり

料料金金(月額) 無料料 $49

AWS利利用総額の$0~sim$10K 10$10K~sim$80K 7

$80K~sim$250K 5$250K~sim 3(最低$100)

AWS利利用総額の10(最低$15000)

24時間365時間対応の日本語サポートも選べます

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 12: AWSにおける モバイル向けサービス及び事例紹介(20151211)

190カ国に及ぶ100万以上のお客様

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 13: AWSにおける モバイル向けサービス及び事例紹介(20151211)

日本のお客様は20000以上

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 14: AWSにおける モバイル向けサービス及び事例紹介(20151211)

世界中のStartupも

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 15: AWSにおける モバイル向けサービス及び事例紹介(20151211)

もちろん日本のStartupも

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 16: AWSにおける モバイル向けサービス及び事例紹介(20151211)

モバイルアプリも

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 17: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWSrsquo Rapid Pace of Innovation

2011

82

159

2012

280

2013

516

2014

AWS has launched a total of 621 new features andor services to-shydate in 2015 for a total of 1835 new features andor services since inception in 2006

As of 30 Nov 15

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 18: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWSrsquo History of InnovationAWS has been continually expanding its services to support virtually any cloud workload and it now has more than 60 services that range from compute storage networking database analytics application services deployment management and mobile

2009Amazon RDSAmazon VPC

AWS Auto Scaling

AWS Elastic LoadBalancing

2010

Amazon SNSAWS Identity amp Access Management

Amazon Route 53

2011

Amazon ElastiCache

Amazon SES

AWS CloudFormation

AWS Direct Connect

AWS Elastic Beanstalk

GovCloud2012

Amazon SWF

Amazon Redshift

Amazon Glacier

Amazon Dynamo DB

Amazon CloudSearch

AWS StorageGateway

AWS Data Pipeline

2013

Amazon CloudTrail

Amazon CloudHSM

Amazon WorkSpaces

Amazon Kinesis

Amazon ElasticTranscoder

Amazon AppStream

AWS OpsWorks

2014

AWS KMS

Amazon Config

Amazon Cognito

Amazon Mobile Analytics

Amazon EC2Container Service

Amazon RDS for Aurora

Amazon Lambda

Amazon WorkDocs

AWS Directory Service

AWS CodeCommit

AWS CodePipeline

2015

Amazon EFS

Amazon API Gateway

Amazon WorkMailAmazon Machine Learning

AWS Device Farm

AWS WAF

Amazon Elasticsearch Service

Amazon QuickSight

AWS ImportExport Snowball

Amazon Kinesis Firehose

Amazon RDS for MariaDB

Amazon Inspector

AWS Database MigrationService

AWS IoT

Amazon EC2 ContainerRegistry

Amazon Kinesis Analytics

AWS Mobile Hub

As of 30 Nov 15

AWS EMR

Amazon CloudWatchAmazon FPS AWS ImportExport

Trusted Advisor AWS Service Catalog

AWS CodeDeploy

Amazon CloudWatch Logs

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 19: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 20: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Networking AnalyticsCompute

Storage amp Content Delivery

Developer Tools Management Tools Security amp Identity

Application Services

Mobile Services Database Enterprise Applications

S3 CloudFront EFS Glacier StorageGateway

API Gateway AppStream CloudSearch Elastic

Transcoder SES SQS SWF

Mobile AnalyticsCognito Device Farm SNS RDS DynamoDB ElastiCache RedShift WorkSpaces WorkDocs WorkMail

Lambda EC2 Container Elastic Service Beanstalk EC2 VPC Direct

Connect Route 53 EMR Data Pipeline Kinesis Machine

LearningElastic LoadBalancing QuickSight Elasticsearch

Service

CodeCommit CodeDeploy CodePipeline CloudWatch Cloud Formation CloudTrail Config OpsWorks Service

CatalogIdentity amp Access Management

DirectoryService

TrustedAdvisor Cloud HSM

Key Management Service WebApp

Firewall

Snowball

Simple DBDatabaseMigrationService

IOT

IoT

Hubs

Mobile Hub

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 21: AWSにおける モバイル向けサービス及び事例紹介(20151211)

モバイル開発で考えるべき

2つのこと

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 22: AWSにおける モバイル向けサービス及び事例紹介(20151211)

必要だが面倒なことや様々な課題にどう対処するか

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 23: AWSにおける モバイル向けサービス及び事例紹介(20151211)

どうやって差別化するか

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 24: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS モバイルサービスを活用して課題を解決

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 25: AWSにおける モバイル向けサービス及び事例紹介(20151211)

アプリ開発とくに差別化のための開発に集中できる

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 26: AWSにおける モバイル向けサービス及び事例紹介(20151211)

様々な課題

開発者が直面する課題

bull 複数プラットフォームbull スケーラビリティの確保bull 高い運用管理理コストと限られた予算bull ユーザエクスペリエンスの阻害bull ユニークなユーザIDの管理理

モバイルアプリケーションアイデンティティの管理理と認可

データ同期アクティブなユーザの分析エンゲージメントの分析

Push通知イベントトリガー

クロスプラットフォームデータのバリデーションと変換

ファイルメディア保管用ストレージデータベースAnd Morehellip

AWS Cloud Infrastructure

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 27: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile サービス

Cognito

Kinesis DynamoDB S3 SQS SES

グローバルインフラ

コアとなるサービス群

モバイルに最適化されたコネクタ

モバイルに最適化されたサービス

AWS SDK for Android

ストレージ データベース キュー メール コンピュートネットワーク

AWS Mobile SDK

Mobile Analytics SNS Mobile Push

AWS SDK for iOS AWS SDK for Unity

あなたのモバイルアプリ

ゲームアプリ ユーティリティアプリ 家計簿アプリ クーポンアプリ

Lambda

Device Farm API Gateway

AWS SDK for JavaScript

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 28: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile SDK

bull 全てのサービスに共通の認証機構bull オンラインオフラインを自動でハンドリングbull クロスプラットフォームのサポートAndroid iOS Fire OS Unity Xamarin

bull Mobile OSへの最適化例例 ローカルオフラインキャシュを利利用するアーキテクチャ

bull メモリフットプリントの削減bull 同梱するパッケージの選択も可

bull 各プラットフォームのエンハンスに追従

iOS Android Fire OS Unity

Xamarin

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 29: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 30: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 31: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 32: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 33: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 34: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 35: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 36: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ID プロバイダゲストアクセス独自認証システム

ユニーク ID

Joe Anna Bob

デバイスプラットフォーム

AWS サービス

複数の ID プロバイダをサポートID プロバイダと簡単に連携して認証Amazon Facebook Twitter Google OpenID Connect などに対応

ユニークなアイデンティティ認証済ユーザに対してユニークIDを割り当てデバイスやプラットフォームをまたがって認識識と管理理

Amazon Cognito Identity

Mobile Analytics

S3 DynamoDB Kinesis

容易易なセキュリティのベストプラクティス実装モバイルデバイスからAWSリソースへのセキュアなアクセスのためのやり取りをIAMと連携して簡略略化

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 37: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Cognitoの認証フロー

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

TokenPool ID

Role ARNs

User Authentication System

(Running on AWS or not)

Token

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 38: AWSにおける モバイル向けサービス及び事例紹介(20151211)

(参考)OpenID Connect

v 2014年2月に最終承認されたID連携に関する仕様

v準拠しているIDプロバイダをCognitoでも利用可能例Salesforce Ping Identity Google etchellip

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 39: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developer Authenticated Identities

UsernameAnd13 Password

独自認証システム

パブリックIDプロバイダの併用CognitoのIDを元にパブリックなIDプロバイダと独自認証を併用して管理理することも可能

認証基盤の実装が必要GetOpenIdTokenForDeveloperIdentity() を実装する既存の認証基盤を使う場合改修が必要

独自認証システムの利利用パブリックなIDプロバイダではなく独自のUsernameとPasswordを使って認証

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 40: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Cognitoの認証フロー(Developer Authenticated Identities)

Amazon Cognito ID(Temp Credentials)

Amazon DynamoDB

End Users

Developer

App with AWS Mobile

SDK

Accessto AWS Services

Amazon Cognito Identity Broker

Get OpenID Token

User Name Password

Amazon Cognito ID Temp Credentials

Amazon S3

Amazon Mobile Analytics

Amazon Cognito Sync Store

AWS Management Console

OIDC TokenPool ID

Role ARNs

独自認証システム(AWS上で稼働していなくてもOK) OIDC Token

OIDC Token

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 41: AWSにおける モバイル向けサービス及び事例紹介(20151211)

未認証ユーザのゲストアクセス(Unauthenticated Identities)IDプロバイダで認証をしていないユーザをゲストユーザとしてユニークIDの付与と管理理

bull 未認証の場合IDはデバイスと紐紐づくbull 未認証によるアクセスを許可しない設定も可能

アプリやAWSリソースへのアクセスにアカウントの作成や認証が不不要

bull アクセス権限は未認証ユーザに対して割り当てたIAM Roleのポリシーに基づく

bull センサーデバイス等のスクリーンや入力力装置のないデバイスに対してもユニークIDの付与と管理理が可能

データはクラウド上に保存され後からログインした場合は自動でマージ

VisitorPreferences

Cognito Store

Guest

EC2 S3 DynamoDB Kinesis

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 42: AWSにおける モバイル向けサービス及び事例紹介(20151211)

WebとMobileをまたがったユーザの識識別

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 43: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ユーザ状態の遷移

当初はゲストユーザとして

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 44: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ユーザ状態の遷移

その後アカウント登録

bull シームレスに遷移

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 45: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ユーザ状態の遷移

複数のアカウントをリンク

bull 一貫性のあるアイデンティティ管理理が必要

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 46: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(Android)

Credential Providerの初期化CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext()rdquoap-‐‑‒northeast-‐‑‒1XXXXXXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXX-‐‑‒XXXXXXXX Identity Pool IDRegionsAP_NORTHEAST_1 Region

)

Facebookユーザで認証する場合Map logins = new HashMap()loginsput(graphfacebookcom SessiongetActiveSession()getAccessToken()) credentialsProvidersetLogins(logins)

AWSサービスへのアクセスAmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider)

Congito IDの取得String identityId = credentialsProvidergetIdentityId()

上記例例では省省略略していますが事前にIDプロバイダを利利用した認証処理理の実装が必要です実際にはLoaderやAsyncTask等を用いた非同期タスクとして実装すること

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 47: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(JavaScript)

以下ではFacebookユーザを認証済ユーザとして使用AWSconfigregion = lsquoap-northeast-1rsquo リージョンの指定(必須)AWSconfigcredentials = new AWSCognitoIdentityCredentials(

IdentityPoolId rsquo ap-northeast-1XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXrsquoLogins

graphfacebookcom facebookResponseauthResponseaccessToken

)

Cognitoから付与されたIDの取得AWSconfigcredentialsget(function(err)

if (err) consolelog(Cognito Identity Id +

AWSconfigcredentialsidentityId)

)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 48: AWSにおける モバイル向けサービス及び事例紹介(20151211)

(参考)IAM Role用のアクセスポリシーの作成

EffectAllowAction[s3]Resource

Effect rdquoDenyAction [dynamodb]Resource

Effect AllowAction [rdquocognito-sync]Resource

AllowActions

All S3 Sync store Operations

ResourceAll resources within these services

DenyActions

All DDB OperationsResource

All resources

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 49: AWSにおける モバイル向けサービス及び事例紹介(20151211)

モバイルSDKを使う際の認証情報の扱い

v AWSの各種サービスはあくまでバックエンド

v エンドユーザは必ずしもAWSユーザではないv アプリは開発者のアカウントで認証認可を受ける必要がある

v アプリに開発者アカウントのアクセスキー等を埋め込んだらv アクセスキーが広範にばら撒かれることにv アクセスキーの不不正利利用を止めるためにキーを無効化したらrarr 全ユーザへのサービスが停止

v アクセスキーの定期的な更更新で対処するにしてもv 更更新のたびにバージョンアップは非現実的v 更更新前のアプリからはサービス利利用不不可に

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 50: AWSにおける モバイル向けサービス及び事例紹介(20151211)

セキュアなAWSアクセスを提供するには

アプリに認証情報を埋め込むべきではないbull アクセスキーが広範囲に配布されてしまうbull アクセスキーの更更新はアプリのアップデートを伴うため非現実的

エンドユーザ端末ごとに異異なる認証情報を提供すべきbull ユーザごとに必要最小限の権限を与えるのは重要bull 不不正利利用発覚時に不不正ユーザのみ権限を停止

認証情報は期限が来たら無効化されるべきbull 不不正ユーザの影響も期限付きに

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 51: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Cognitoのセキュリティ

細やかなアクセス制御IAM との連携で AWS リソースへの細かなアクセス制御を実現

AWS Credentials の保護必要な権限だけを付与された一時的なクレデンシャルを取得できるのでアプリにクレデンシャルを埋め込まなくてよい

セキュリティのベストプラクティスを支援セキュリティトークンサービスと連携したりトークンベンディングマシンを構築する必要はないセキュアに AWS サービスを利利用

EC2 S3 DynamoDB Kinesis

S3

DynamoDB

Get Delete Put

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 52: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Concrete Software

Concrete Software has been making hit mobile games like Jellyflop and PBA Bowling Challenge since 2003

Amazon Cognitoによって迅速なゲーム開発が可能となりユーザに素晴らしいエクスペリエンス

提供も可能となりました

Keith A PichelmanCEO Concrete Software

rdquo

ldquo bull クロスデバイスクロスプラットフォームでシームレスなユーザ体験の提供

bull クラウドへゲームの状態を保存しサーバレスでクロスデバイスに同期を実施

チャレンジ

解決策bull CognitoによりAWSリソースへのセキュアなアクセスが可能に

bull Cognito Syncはいかなるサーバサイドのインフラも必要とせずにクラウドへのデータ保存に対する柔軟性を提供してくれデバイス上でのキャッシュを実現

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 53: AWSにおける モバイル向けサービス及び事例紹介(20151211)

akippa株式会社

v「個人が所有する空きスペース」や「未契約で空いている月極の駐車車場」を1 日単位で予約が出来る駐車車場として活用出来るサービス

v Infinity Ventures Summit 2014 Kyoto でのLaunchpad 優勝をきっかけに急成長中

vコーポレートサイトにおける問合せフォームをCognitoとS3を利利用して実装

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 54: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 55: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Mobile Analytics

v 利利用状況に関するデータを大規模に収集自動的に可視化v アプリケーション側はAmazon Mobile SDKを組み込むだけ

v 生データをS3Redshiftへ自動エクスポート可能v 既存のユーザマスタの突き合わせ等によるより深い分析が可能v CSVでのダウンロードも可能

v 高速かつスケーラブルv データを受け取ったら60分以内にレポート反映v 数百万のユーザーからの数十億イベント日を収集処理理可能

v クロスプラットフォームv 各種デバイスOS(Android iOS FireOS)からデータを送信可能v AWS SDK for JavaScriptでもサポート

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 56: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ビジネス上重要な指標

1 Monthly Active Users (MAU)

2 Daily Active Users (DAU)

3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-shyDay Retention 7 Avg Revenue per DAU 8 Daily Paying Users9 Avg Paying DAU

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 57: AWSにおける モバイル向けサービス及び事例紹介(20151211)

継続率率率のトラッキング

ユーザの継続率率率はマーケティング新機能UI変更更やアプリ更更新の効果を測る際の重要な指標

日次週次でユーザ再訪率率率に関する4つのチャートを提供

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 58: AWSにおける モバイル向けサービス及び事例紹介(20151211)

アプリ固有のアクションに関して行行動分析が可能

特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能

サンプル

Track the number of LikesShares per article in a news app

Understand player abort rates per level in a game

Number of songs played per user session in a music app

In-shyapp item popularity in a shopping app

カスタムイベントのトラッキング

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 59: AWSにおける モバイル向けサービス及び事例紹介(20151211)

S3へとデータをエクスポートしデータ処理理

Mobile Amazon S3

Amazon Redshift

Amazon Mobile Analytics

HadoopSparkAmazon EMR

Amazon Glacier

アーカイブ

バッチ処理理によるレポート

自動でエクスポート

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 60: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Mobile Analyticsのスキーマ

bull シンプルbull 共通項目は自動収集bull 項目とメトリクスを拡張可能

event_timestamp arrival_timestampevent_type app_idapp_title cognito_idclient_id platformplatform_version localeapp_package_name app_version_namedevice model device makemonetization_amount monetization_itema_levela_promo_codem_scorem_quantity

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 61: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Forza Football

65スコア速報 投票プッシュ通知

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 62: AWSにおける モバイル向けサービス及び事例紹介(20151211)

PENETRATION

66

USERS PER CAPITA

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 63: AWSにおける モバイル向けサービス及び事例紹介(20151211)

LEVERAGE ON MISSION

67

VOTE PER COUNTRY

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 64: AWSにおける モバイル向けサービス及び事例紹介(20151211)

DEVICES

68

IN FORZA FOOTBALL

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 65: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 66: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Cognito Sync クラウドへのデータ保存と同期

アプリのデータ設定状態などを保存アプリやデバイスのデータをクラウドに保存できログイン後にマージされる

クロスデバイスクロスプラットフォームで同期ユーサデータや設定をデバイスをまたいで同期

バックエンド不不要スケーラブルで信頼性の高いデータ同期基盤を簡単に利利用可能

User Data Storage andSync

Any Platform

iOSAndroidFireOS

kv data

Identity pool

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 67: AWSにおける モバイル向けサービス及び事例紹介(20151211)

SDKローカルデータストア

オフライン動作データはまずローカルのデータストレージに保存されるので電波が不不安定もしくは不不通であってもシームレスに動作できる

インテリジェントな同期処理理同期メソッドはローカルとクラウドのデータのバージョンを比較してデータをプッシュプル

柔軟なコンフリクトの解決同期メソッドは変更更を読み取り後ローカルの変更更をクラウドのデータストアへ書き込むデフォルトでは最後の書き込みを有効として保存する開発者はコンフリクト処理理を独自に上書きして実装することもできる

Amazon Cognito Sync クラウドへのデータ保存と同期

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 68: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Cognito Sync データモデル例例

User情報Dataset

ゲームとユーティリティ2種類アプリを

提供

Game情報Dataset

Identitypool1

ユーティリティApp

GameApp

AWS Account

Dataset

IdentityIdentityIdentity

DatasetDataset

Identity Pool

160

1n

120

DatasetDatasetRecord

11024

You

Your App

Your App Users

User Data Container

User Data

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 69: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(Android)

Cognito Sync client の初期化CognitoSyncManager syncClient = new CognitoSyncManager(

getApplicationContext()RegionsAP_NORTHEAST_1 RegioncredentialsProvider)

Datasetをオープンしレコードを追加Dataset dataset = syncClientopenOrCreateDataset(myDataset)datasetput(myKey myValue)

同期処理理の実行行datasetsynchronize(new DefaultSyncCallback()

Overridepublic void onSuccess(Dataset dataset List newRecords)

Your handler code here

)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 70: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(JavaScript)

Cognito Sync clientの初期化AWSconfigcredentialsget(function()

var syncClient = new AWSCognitoSyncManager()syncClientopenOrCreateDataset(myDataset function(err

dataset) datasetput(myKey myValue function(err record)

datasetsynchronize(onSuccess function(data newRecords)

ハンドラを実装

))

))

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 71: AWSにおける モバイル向けサービス及び事例紹介(20151211)

モバイルアプリ(デバイス1)

Mobile SDK

Amazon CognitoSync Store

1 データ同期

モバイルアプリ(デバイス2)

Mobile SDK

Amazon SNSMobile Push

2 プッシュ通知

3 データ同期

Amazon SNS Mobile Push との連携Amazon Cognito がデータストアが更更新されたタイミングでAmazon SNS Mobile Push と連携して各デバイスにプッシュ通知を送信できるプッシュ通知を受け取ったアプリはデータストアの再同期を行行うように実装するなど

Amazon Cognito Push Sync

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 72: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon Kinesis との連携Amazon Cognito のデータストアが更更新されたタイミングでAmazon Kinesis ストリームで更更新や同期のデータを受け取ることができる

モバイルアプリ

Mobile SDK

Amazon CognitoSync Store

1 データ同期Amazon Kinesis

2 StreamContent

ストリームの内容

3 例例えば

Amazon Redshift

identityPoolId Pool IdrdquoidentityId Identity Id rdquodataSetName Dataset Namerdquooperation (replace|remove)rdquokinesisSyncRecords [

key Keyvalue ValuesyncCount 1lastModifiedDate 1424801824343deviceLastModifiedDate 1424801824343op (replace|remove)

]lastModifiedDate 1424801824343kinesisSyncRecordsURL S3UrlpayloadType (S3Url|Inline)syncCount 1

Amazon Cognito Stream

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 73: AWSにおける モバイル向けサービス及び事例紹介(20151211)

モバイルアプリ

Mobile SDK Amazon CognitoSync Store

1 データ同期AWS Lambda

2 Sync Trigger

Amazon Lambda との連携

3 何か処理理

Amazon Cognito Events

Key Value住所 東京都渋谷区松濤1丁目

Key Value住所 東京都渋谷区松濤1丁目

元データ

修正済みデータ空白を削除するプログラム

Lambda Function(Nodejs)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 74: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 75: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Joe Anna Bob

High Scores

Joe 1500

Anna 800

Bob 750

Amazon DynamoDB

No SQL データベース高い信頼性スケーラビリティ低レイテンシで安定した性能を兼ね備えた NoSQLデータベースサービス

DynamoDB Connectorbull Object Mapperbull アプリ側のクラスが Amazon DynamoDB テーブルにマッピング

bull オブジェクトをテーブルに変換することもその逆も必要ない

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 76: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Id isbn Title hardCover1 22-shy22222 My First Book Yes

2 43-shy43234 My Favorite Book No

3 55-shy12345 My New Book Yes

Table Bookstore

コード例例(Android)DynamoDBTable(tableName = Bookstore)

public static class Book

private int id

private String isbn title

private Boolean hardCover

DynamoDBHashKey(attributeName = id)

public int getId()

return id

public void setId(int id)

thisid = id

DynamoDBAttribute(attributeName=isbn)

public String getIsbn()

return isbn

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 77: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(Android)

Build a book objectBook book = new Book()booksetId(17)booksetIsbn(222-2222222222)booksetTitle(Some Title)booksetHardCover(true)

Save book object to dynmaoDBmappersave(book)

Update item and save object againbooksetTitle(Updated Title)booksetHardCover(false)mappersave(book)

Load another bookBook anotherBook = mapperload(Bookclass7)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 78: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 79: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ケース4画像や音楽をアップロードダウンロードしたいAmazon S3リージョン

3か所以上で自動複製

データセンターAデータセンターB

データセンターC

Joe Anna Bob

オンラインストレージ安全で耐久性があり拡張性の高い容量量無制限のマネージドオンラインストレージサービス

S3 Connector Transfer Managerbull マルチパートアップロード対応bull フォールトトレラントなダウンロードbull バックエンドサーバー不不要bull 自動リトライbull モバイルアプリネットワークに最適化するためのポーズレジュームキャンセル関数

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 80: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(Android)

Creating the transfer manager TransferManager = new TransferManager(credentialProvider)

Upload image Upload upload = transferManagerupload(BUCKET_NAME fileName file) Download image Download download = transferManagerdownload(BUCKET_NAME mKey file)

Pause and Resumetry

PersistableDownload = downloadpause()do something if we didnrsquot abort

catch(PauseException e) do something if we aborted

download = transferManagerresumeDownload(persistableDownload)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 81: AWSにおける モバイル向けサービス及び事例紹介(20151211)

コード例例(iOS)

Creating the transfer manager selftransferManager = [S3TransferManager new] selftransferManagers3 = s3client

Upload image [selftransferManager uploadFilefileName bucketbucketNamekeyobjectName] Download image [selftransferManager downloadFilefileName bucketbucketNamekeyobjectName]

Pause Resume Cancel [selftransferManager pauseAllTransfers] [selftransferManager resumeAllTransfers] [selftransferManager cancelAllTransfers]

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 82: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 83: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon S3 Amazon CloudFront

Webサイトホスティング機能(Amazon S3)静的なWebサイトをS3のみで配信可能任意のドメインへのリダイレクトも独自ドメイン利利用可能

Amazon CloudFrontマネージドCDN世界53箇所のエッジロケーションストリーミング配信も対応

クライアント

レスポンス向上 負荷軽減

AmazonCloudFront

キャッシュ

配信 オフロード

Webサーバ

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 84: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 85: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Lambdaファンクション ステートレストリガーベースのコード実行行

AWS Lambda

あらゆるスケールで高性能費用対効果が高く効率率率的

インフラ管理理不不要

使った分だけの支払いリクエスト量量に応じて自動的に

キャパシティ調整100ms単位のコンピュート課金金

自身のコードを持ち込み

標準的な言語でコードを実行行スレッドプロセスファイルやシェルスクリプトも利利用可能

インフラではなくビジネスロジックに集中可能

コードをアップロードするだけでLambdaが全てをハンドリング

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 86: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Lambda

インフラを一切切気にすることなくアプリケーションコードを実行行できるコンピュートサービス

bull 実行行基盤は全てAWSが管理理bull AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull VPC内のリソースへのアクセスも近日サポート

Lambda functionbull JavaScript(Nodejs)およびJavaPythonで記述bull サードパーティライブラリも利利用可能

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 87: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Lambdaの利利用例例

S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行

AWS LambdaAmazon S3 Bucket イベント

元画像 サムネイル画像

1

2

3

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 88: AWSにおける モバイル向けサービス及び事例紹介(20151211)

イベントソース

現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDBStreams(Preview)bull Amazon Cognitobull Amazon SNSbull Alexa AppKitbull Amazon SWFbull Amazon SES inbound mailbull Amazon CloudWatch Logsbull Amazon Connected Home (Preview)bull AWS IoT

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 89: AWSにおける モバイル向けサービス及び事例紹介(20151211)

株式会社リブセンス

成功報酬型アルバイト求人サイトジョブセンス

転職クチコミサイト転職会議

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 90: AWSにおける モバイル向けサービス及び事例紹介(20151211)

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 91: AWSにおける モバイル向けサービス及び事例紹介(20151211)

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 92: AWSにおける モバイル向けサービス及び事例紹介(20151211)

画像配信サーバ

各種DB

処理理A 処理理B 処理理C

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

前段ジョブに依存した処理理内容

bull 各社のフォーマットを扱うことによる『違いの吸収層』の複雑化

bull ジョブが段階を持っているのでスケールさせにくい

bull 前段ジョブに依存した処理理機構のためサービス改善が大変

bull サーバメンテナンスの複雑化

bull バッチによるサービス内容の劣劣化

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 93: AWSにおける モバイル向けサービス及び事例紹介(20151211)

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャ

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 94: AWSにおける モバイル向けサービス及び事例紹介(20151211)

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理D変換処理理B

書き込み処理理

API Gateway

入力力層 サービス層 ストア層

Kinesis

新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい

bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる

bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる

bull リアルタイム処理理への移行行が簡単

httpsspeakerdeckcomtakesinodakinesis-shywoshi-shytutasutorimingunabatutishi-shyxing-shyji-shypan-shyfalseshi-shyzhuang

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 95: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 96: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon API Gateway

vWeb APIの作成保護運用と公開を簡単に

v OSキャパシティ等インフラの管理理不不要

vバックエンドとしてLambda既存Webシステムを利利用可能

vスロットリングキャッシュ

Mobile Apps

Websites

Services

API Gateway

AWS Lambda functions

AWS

API Gateway Cache

Endpoints on Amazon EC2 Amazon Elastic Beanstalk

Any other publicly accessible endpoint

Amazon CloudWatch Monitoring

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 97: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Managed

フルマネージドなサーバレスアーキテクチャ

InternetMobile appsAWS Lambda functions

AWS

API Gateway cache

Endpoints on Amazon EC2

Any other publicly accessible endpoint

Amazon CloudWatch

Amazon CloudFront

API Gateway

API GatewayOther AWS services

AWS Lambda functions

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 98: AWSにおける モバイル向けサービス及び事例紹介(20151211)

従来の一般的なWebアーキテクチャWebAPサーバをEC2で構築ELBを配置しスケーラブルな構成にWebサーバは冗長化DBはRDSによるMulti AZ構成もしくはEC2上で構築EC2等のインフラは常時稼働

bull オートスケーリングするとしても最低限必要な分は常時起動

【課題】インフラ構築インフラの運用管理理

bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用

ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保

etc

Web

DB

LB

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 99: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 100: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 101: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 102: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 103: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行うLambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 104: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 105: AWSにおける モバイル向けサービス及び事例紹介(20151211)

API Gateway + Lambdaが実現するサーバレスアーキテクチャ

JavaScriptネイティブアプリによるUI実装

JavaScriptおよび静的コンテンツはS3に保存して配信

bull CloudFront経由の配信

ロジックはAPI化bull API Gatewayを利利用bull バックエンドとしてLambdaを利利用

JavaScriptiOSAndroidはAPIを呼び出しbull Viewの構築は各クライアント上で行行う

Lambdaファンクションから各AWSサービスを利利用

API GWLambdaともにEC2を利利用したシステムへのアクセスも当然可能

Lambda

API Gateway

AWSサービス

クラウドサービスを活用することでサーバ(EC2)を利利用せずに構成するアーキテクチャ

S3

CloudFront

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 106: AWSにおける モバイル向けサービス及び事例紹介(20151211)

VidRoll課題bull EC2の管理理が難しくなりつつあった

bull ITインフラではなくビジネスへのフォーカスが必要

解決方法bull プレイヤーがAPI Gateway経由でLambdaを実行行

bull 動画のリアルタイム変換にも利利用

ベネフィットbull 生産性が向上し収益が10倍になってもエンジニアの追加なし

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 107: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 108: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

世界中のユーザにクロスプラットフォームでプッシュ通知個々の通知だけでなく多数の受信者への同報通知も可能

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 109: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Mobile Pushはユーザに対しある瞬間一緒に生活することを可能にした 例例えば数マイル離離れていても

2010年年サンフランシスコで設立立

親しい友人や家族といった身近な人向けにデザインされたソーシャル

2つのアプリ3プラットフォーム20言語

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 110: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Path

一夜にしてゼロから500ミリオン日までの成長

高い可用性と信頼性速度度

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 111: AWSにおける モバイル向けサービス及び事例紹介(20151211)

典型的なユースケース

ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい

データデータの同期をしたいデータベースを使いたい

メディアファイル画像音楽を保存したいアセットを配信したい

ロジックサーバサイドで処理理したい独自APIを用意したい

メッセージプッシュ通知を送りたい

テスト実機でテストしたい

ltTESTgt

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 112: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AndroidiOSFire OSアプリをアップ

ロードしテスト内容を設定してデバイス

を選択する

選択したデバイスをまたいで並列列にアプリをテストできる迅速かつ安全である

バグパフォーマンスその他の問題を数分のうちに詳細にレポートする

YOURAPP +

AWS Device FarmAWS クラウドにホスティングされた数多くのスマートフォンタブレットその他の 実デバイスで迅速かつ安全に AndroidiOSFire OS アプリをテストして品質を向上できる

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 113: AWSにおける モバイル向けサービス及び事例紹介(20151211)

デバイスbullデバイスのプロファイルは製造メーカー型モデルOS バージョンキャリアの組み合わせであるbullAWS データセンターにホスティングされておりユーザーの要求に応じてスケールできるbull十分なキャパシティ(多くの同一のデバイスプロファイル)を保有しているbullルート権限では動作しないbull市場情報に基づいてデバイスは用意され新しいデバイスが発売されたら追加される

新しいデバイス最新のデバイスセットを利利用できる

AWS データセンター

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 114: AWSにおける モバイル向けサービス及び事例紹介(20151211)

複数のフレームワークをサポート

テストオートメーションフレームワークbullAppium(JUnit TestNG)bullCalabashbullInstrumentation(JUnit Espresso Robotium)bulluiautomator

ポイントbullプロジェクトごとに最適なソリューションを使ってテストを作れるbull開発チームと QA チームで要件が異異なってもひとつの共通プラットフォームに統合できるbull新しく出現してくるフレームワークもサポートされることで統合できる

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 115: AWSにおける モバイル向けサービス及び事例紹介(20151211)

IHS Spherareg First Reporttrade

bull 安全上のインシデントやニアミスの情報をレポートbull オフライン利利用可能bull カメラで撮影した画像の添付に対応bull AndroidiOS

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 116: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 117: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

PMease QuickBuildbull Javaベースのクロスプラットフォームな自動ビルドサーバbull AndroidとiOS向けの自動ビルドbull HockeyAppとTestFlightを通じたベータ配布bull シミュレータに対するAppium UI テストの実行行bull マイルストーンビルドはAWS Device Farmへ送付

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 118: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Appiumbull 各種言語で書かれたテストを実行行可能なフレームワーク

bull Ex Ruby Python Java JavaScript PHP Cbull 各言語のテストランナーを利利用

bull Ex JUnit for Java NUnit for Cbull 既存のネイティブアプリ向けUIテスト自動化フレームワークを利利用

bull UIAutomation ndash iOSbull UIAutomator ndashAndroid

bull テストのための特別なビルドが不不要でありテストしたビルドをそのまま出せる

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 119: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

HockeyAppbull AndroidiOSとWindowsへのベータ配布bull iOS ndashプロビジョニングプロファイルが必要

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 120: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 121: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Etsy

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 122: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Etsybull iOS Android向けに4つのアプリを提供bull アプリ開発の専任チームなしbull 2週間に一度度のリリースbull 2人のリリースマネージャと8人のQAスタッフ(Web+Mobile)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 123: AWSにおける モバイル向けサービス及び事例紹介(20151211)

物理理デバイス上でのテスト

bull AWS Device Farm

bull テストジョブのスケジュール化とテスト結果収集のためにJenkins pluginを使用

bull 30分毎にスケジュールされたテスト実行行

bull Espresso(Android)とKIF(iOS)を実行行

bull デバイス上でのパフォーマンスメトリクス収集用にファンクショナルテストを使用

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 124: AWSにおける モバイル向けサービス及び事例紹介(20151211)

対象デバイスの選択

Google Analyticsを利利用してよく利利用されるdevicesOS解像度度を確認

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 125: AWSにおける モバイル向けサービス及び事例紹介(20151211)

いろいろあってよくわからないというあなたへ

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 126: AWSにおける モバイル向けサービス及び事例紹介(20151211)

数多くのサービス

1 どのサービスを使うべきか 2 どうやってそれらをつなぎ合わせるか

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 127: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 128: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile Hub (Beta)

1 単一の統合されたコンソール

2 事前に用意された機能群

3 サービスを自動でプロビジョニング

4 自動生成されたアプリケーション

つまり数分でAWS上にアプリを構築

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 129: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile Hub (Beta)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 130: AWSにおける モバイル向けサービス及び事例紹介(20151211)

プロジェクトの作成と機能の追加

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 131: AWSにおける モバイル向けサービス及び事例紹介(20151211)

ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須

サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)

クイックスタート用アプリにサインイン画面を追加

Powered by Amazon Cognito Identity

例例User Sign-shyin(ユーザサインイン)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 132: AWSにおける モバイル向けサービス及び事例紹介(20151211)

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択

Powered by Amazon SNS

例例Push通知

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 133: AWSにおける モバイル向けサービス及び事例紹介(20151211)

スターターアプリのダウンロード

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 134: AWSにおける モバイル向けサービス及び事例紹介(20151211)

AWS Mobile Hub(BETA)

bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供

bull 関連サービスの設定と構築を自動で

bull AWS Management Consoleから利利用可能

bull 現在はUS-shyEast-shy1のみ東京リージョンとダブリンは近くサポート予定

bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 135: AWSにおける モバイル向けサービス及び事例紹介(20151211)

事例例

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 136: AWSにおける モバイル向けサービス及び事例紹介(20151211)

株式会社ガリバーインターナショナル

v 全国の営業担当者が利利用するiPad による査定システムを刷新

v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新

v 今後はAmazon API Gateway を活用したAPI化も進めていく予定

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 137: AWSにおける モバイル向けサービス及び事例紹介(20151211)

株式会社すかいらーく

詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照

httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp

Thanks

Page 138: AWSにおける モバイル向けサービス及び事例紹介(20151211)

Thanks