146
Keisuke Nishitani Solutions Architect Amazon Web Services Japan K.K. Scale Your Business without Servers

Scale Your Business without Servers

Embed Size (px)

Citation preview

Page 1: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 2: 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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 3: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 4: Scale Your Business without Servers

大きく

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 5: Scale Your Business without Servers

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

どうやって差別化するか

クラウドファーストからクラウドネイティブへ

クラウドネイティブとは

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 6: Scale Your Business without Servers

どうやって差別化するか

クラウドファーストからクラウドネイティブへ

クラウドネイティブとは

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 7: Scale Your Business without Servers

クラウドファーストからクラウドネイティブへ

クラウドネイティブとは

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 8: Scale Your Business without Servers

クラウドネイティブとは

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 9: Scale Your Business without Servers

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

クラウドをフル活用したアーキテクチャ

従来の一般的な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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 10: Scale Your Business without Servers

クラウドをフル活用したアーキテクチャ

従来の一般的な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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 11: Scale Your Business without Servers

従来の一般的な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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 12: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 13: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 14: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 15: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 16: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 17: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 18: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 19: Scale Your Business without Servers

サーバレスアーキテクチャ(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 20: Scale Your Business without Servers

サーバレスアーキテクチャ

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 21: Scale Your Business without Servers

サーバレスで全部できます

サーバレスで全部できます

やりたいことだけに集中できる

サーバレスで全部できます

ビジネスロジックだけに集中できる

サーバレスアーキテクチャのメリット

アプリの開発に多くのメリット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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 22: Scale Your Business without Servers

サーバレスで全部できます

やりたいことだけに集中できる

サーバレスで全部できます

ビジネスロジックだけに集中できる

サーバレスアーキテクチャのメリット

アプリの開発に多くのメリット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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 23: Scale Your Business without Servers

サーバレスで全部できます

ビジネスロジックだけに集中できる

サーバレスアーキテクチャのメリット

アプリの開発に多くのメリット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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 24: Scale Your Business without Servers

サーバレスアーキテクチャのメリット

アプリの開発に多くのメリット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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 25: Scale Your Business without Servers

「何をするか」を書くだけでいい

「何をするか」を書くだけでいい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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 26: Scale Your Business without Servers

「何をするか」を書くだけでいい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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 27: Scale Your Business without Servers

典型的なユースケース

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

典型的なユースケース

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

データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい

典型的なユースケース

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

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

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 28: Scale Your Business without Servers

典型的なユースケース

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

データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい

典型的なユースケース

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

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

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 29: Scale Your Business without Servers

典型的なユースケース

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

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

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 30: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 31: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 32: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 33: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 34: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 35: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 36: Scale Your Business without Servers

(参考)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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 37: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 38: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 39: Scale Your Business without Servers

未認証ユーザのゲストアクセス(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 40: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 41: Scale Your Business without Servers

ユーザ状態の遷移

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

ユーザ状態の遷移

その後アカウント登録

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 42: Scale Your Business without Servers

ユーザ状態の遷移

その後アカウント登録

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 43: Scale Your Business without Servers

ユーザ状態の遷移

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

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 44: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 45: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 46: Scale Your Business without Servers

(参考)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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 47: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 48: Scale Your Business without Servers

セキュアな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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 49: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 50: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 51: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 52: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 53: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 54: Scale Your Business without Servers

ビジネス上重要な指標

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 55: Scale Your Business without Servers

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

ユーザの継続率率率はマーケティング新機能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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 56: Scale Your Business without Servers

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

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

サンプル

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 57: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 58: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 59: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 60: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 61: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 62: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 63: Scale Your Business without Servers

典型的なユースケース

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

データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 64: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 65: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 66: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 67: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 68: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 69: Scale Your Business without Servers

モバイルアプリ(デバイス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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 70: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 71: Scale Your Business without Servers

モバイルアプリ

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 72: Scale Your Business without Servers

典型的なユースケース

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

データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 73: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 74: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 75: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 76: Scale Your Business without Servers

典型的なユースケース

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

データデータの同期をしたいデータベースを使いたい大量量のデータを集めたい

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 77: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 78: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 79: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 80: Scale Your Business without Servers

ケース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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 81: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 82: Scale Your Business without Servers

コード例例(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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 83: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 84: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 85: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 86: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 87: Scale Your Business without Servers

AWS Lambda

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

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

bull コード実行行時間に対しての課金金でありコスト効率率率が非常に高いbull 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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 88: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 89: Scale Your Business without Servers

イベントソース

現時点では以下の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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 90: Scale Your Business without Servers

株式会社リブセンス

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

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

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

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

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

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

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

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

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 91: Scale Your Business without Servers

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

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

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

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

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

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

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 92: Scale Your Business without Servers

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

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

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

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

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

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

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 93: Scale Your Business without Servers

画像配信サーバ

各種DB

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

各物件情報提供元

これまでの構成

各社違うフォーマット

終わらない前段ジョブ

サーバのお守り

ロード時間の拡大

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

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

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

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

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

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

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 94: Scale Your Business without Servers

各物件情報提供元

連携サーバ

元データ

Lambda

処理理C

RDS

画像配信S3

CloudSearch

変換処理理A

PUT

処理理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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 95: Scale Your Business without Servers

各物件情報提供元

連携サーバ

元データ

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 96: Scale Your Business without Servers

典型的なユースケース

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

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

ロジックサーバサイドで処理理したい独自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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 97: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 98: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 99: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 100: Scale Your Business without Servers

(参考)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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 101: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 102: Scale Your Business without Servers

Managed

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

InternetMobile appsAWS Lambda

functions

AWS

API 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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 103: Scale Your Business without Servers

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

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

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

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

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

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

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

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

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

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

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

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

Path

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

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

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 104: Scale Your Business without Servers

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

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

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

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

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

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

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

Path

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

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

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 105: Scale Your Business without Servers

Amazon SNSMobile Push

Internet

Apple APNS

Google GCM

Amazon ADM

Windows WNS and MPNS

Baidu CP

業界初

Amazon SNS Mobile Push

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

Android Phones and Tablets

Apple iPhones and iPads

Kindle Fire Devices

Android Phones and Tablets in China

iOS

Windows Desktop and Windows Phone Devices

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

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

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

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

Path

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

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

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 106: Scale Your Business without Servers

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

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

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

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

Path

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

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

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 107: Scale Your Business without Servers

Path

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

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

移行行は簡単

10m

170m

500m

Day 1 Day 2 Day 3

Path Daily SNS Mobile Push Deliveries (millions)

hellipRising

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 108: Scale Your Business without Servers

典型的なユースケース

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

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

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

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

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

ltTESTgt

データの同期をしたいデータベースを使いたい大量量のデータを集めたい

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 109: Scale Your Business without Servers

AndroidiOSFire OSアプリをアップ

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

を選択する

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

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

YOURAPP +

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

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 110: Scale Your Business without Servers

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

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

AWS データセンター

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 111: Scale Your Business without Servers

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

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

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

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 112: Scale Your Business without Servers

IHS Spherareg First Reporttrade

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 113: Scale Your Business without Servers

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 114: Scale Your Business without Servers

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 115: Scale Your Business without Servers

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 116: Scale Your Business without Servers

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

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

TestFlightbull iOSへのベータ配布

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

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

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

bull AWS Device Farm

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

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

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

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

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 117: Scale Your Business without Servers

Developmenttesting process

Develop SCMcommit Automated

buildtrigger Automated

UI test(simulators)

always

Ismilestone

no

Beta deployto

manual testers

AutomatedUI test

(Device Farm)

yes

Etsy

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

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

bull AWS Device Farm

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

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

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

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

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 118: Scale Your Business without Servers

Etsy

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

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

bull AWS Device Farm

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

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

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

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

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 119: Scale Your Business without Servers

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

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

bull AWS Device Farm

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

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

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

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

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 120: Scale Your Business without Servers

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

bull AWS Device Farm

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

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

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

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

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 121: Scale Your Business without Servers

対象デバイスの選択

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

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 122: Scale Your Business without Servers

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

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 123: Scale Your Business without Servers

数多くのサービス

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

Identity Provider SDKs+

=

Example

Login screen amp integration code+

SDK

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 124: Scale Your Business without Servers

AWS Mobile Hub (BETA)

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 125: Scale Your Business without Servers

AWS Mobile Hub (Beta)

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 126: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 127: Scale Your Business without Servers

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

ユーザがどのようにサインインするか設定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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 128: Scale Your Business without Servers

ユーザがどのようにサインインするか設定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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 129: Scale Your Business without Servers

アプリへのプッシュ通知bull iOSAndroidbull 11 もしくはトピックQuickstart App 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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 130: Scale Your Business without Servers

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

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 131: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 132: Scale Your Business without Servers

事例例

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

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 133: Scale Your Business without Servers

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

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 134: Scale Your Business without Servers

株式会社すかいらーく

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 135: Scale Your Business without Servers

株式会社すかいらーく

株式会社すかいらーく

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 136: Scale Your Business without Servers

株式会社すかいらーく

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 137: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 138: Scale Your Business without Servers

スクリーンショット

これまでのアプローチ

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 139: Scale Your Business without Servers

これまでのアプローチ

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 140: Scale Your Business without Servers

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を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 141: Scale Your Business without Servers

最後に

Serverless

bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク

bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け

bull CLIとして提供bull AWSのオフィシャルツールではない

httpsgithubcomserverlessserverless

Conclusion

まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード

マネージドサービスだけでは難しい箇所はEC2を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 142: Scale Your Business without Servers

Serverless

bull 有志が作成したサーバレスなWebモバイルアプリケーションを構築するためのフレームワーク

bull ユーザの入力力内容を元に必要なCFテンプレートを自動生成bull LambdaファンクションのScaffoldと各種定義を自動生成bull デプロイするとAPI Gatewayのエンドポイントリソースを生成し対応するLambdaファンクションを紐紐付け

bull CLIとして提供bull AWSのオフィシャルツールではない

httpsgithubcomserverlessserverless

Conclusion

まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード

マネージドサービスだけでは難しい箇所はEC2を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 143: Scale Your Business without Servers

Conclusion

まずはサーバレスでの実装を検討bull ビジネスの差別化に繋がりにくいにも関わらず手間ヒマのかかる箇所はサービスを利利用してオフロード

マネージドサービスだけでは難しい箇所はEC2を使って実装

限りあるエンジニアリングリソースはビジネスの差別化に集中

Page 144: Scale Your Business without Servers