Upload
keisuke-nishitani
View
3.168
Download
1
Embed Size (px)
Citation preview
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
自己紹介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
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
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
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
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
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
はサーバやストレージといった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
もう少し具体的に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
無料料でお試し出来ます
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
ベーシック デベロッパー ビジネス エンタープライズ
フォーラム 利利用可能 利利用可能 利利用可能 利利用可能
サポートへのコンタクト
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
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
日本のお客様は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
世界中の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
もちろん日本の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
モバイルアプリも
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
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
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
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
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
モバイル開発で考えるべき
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
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
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
どうやって差別化するか
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
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
アプリ開発とくに差別化のための開発に集中できる
様々な課題
開発者が直面する課題
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
様々な課題
開発者が直面する課題
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
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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
(参考)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
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
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
未認証ユーザのゲストアクセス(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
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
ユーザ状態の遷移
当初はゲストユーザとして
ユーザ状態の遷移
その後アカウント登録
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
ユーザ状態の遷移
その後アカウント登録
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
ユーザ状態の遷移
複数のアカウントをリンク
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
コード例例(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
コード例例(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
(参考)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
モバイル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
セキュアな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
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
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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
ビジネス上重要な指標
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
継続率率率のトラッキング
ユーザの継続率率率はマーケティング新機能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
アプリ固有のアクションに関して行行動分析が可能
特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能
サンプル
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
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
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
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
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
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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
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
コード例例(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
コード例例(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
モバイルアプリ(デバイス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
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
モバイルアプリ
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
コード例例(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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
ケース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
コード例例(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
コード例例(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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
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
イベントソース
現時点では以下の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
株式会社リブセンス
成功報酬型アルバイト求人サイトジョブセンス
転職クチコミサイト転職会議
画像配信サーバ
各種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
画像配信サーバ
各種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
画像配信サーバ
各種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
画像配信サーバ
各種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
各物件情報提供元
連携サーバ
元データ
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
各物件情報提供元
連携サーバ
元データ
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
従来の一般的な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
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
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
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
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
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
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
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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
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
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
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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
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
デバイス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
複数のフレームワークをサポート
テストオートメーションフレームワーク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
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
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
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
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
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
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
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
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
物理理デバイス上でのテスト
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
対象デバイスの選択
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
いろいろあってよくわからないというあなたへ
数多くのサービス
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
数多くのサービス
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
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
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
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
プロジェクトの作成と機能の追加
ユーザがどのようにサインインするか設定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
ユーザがどのようにサインインするか設定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
アプリへのプッシュ通知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
スターターアプリのダウンロード
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
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
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照
httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp
Thanks
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照
httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp
Thanks
株式会社すかいらーく
詳細はクラスメソッド株式会社のブログ「DevelopersIO」を参照
httpdevclassmethodjpcloudskylark-shybamiyan-shymobile-shyapp
Thanks
Thanks