Upload
keisuke-nishitani
View
1.330
Download
4
Embed Size (px)
Citation preview
Keisuke NishitaniSolutions Architect
Amazon Web Services Japan KK
Scale Your Business without Servers
自己紹介Name 西谷圭介Twitter Keisuke69Profile Role Solutions ArchitectCustomers [ Web Services Start-‐‑‒uprdquo
]Services [ Amazon API GatewayrdquoAWS LambdaAll Mobile Servicesrdquo
]
Photo credit CollegeDegrees360 via Visual Hunt CC BY-SA
アプリケーション開発における課題
大きく
Photo credit donnierayjones via VisualHunt CC BY
2つ
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
自己紹介Name 西谷圭介Twitter Keisuke69Profile Role Solutions ArchitectCustomers [ Web Services Start-‐‑‒uprdquo
]Services [ Amazon API GatewayrdquoAWS LambdaAll Mobile Servicesrdquo
]
Photo credit CollegeDegrees360 via Visual Hunt CC BY-SA
アプリケーション開発における課題
大きく
Photo credit donnierayjones via VisualHunt CC BY
2つ
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Photo credit CollegeDegrees360 via Visual Hunt CC BY-SA
アプリケーション開発における課題
大きく
Photo credit donnierayjones via VisualHunt CC BY
2つ
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
大きく
Photo credit donnierayjones via VisualHunt CC BY
2つ
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
必要だが面倒なことや様々な課題にどう対処するか
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
どうやって差別化するか
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
クラウドファーストからクラウドネイティブへ
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
クラウドネイティブとは
vクラウドで提供されるサービス利利用を前提に構築するシステムおよびアプリケーション
v仮想サーバ上で1から全てを作り込むのではなく効率率率的にアプリケーションを実装
vビジネスの差別化ポイントへの集中v究極的にはビジネスに直結するアプリケーションの開発管理理のみを目指す
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
アプリ開発とくに差別化のための開発に集中できる
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
クラウドをフル活用したアーキテクチャ
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
従来の一般的な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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスアーキテクチャ(2-Tier Architecture)
v 各クライアント向けSDKからの直接操作
v AWSアクセスに必要なCredentialはCognitoを利利用してセキュアに取得
モバイルからダイレクトにAWSサービスを利利用するアーキテクチャ
AndroidiOSSDK
JavaScriptSDK
DynamoDB SNS S3 LambdaCognito
Credentialの取得 直接操作
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスアーキテクチャ
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
解決される課題
不不要(各サービスが適切切にハンドリング)
不不要
インフラ構築 rarr 不不要インフラの運用管理理
bull キャパシティbull スケールbull デプロイbull 耐障害性bull モニタリングbull ロギングbull セキュリティパッチの適用
ビジネスの差別化には直接繋がらない機能のアプリ実装bull 認証bull スロットリングbull スケーラビリティの確保
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスで全部できます
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスで全部できます
やりたいことだけに集中できる
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスで全部できます
ビジネスロジックだけに集中できる
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
サーバレスアーキテクチャのメリット
アプリの開発に多くのメリットbull バックエンド側のコードが減るため開発コストを最小化bull バックエンド側のサーバが減るため運用コストを最小化bull AWSによってマネージされるためスケーラビリティやキャパシティセキュリティの心配不不要
bull 非常にコスト効率率率化が高いため多くの場合コスト減が見見込める
必要に応じてEC2も導入できる安心感bull 汎用的なサービスでは実現の難しいビジネス固有の要件に関してはEC2を利利用して実装
bull EC2を利利用する部分についてもCodeDeployやElastic BeanstalkOpsWorks等で自動化
開発者がビジネスにフォーカスできる
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
「何をするか」を書くだけでいい
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
「何をするか」を書くだけでいいAll you need is code
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
(参考)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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
未認証ユーザのゲストアクセス(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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ユーザ状態の遷移
当初はゲストユーザとして
ユーザ状態の遷移
その後アカウント登録
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ユーザ状態の遷移
その後アカウント登録
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ユーザ状態の遷移
複数のアカウントをリンク
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
(参考)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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
セキュアな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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ビジネス上重要な指標
1 Monthly Active Users (MAU)
2 Daily Active Users (DAU)
3 New Users 4 Daily Sessions 5 Sticky Factor 6 1-Day 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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
継続率率率のトラッキング
ユーザの継続率率率はマーケティング新機能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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
アプリ固有のアクションに関して行行動分析が可能
特定イベントの発生頻度度に関するレポートを提供各イベントに属性やメトリックを追加可能
サンプル
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-app 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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Forza Football
60スコア速報 投票プッシュ通知
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
PENETRATION
61
users per capita
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
LEVERAGE ON MISSION
62
VOTE per country
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
DEVICES
63
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
モバイルアプリ(デバイス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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
モバイルアプリ
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Id isbn Title hardCover1 22-22222 My First Book Yes
2 43-43234 My Favorite Book No
3 55-12345 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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい
メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Amazon Kinesis
データのストリーミング処理理のためのマネージドサービス
Data Sources
AWS Endpoint
App1
[Aggregate amp De-‐‑‒Duplicate]
Data Sources
Data Sources
S3
Redshift
App3[Sliding Window Analysis]
Availability Zone
Shard 1Shard 2Shard N
Availability Zone
Availability Zone
Amazon Kinesis
データINPUT
データOUTPUT 各種処理理データ保持
低レイテンシー 高信頼性(3AZ 24h)
容易易なインテグレーション
Pluggableアーキテクチャ
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Amazon Kinesis基本構成パターン
v 出来る限り最小単位のサービスで構成v データ処理理をAWS LambdaもしくはAmazon EC2上で実行行する
v Kinesis Client Libraryを使うことで容易易にアプリ開発を実現
アプリ2
Dashboardアプリ1(KCL)
Redshift
DynamoDB
Data Sources
Data Sources
Data Sources
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ケース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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
コード例例(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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
AWS Lambdaの利利用例例
S3に画像がアップロードされたときにサムネイルの生成やリサイズを実行行
AWS LambdaAmazon S3 Bucket イベント
元画像 サムネイル画像
1
2
3
イベントソース
現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
イベントソース
現時点では以下のAWSサービスをサポートbull Amazon S3bull Amazon Kinesisbull Amazon DynamoDB Streams(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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
株式会社リブセンス
成功報酬型アルバイト求人サイトジョブセンス
転職クチコミサイト転職会議
画像配信サーバ
各種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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
画像配信サーバ
各種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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
画像配信サーバ
各種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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
画像配信サーバ
各種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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
各物件情報提供元
連携サーバ
元データ
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-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
各物件情報提供元
連携サーバ
元データ
Lambda
処理理C
RDS
画像配信S3
CloudSearch
変換処理理A
PUT
処理理D変換処理理B
書き込み処理理
API Gateway
入力力層 サービス層 ストア層
Kinesis
新アーキテクチャbull ステートレスの制約や簡易易に並列列化できるところからバッチ起因のサービス改善がやりやすい
bull API GWを追加することでバッチでは無い連携機能を追加する標準化されたインターフェースを定義できる
bull 個別の連携処理理共通の処理理ストア処理理それぞれについて簡単にスケールを適切切にできる
bull リアルタイム処理理への移行行が簡単
httpsspeakerdeckcomtakesinodakinesis-woshi-tutasutorimingunabatutishi-xing-ji-pan-falseshi-zhuang
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自APIを用意したい
メッセージプッシュ通知を送りたい
テスト実機でテストしたい
ltTESTgt
データの同期をしたいデータベースを使いたい大量量のデータを集めたい
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Amazon API Gateway
複数バージョンや複数環境へのデプロイを管理理
APIの定義とホスティング
クラウド上のリソースへのアクセス認証におけるAWS IAMの活用
AWSのAuthを活用
バックエンド保護のためのDDoS対策やリクエストのスロットリング
ネットワークトラフィックの管理理
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利利用可能
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利利用したレイテンシの軽減とDDoS対策
iOSAndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request Responseにおけるデータ変換
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
(参考)Swaggerを利利用したAPI定義
v Swaggerを利利用してAPI設定を全て行行うことが可能
v AWS固有のパラメータをサポートするextention
v Amazon API Gateway Swagger Importerを利利用したAPI定義の作成と更更新デプロイ
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Method Response
Integration Request
Method Request
Method
(参考)Swaggerを利利用したAPI定義
users
postsummary Registers a new userconsumes- applicationjson
produces
- applicationjsonparameters- name NewUserin bodyschema
$ref definitionsUserrsquox-amazon-apigateway-integrationtype awsuri arnawsapigatewayus-east-1lambdapath2015-03-31
credentials arnawsiam964405213927rolepet_store_lambda_invoke
responses200
schema$ref definitionsRegisterUserResponse
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
典型的なユースケース
ユーザユーザ認証をしたい適切切な権限を与えたい行行動分析をしたい
データ メディアファイル画像音楽を保存したいアセットを配信したい
ロジックサーバサイドで処理理したい独自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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
デバイス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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
複数のフレームワークをサポート
テストオートメーションフレームワーク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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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 ndash Android
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
物理理デバイス上でのテスト
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
対象デバイスの選択
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
いろいろあってよくわからないというあなたへ
数多くのサービス
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
数多くのサービス
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
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-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
AWS Mobile Hub (Beta)
プロジェクトの作成と機能の追加
ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須
サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)
クイックスタート用アプリにサインイン画面を追加
Powered by Amazon Cognito Identity
例例User Sign-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
プロジェクトの作成と機能の追加
ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須
サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)
クイックスタート用アプリにサインイン画面を追加
Powered by Amazon Cognito Identity
例例User Sign-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
ユーザがどのようにサインインするか設定bull サインインなしオプショナルもしくは必須
サインインプロバイダを設定bull Facebook (Google Twitter Amazon etc)bull 独自のシステム(認証基盤)
クイックスタート用アプリにサインイン画面を追加
Powered by Amazon Cognito Identity
例例User Sign-in(ユーザサインイン)
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App demonstrates featuresクイックスタートアプリでは以下の機能をデモbull 通知のEnableDisablebull SNSを使ったトークンの自動登録bull サブスクライブするトピックの選択
Powered by Amazon SNS
例例Push通知
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
スターターアプリのダウンロード
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
AWS Mobile Hub(BETA)
bullAWSを使ったモバイルアプリの開発を簡単にbull ユーザサインインといった典型的ユースケースごとのスターターコードを提供
bull 関連サービスの設定と構築を自動で
bull AWS Management Consoleから利利用可能
bull 現在はUS-East-1のみ東京リージョンとダブリンは近くサポート予定
bull AWS Mobile Hub自体のご利利用は無料料利利用する各サービスの費用はかかります
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
事例例
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
株式会社ガリバーインターナショナル
v 全国の営業担当者が利利用するiPad による査定システムを刷新
v 査定システムは当初EC2上に構築されていたがAmazon DynamoDBAWS LambdaAmazon Cognito等を組み合わせたシステムに刷新
v 今後はAmazon API Gateway を活用したAPI化も進めていく予定
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
株式会社すかいらーく
v 中華レストラン「バーミヤン」の公式アプリv iOS Androidv 会員登録なしv クーポン配信v 店舗検索索
v クラスメソッド株式会社による開発
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
株式会社すかいらーく
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
株式会社すかいらーく
v利利用ユーザーが数百万人以上に増えても安定してサービスが稼働するアーキテクチャを目指した
vコンテンツ配信認可プッシュ通知などモバイルアプリに欠かせない機能をモバイルサービスをフル活用して構築
httpdevclassmethodjpcloudskylark-bamiyan-mobile-app
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
easy tenMobile app that helps you learn 10 new foreign words a day
Users have learned
170 000 000+new words
1 200 000+downloads
bull Featured in 85+ countriesbull Top 5 grossing apps overall (Russia)bull Top 8 grossing apps overall (Brazil)
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
スクリーンショット
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
これまでのアプローチ
vモノリシックなアプリを複数のEC2インスタンス上で稼働
v複雑なデプロイ一行行の変更更でも全体の再デプロイが必要
vスケーラビリティ俊敏性と新機能のバランスを取る必要があり頻繁なリリースができない
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Lambda consumer
S3
Mobile Analytics
DynamoDB
SQS
Amazon EMR
Amazon Cognito
Amazon Kinesis
Mobile app
Amazon Redshift
Lambda interface
S3 dump
DynamoDB log
Microservice Core
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
最後に
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Serverless
bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク
bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け
bull CLIとして提供bull AWSのオフィシャルツールではない
httpsgithubcomserverlessserverless
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中
Conclusion
まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード
マネージドサービスだけでは難しい箇所はEC2を使って実装
限りあるエンジニアリングリソースはビジネスの差別化に集中