SlideShare uma empresa Scribd logo
1 de 46
CognitoとSDKで
サーバーレスな
マルチデバイスアプリを
構築する
自己紹介
宮崎 博旨 (みやざき ひろよし)
https://www.facebook.com/hiroyoshi.miyazaki.7
仕事
・オンプレミスの業務システム開発が主
好きなもの
・登山
・ボードゲーム
今日しゃべること
懇親会で盛り上がるボードゲーム・カードゲーム
便利なManaged Identificationサービスである
AWS Cognitoについて
Cognitoって何?
Cognitoって何?
Cognitoって何?
コレ
Cognitoって何?
下記機能を提供するサービス
 ユーザーごとのID発行
 AWSサービスの操作権限取得
 ユーザーIDごとのデータストア/同期
例えばこういうアプリを
つくる場合
いちいちサインアップす
るのは面倒くさい
外部サービスと簡単に連携して
サインインしたい
異なるデバイス間で
データを同期したい
こういうトラブルを
起こしてしまう…
こういうトラブルを
起こしてしまう…
アクセスキーを埋め込んだコードを、気付かずにGitHub
にソースをアップしてしまう
↓
速攻でEC2インスタンスが不正利用される
↓
Amazonから$6000の請求が来る
↓
なんとか、不正利用分は請求なし ということで決着
それ、Cognitoで
解決できます
Cognitoを使うと
何がうれしいのか
外部サービス、または自作アプリのユーザIDごとに、一意
のIDを発行できる
外部サービスからのサインインが簡単に実現できる
Cognitoを使うと
何がうれしいのか
IDの発行状況はCognitoの管理画面で参照可能
Cognitoを使うと
何がうれしいのか
ユーザIDごとに任意のデータを保持できる
デバイス間でのデータ同期もできる!
Cognitoを使うと
何がうれしいのか
一時的なAWSリソースへのアクセストークンを
取得できる。コードにアクセスキーを埋め込まなくても
よい
↓こんな感じのコードで取得できる
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
});
AWS.config.credentials.get(function(){
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey =
AWS.config.credentials.secretAccessKey;
});
Cognitoを
はじめるには
必要なもの
①CognitoのサービスID
②Cognitoから利用するIAMロール
④外部サービス(Facebookなど)
の認証トークン
③認証に使う外部サービスの登録
Cognitoを
はじめるには
必要なもの
①CognitoのサービスID
→Cognitoの管理画面で発行する
Cognitoを
はじめるには
必要なもの
②Cognitoから利用するIAMロール
→Cognitoで認証したユーザーに与える権限
→ロールは、CognitoのID作成時に自動的に作成される
↓Cognitoの管理画面
Cognitoを
はじめるには
必要なもの
②Cognitoから利用するIAMロール
→Cognitoで認証したユーザーに与える権限
→ロールは、CognitoのID作成時に自動的に作成される
↓Cognitoの管理画面
ゲストユーザ
認証ユーザ
Cognitoを
はじめるには
必要なもの
③認証に使う外部サービスの登録
→Cognitoの管理画面で登録する
→認証を行うAmazonやFacebookのアプリID
Cognitoの使い方
AWS Sdkを使います。
CognitoのIDと、外部サービスの認証トークンを
指定して、
AWS.config.credentials.getを呼び出すだけ
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: { "graph.facebook.com" : ‘ACCESS_TOKEN’ }
});
AWS.config.credentials.get(function(){
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey =
AWS.config.credentials.secretAccessKey;
});
あれ?でも。。。
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'IDENTITY_POOL_ID',
Logins: { "graph.facebook.com" : ‘ACCESS_TOKEN’ }
});
AWS.config.credentials.get(function(){
var accessKeyId = AWS.config.credentials.accessKeyId;
var secretAccessKey =
AWS.config.credentials.secretAccessKey;
});
クライアント側のコードで
CognitoのIDを公開しても大丈夫なの?
安心してください
Cognitoの仕組み
外部サービスの認証プロバイダを使う場合
Cognitoの仕組み
外部サービスの認証プロバイダを使う場合
ここが
ポイント
Cognitoの仕組み
外部サービスの認証プロバイダを使う場合
Cognitoが
登録した
サービスに
問い合わせ
Cognitoの仕組み
外部サービスの認証プロバイダを使う場合
外部サービスでの
認証が確認された
ユーザーにのみ、
アクセス件付与
Cognitoの仕組み
自作の認証プロバイダを使う場合
Cognitoの仕組み
自作の認証プロバイダを使う場合
Cognitoは
IDを払い出すだけ
認証プロバイダへの
チェックなしで
大丈夫?
Cognitoの仕組み
自作の認証プロバイダを使う場合
ここが
ポイント
Cognitoの仕組み
自作の認証プロバイダを使う場合
ここが
ポイント
Cognitoの使い方
(自作プロバイダで認証)
getOpenIdTokenForDeveloperIdentityを呼び出すには、
「AmazonCognitoDeveloperAuthenticatedIdentities」
の権限を付与する必要がある
Cognitoの使い方
(自作プロバイダで認証)
「AmazonCognitoDeveloperAuthenticatedIdentities」
の権限が付与された環境
(Lambdaなど)の上で実行する必要がある
Cognitoの使い方
(データ同期)
ユーザーIDごとに、Datasetというテーブルに
Kay-value形式でデータ保存が可能
Cognitoの使い方
(データ同期)
ユーザーIDごとに、Datasetというテーブルに
Kay-value形式でデータ保存が可能
Identity Identity Identity
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
Cognitoの使い方
(データ同期)
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
PUT GET
クラウド上のDataSetに対して
追加/取得/削除/同期 が行える
Cognitoの使い方
(データ同期)
認証後、
CognitoSyncManagerから
openOrCreateDatasetを呼び出す
client = new AWS.CognitoSyncManager();
client.openOrCreateDataset("myDatasetName", function(err, dataset) {
dataset.get('myData', function(err, value) { }
}
Get,Put,Remove,Sync
などの処理を記載
Cognitoの使い方
(データ同期)
SYNCの場合は、成功時、失敗時、コンフリクト時、デー
タ削除時、の動作を指定可能
(例えば、コンフリクト発生時は、クラウド側のデータで
更新するか、デバイス側のデータで更新するか)
dataset.synchronize({
onSuccess: function(dataset, newRecords) {},
onFailure: function(err) {},
onConflict: function(dataset, conflicts, callback) {
for (var i=0; i < conflicts.length; i++) {
..コンフリクトデータごとの処理
}
}
})
Cognitoの使い方
(データ同期)
うーん、微妙なスペックかも。。
IDだけ取得して、データベースで管理したほうが
よい??
ユーザーごとのDatasetの最大サイズ 20MB
1Datasetの最大サイズ 1MB
DatasetのKey/Valueペアの最大個数 1024個
データ同期の
便利な機能
SNS経由でデータが
更新されたら通知する!
DataSet
Key1 Value1
Key2 Value2
Key3 Value3
SNS更新
通知
料金
ID発行、権限付与は無料!
データ同期については、データ容量と
同期回数によって従量課金
Twilioと一緒に
使う例
電話
SMSで認証コード送信
認証コードで認証
電話番号
認証コード生成
Cognitoを使って
いつの日か、完成させる!
ありがとうございました

Mais conteúdo relacionado

Mais procurados

AWS クラウドで構築するスマホアプリ バックエンド
AWS クラウドで構築するスマホアプリ バックエンドAWS クラウドで構築するスマホアプリ バックエンド
AWS クラウドで構築するスマホアプリ バックエンド
kaki_k
 
SmartBBSとデスクトップアプリ
SmartBBSとデスクトップアプリSmartBBSとデスクトップアプリ
SmartBBSとデスクトップアプリ
kstmshinshu
 
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Shinpei Ohtani
 

Mais procurados (20)

AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャAWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
 
PHP で始める AWS モバイルサービス - PHPカンファレンス_20150530
PHP で始める AWS モバイルサービス - PHPカンファレンス_20150530PHP で始める AWS モバイルサービス - PHPカンファレンス_20150530
PHP で始める AWS モバイルサービス - PHPカンファレンス_20150530
 
AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)AWSにおける モバイル向けサービス及び事例紹介(20151211)
AWSにおける モバイル向けサービス及び事例紹介(20151211)
 
SORACOM と Azure で IoT
SORACOM と Azure で IoTSORACOM と Azure で IoT
SORACOM と Azure で IoT
 
20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture
 
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
 
AWS クラウドで構築するスマホアプリ バックエンド
AWS クラウドで構築するスマホアプリ バックエンドAWS クラウドで構築するスマホアプリ バックエンド
AWS クラウドで構築するスマホアプリ バックエンド
 
5分でわかるAWS IoT! - あなたも今日からIoT生活 -
5分でわかるAWS IoT! - あなたも今日からIoT生活 -5分でわかるAWS IoT! - あなたも今日からIoT生活 -
5分でわかるAWS IoT! - あなたも今日からIoT生活 -
 
AWS IoTにおけるデバイスへの認証情報のプロビジョニング
AWS IoTにおけるデバイスへの認証情報のプロビジョニングAWS IoTにおけるデバイスへの認証情報のプロビジョニング
AWS IoTにおけるデバイスへの認証情報のプロビジョニング
 
SmartBBSとデスクトップアプリ
SmartBBSとデスクトップアプリSmartBBSとデスクトップアプリ
SmartBBSとデスクトップアプリ
 
Serverless Architecture on AWS(20151121版)
Serverless Architecture on AWS(20151121版)Serverless Architecture on AWS(20151121版)
Serverless Architecture on AWS(20151121版)
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
 
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
 
AWS IoTアーキテクチャパターン
AWS IoTアーキテクチャパターンAWS IoTアーキテクチャパターン
AWS IoTアーキテクチャパターン
 
Black Belt Online Seminar Amazon Cognito
Black Belt Online Seminar Amazon CognitoBlack Belt Online Seminar Amazon Cognito
Black Belt Online Seminar Amazon Cognito
 
BaaS vs. バース ホームラン対決 - AWS Summit Tokyo 2014 Lightning Talk
BaaS vs. バース ホームラン対決 - AWS Summit Tokyo 2014 Lightning TalkBaaS vs. バース ホームラン対決 - AWS Summit Tokyo 2014 Lightning Talk
BaaS vs. バース ホームラン対決 - AWS Summit Tokyo 2014 Lightning Talk
 
IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄
 
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピングAmazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
Amazon FreeRTOSを用いた量産向けIoTマイコンデバイス開発プロトタイピング
 
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
 
成長していくサービスとAWS
成長していくサービスとAWS成長していくサービスとAWS
成長していくサービスとAWS
 

Semelhante a CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する

Semelhante a CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する (20)

チャットボット開発を取り巻く環境と Cogbot コミュニティ
チャットボット開発を取り巻く環境と Cogbot コミュニティチャットボット開発を取り巻く環境と Cogbot コミュニティ
チャットボット開発を取り巻く環境と Cogbot コミュニティ
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
 
Introduction of Bridging IMS and Internet Identity
Introduction of Bridging IMS and Internet IdentityIntroduction of Bridging IMS and Internet Identity
Introduction of Bridging IMS and Internet Identity
 
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
 
さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~
 
Appc schoo 0219
Appc schoo 0219Appc schoo 0219
Appc schoo 0219
 
MicrosoftによるAIビジネスへの取組み
MicrosoftによるAIビジネスへの取組みMicrosoftによるAIビジネスへの取組み
MicrosoftによるAIビジネスへの取組み
 
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
パーソナルデータのあり方を変える!オープンソース分散型PDS「Personium」を使ってみよう!
 
20190628 kis open_seminar_decode
20190628 kis open_seminar_decode20190628 kis open_seminar_decode
20190628 kis open_seminar_decode
 
Aws io tで証明書を自動登録してデータをアップするまでのお話し
Aws io tで証明書を自動登録してデータをアップするまでのお話しAws io tで証明書を自動登録してデータをアップするまでのお話し
Aws io tで証明書を自動登録してデータをアップするまでのお話し
 
【de:code19】最高のゲームをつくろう! マイクロソフト Game Stack でゲーム開発をしよう!
【de:code19】最高のゲームをつくろう! マイクロソフト Game Stack でゲーム開発をしよう!【de:code19】最高のゲームをつくろう! マイクロソフト Game Stack でゲーム開発をしよう!
【de:code19】最高のゲームをつくろう! マイクロソフト Game Stack でゲーム開発をしよう!
 
IoT LT 大阪 20160406
IoT LT 大阪 20160406IoT LT 大阪 20160406
IoT LT 大阪 20160406
 
JAWS-UG東京 - 2019-09-26 - Gateway祭
JAWS-UG東京 - 2019-09-26 - Gateway祭JAWS-UG東京 - 2019-09-26 - Gateway祭
JAWS-UG東京 - 2019-09-26 - Gateway祭
 
20180119_AIを支えるクラウド技術
20180119_AIを支えるクラウド技術20180119_AIを支えるクラウド技術
20180119_AIを支えるクラウド技術
 
10種のセンサーを持つ SensorTag のデータをクラウドで遊ぼう!
 10種のセンサーを持つ SensorTag のデータをクラウドで遊ぼう! 10種のセンサーを持つ SensorTag のデータをクラウドで遊ぼう!
10種のセンサーを持つ SensorTag のデータをクラウドで遊ぼう!
 
What is tmcn for isit
What is tmcn for isitWhat is tmcn for isit
What is tmcn for isit
 
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
【de:code 2020】 ハンズオンで学ぶ AI ~ Bot Framework Composer + QnA Maker / Custom Visi...
 
Soracom ug
Soracom ugSoracom ug
Soracom ug
 
クラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポートクラウドを用いるIoT開発における実費レポート
クラウドを用いるIoT開発における実費レポート
 
Scale Your Business without Servers
Scale Your Business without ServersScale Your Business without Servers
Scale Your Business without Servers
 

Último

Último (12)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する