Cognito + SNS + Zabbixで
サーバー監視アプリを作ってみた
JAWS-UG山形 芦野 光
トラック:[Aceに聞け]
自己紹介
 芦野 光
 宮城県仙台市在住
 専門学生
 JAWS-UG山形、仙台
 AWS歴:6ヶ月
 専門学校
 東北電子専門学校 高度ITエンジニア科 所属(4年課程)
 株式会社エスツー
 サーバーエンジニア(アルバイト勤務)
 最近のできごと
 AWS麻雀はじめました
アジェンダ
 AWSを知ったきっかけ と AWSを使ったきっか
け
 Amazon Cognito
 Amazon SNS
 アプリの紹介とデモ
AWSを知ったきっかけ
AWSってなに? クラウド?
VPS?
IaaS?
参加する前
通販のAmazonがサーバ屋さん?
PaaS?
参加してみた
AWS便利!!
参加した後
AWSを使ったきっかけ
きっかけは、学校の授業の課題
 Androidのアプリ開発の授業。
 課題は「電話帳アプリ」の作成。
AWSを使ったきっかけ
課題の開発自体は順調でしたが・・・
追加の仕様変更が。。
クラウドと複数端末との同期機能?知らない。。
あれ、でも。
これ、AWSでもしかしたらできそう!?
探してみた
AWSを使ったきっかけ
 これ、AWSでもしかしたらできそう!?
 探してみる。
できそうな予感。
実装してみる
AWSを使ったきっかけ
できた!
Amazon Cognito
mobile client mobile client
Sync
Identity
Amazon Cognito
Amazon Cognitoとは
 Amazon Cognito
 AWSのモバイルサービス、2014年7月にリリース
 提供している内容は大きく2つ
 Sync
 クラウド上にモバイルと同期できるデータストアを提供。
 Identity Broker
 モバイルからAWS上へのリソースのアクセス認証と制御。
 提供しているリージョン
 US East (N. Virginia)
 EU (Ireland)
 AWS Mobile SDKサポート
Amazon Cognitoとは
 Sync
 クラウド上にモバイルと同期できるデータストアを提供。
 DatasetというテーブルにKey/Value形式でのデータの保存。
 オフラインでもローカルのデータが利用可能。
 同期時にコンフリクトの検知と発生時の処理実装が可能。
 複数デバイスをまたいだ同期が可能。
Amazon Cognitoとは
 Sync
Identitypool
Identity IdentityIdentity
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Dataset…
key value
1 Blue
2 Red
3 White
Amazon Cognitoとは
 Sync – 用語
 Identitypool
 アプリケーションのユーザアイデンティティを整理するコンテナ。
 AWSアカウント1つにつき60個作成可能。
 Identity
 ユーザアイデンティティ
 複数のデバイスで共有可能。
 複数のDatasetを持つ。
 Dataset(Key/Valueのテーブル,同期ストア)
 Dataset1つあたり、1MBまでのデータが保存可能
 Key/Value形式、Keyの数は最大1024個
 保存できるデータ
 英数字の文字列
 バイナリデータはBase64でエンコードすることで保存可能。
 1ユーザーあたり、Datasetの合計サイズの上限は20MB
Amazon Cognitoとは
 Sync
Identity Pool…(App)
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
Identity…(Device)
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
App
Pull
Push
synchronize
Amazon Cognitoとは
 Sync
Identity Pool…(App)
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
Identity…(Device)
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
App
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
Put
Get
Amazon Cognitoとは
 Sync
Identity Pool…(App)
Identity…(Device)
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
App
Pull
Push
synchronize
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
Conflict
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
Amazon Cognitoとは
 Syncのユースケース
 ゲームのセーブデータ。
 アプリの設定情報。
 電話帳の複数端末での同期。
Amazon Cognitoとは
 Identity Broker
 モバイルからAWS上のリソースへのアクセス認証と制御。
 AWS上のリソースをモバイルから直接利用できる。
(2 tier architecture)EC2なし構成ができる!
 アクセス認証
 OpenID Connect対応アイデンティティプロバイダーが利用可能
 Facebook,Googleなどのアカウントを用いて認証可能
 自前の認証基盤を利用することも可能
 Developer Authenticated Identities
 アクセス制御
 認証あり、認証なし(ゲスト)ユーザにそれぞれのアクセス制御を
IAMのRoleで割り当てができる。
Amazon Cognitoとは
 活用事例
 株式会社ガリバー 様
 クルマとの双方向コミュニケーションサービス
「DRIVE+」にてCognitoを認証基盤として採用。
 Concrete Software,Inc
 NHLホッケーターゲットスマッシュ(スマホアプ
リ)にて、ゲームデータの保存と認証に採用。
Amazon Cognitoとは
 Cognitoの便利な機能
 Cognitoストリーム(Kinessis連携)
 同期ストアの同期、更新情報をKinessisで取り扱うことが可能に。
 Push synchronization(SNS連携)
 複数デバイスで使っている同期ストアが更新されると
AmazonSNSからサイレントプッシュ通知され、
複数デバイスがクラウド上の同期ストアと同期を行う。
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
Amazon Cognito
new!
Amazon SNS
Dataset…
key value
1 Apple
2 Watermelon
3 Orange
Pull
Push
synchronize
synchronize
Push synchronization
Mobile Push
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
Dataset…
key value
1 Apple
2 Watermelon
3 Strawberry
料金(2015年3月22日 現在)
 同期と容量に対して課金
 容量
 同期ストアの容量 1 GB につき毎月 0.15ドル
 同期
 同期オペレーション 1 万回につき 0.15ドル
Amazon SNS
Amazon SNSとは
 Amazon Simple Notification Service
 AWSのモバイルサービス
 クラウド上からモバイルへのメッセージ配信サービス
 特徴
 マルチプロトコル対応
 クロスプラットフォーム対応(プッシュ配信)
 シンプル・スケーラブル
 AWS Mobile SDKサポート
Amazon SNSとは
 マルチプロトコル対応
 プッシュ
 Apple、Google、Fire OS、Windows デバイス対応
 SMS, E-mail
 テキストメッセージ
 HTTP/s
 任意の HTTP エンドポイントに配信
 SQS(Amazon Simple Queue Service)
 SNSからキューを登録
Amazon SNSとは
 クロスプラットフォーム対応
 異なるプラットフォームに対して、同じAPIで操作をサポート。
 メッセージサイズはネィテブプラットフォームが上限
 APNS(256B or 2KB)
 GCM(4096B)
Amazon SNSとは
 異なるプラットフォームのサポート ー 従来
APNS
GCM
WPNS
Hello
Hello
Hello
Hello
Hello
Hello
Amazon SNSとは
 異なるプラットフォームのサポート ー Amazon SNS
APNS
GCM
WPNS
Hello
Hello
Hello
Hello
Amazon
SNS
Amazon SNSを使ってみる1
 アプリケーションの登録
※事前にGoogle Cloud Messagingを許可する
プロジェクト(アプリ)のAPIキーの取得が必要
Amazon SNSを使ってみる2
 アプリケーションに送信先デバイスを登録
GCMとの初期通信時に発行されるデバイストークン
(送信先のアドレスのようなもの)を登録
Amazon SNSを使ってみる2
 アプリケーションに送信先デバイスを登録
GCMとの初期通信時に発行されるデバイストークン
(送信先のアドレスのようなもの)を登録
登録するとエンドポイントが生成されます。
Amazon SNSを使ってみる3
 トピックの作成
(メッセージを複数デバイスに一括送信できるグループ)
Amazon SNSを使ってみる4
 トピックにエンドポイントの追加( create subscription )
(一括送信するグループにデバイスを追加する)
Amazon SNSを使ってみる5
 トピックにエンドポイントの追加( create subscription )
(一括送信するグループにデバイスを追加する)
Amazon SNSを使ってみる6
 メッセージの送信
Amazon SNSを使ってみる6
 メッセージの送信
APIでも可能です!
Amazon SNSを使ってみる7
App Topic
EndPoint
EndPoint
EndPoint
EndPoint
Subscription(PUSH)
Subscription(PUSH)
Subscription(mail)
Topic
Subscription(SMS)
Amazon SNSとは
 SNSの便利な機能
 メッセージの配信結果の確認(CloudWatch連携)
 CloudWatch上で配信結果の確認が可能に
 イベントの通知
 登録したアプリケーションに、エンドポイントが追加、削除、更
新された際にイベント通知。
料金(2015年3月22日 現在)
料金表
アプリの紹介とデモ
Amazon SNSでサーバー監視通知
 Zabbixからのアラートをプッシュ通知にて受信。
 ポップアップ表示、通知音、バイブレーションなど
を用いてプッシュ通知をお知らせ。
 プッシュ通知で受信したアラートを一覧表示。
 プッシュ通知にはAmazon SNSを利用。
 アラートの複数端末同期にAmazon Cognitoを利用。
※ 画像は開発中のサンプルです。
デモ
仕組み1
Amazon
SNS
Amazon
EC2
(Zabbix)
Device
Token登録
仕組み1
Amazon
SNS
Amazon
EC2
(Zabbix)
Publish
Mobile
Push
仕組み2
Amazon
SNS
Amazon
EC2
(Zabbix)
Publish
(対応開始)
Mobile
Push
#slack
機能紹介
 アラートの一覧表示機能
 アラートの状況、ホスト名、トリガー名を表示。
 プッシュ受信と共にリアルタイムで表示。
 エスカレーション通知機能(少し実装)
 ※Zabbixのエスカレーション機能は使用しません。
 エスカレーション発生時に、メンバーに通知、状況を共有。
 Slackへの投稿(未実装)
 エスカレーション発生状況を自動でSlackに投稿。
 アラート状況をクラウドと複数端末間での同期(Cognito)
 SNSでプッシュが受信できなかった時の対策として
 定期的にクラウドの同期ストアと同期。
仕組み3
Amazon
EC2
(Zabbix)
Amazon Cognito
Sync
参考サイト
 Cognito
 http://techlife.cookpad.com/entry/2014/07/29/173726
 http://dev.classmethod.jp/cloud/aws/
 http://aws.amazon.com/jp/cognito/
 http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-
tech-amazon-cognito-amazon-mobile-analytics
 http://blog.takuros.net/entry/2015/01/20/070824
 http://mobile.awsblog.com/
 http://221616.com/gulliver/news/press/20140930-13992.html
 http://media.amazonwebservices.com/jp/csd20140909/KEY-01-03.pdf
 http://mobile.awsblog.com/post/Tx3LC2Y5I3MXF0K/Concrete-Software-
uses-Amazon-Cognito-for-NHL-Hockey-Target-Smash
 SNS
 http://www.slideshare.net/AmazonWebServicesJapan/20130917-aws-
meisterregenerateextrasnsmobilepushpublic?related=1
 http://aws.amazon.com/jp/sns/
ご清聴ありがとうございました

Amazon Cognito + SNS + Zabbixでサーバー監視アプリを作ってみた