Copyright  ©  2015.  All  rights  reserved.
2015年9月8日
EC2レスに挑戦!
フルマネージドのポイントシステム
ハンズラボ株式会社
はじめに
ü 東急ハンズ シンガポール店向けポイントシステム
ü 今日話す事
1 自己紹介
2 ポイントシステム概要をざっくり
3 なぜEC2レスのフルマネージドか
4 AWS全体構成
5 要所クローズアップ
6 課題
ü お約束ですが現在もシステム開発中の為、このままの構成で運用していくかどう
かはご配慮ください。
1
自己紹介
ü 名前: 加藤 雅之
ü 所属: ハンズラボ株式会社
ü 担当: 外販案件(ポイントシステム)
ü 技術: Webシステム、インフラ
ü 出身: チーバくんの目と鼻の間
ü 趣味: ゴルフ、野球、お酒
ü 好きなAWSサービス:
(呑まれる)
2
ポイントシステム概要をざっくり
お客様
店舗
QR読み込み
ポイントシステム
ポイント付与
ポイント画面提示
ü 基本的な動きは一般的なポイントカード
1 お客様 スマホ(Web)でバーコード表示とポイント詳細等
2 店舗 ポイント付与: 会計時にPOS端末でバーコードを読み込み
ポイント使用: PC端末で会員ID打ち込み(金券発行)
会員ID打ち込み
会員情報確認
ポイント使用
ポイント画面提示
金券発行レシート発行
3
ポイントシステム概要をざっくり
ü 今日は秋のAWS  Lambda  &  API  Gateway  祭り
ü POSや売り上げのポイント云々の箇所は省略し、Webシステムとしてよく使う認証
を行っている部分についてクローズアップ
4
Copyright  ©  2015.  All  rights  reserved.
なぜEC2レスのフルマネージド?
なぜEC2レスのフルマネージド?
6
Amazon  RDS
AWS  Elastic  Beanstalk
一般的なWebシステム
6
なぜEC2レスのフルマネージド?
ü 単純にワクワクする 〜エンジニアの性〜
ü コスト圧縮
→ EC2が半分以上を占める事が多い
ü 運用がつらい
→ Heartbleed、Shellshock、POODLE
→ リザーブドインスタンス等々
フルマネージド サービスを積極活用せずに、
何が、AWSの活用じゃ!
フルマネージドこそ、クラウドの真髄ではあり
ませんか!
ü ボスの意向
77
なぜEC2レスのフルマネージド?
行こうぜ!
ピリオドの向こうへ・・・
88
Copyright  ©  2015.  All  rights  reserved.
ポイントシステム基盤 AWS全体構成
新ポイントシステム基盤 AWS全体構成
1010
1/3  ログイン認証(ID  Manager)
1111
2/3  ログイン認証後(動的データ取得)
1212
3/3  データ操作部(会員情報 /  ポイント)
1313
1/3  ログイン認証(ID  Manager)概要
14
2/3  ログイン認証後 動的データ概要
15
3/3  データ操作部(会員情報 /  ポイント)概要
16
Copyright  ©  2015.  All  rights  reserved.
・ 動的データはJSONのみを徹底
・ なぜCognitoか
・ JWT(JSON  Web  Token)
3.要所クローズアップ
動的データはJSONのみを徹底
ü トラフィック軽減
ü 分担作業での最適化
①. 静的ファイル(html/img/CSS/js/SDK)提供 → CloudFront
②. 動的情報JSON返却(ポイント等) → API  Gateway  -­ Lambda
③. デザイン → クライアント側でAjax描画
ü JSONデータのみを徹底する事で
→ Android  /  iOS  /  Web  で共通として使用できる
1818
なぜCognitoか
Cognitoには認証機能はないので、認証自体はLambda側で行う。
認証後の連携としてDeveloper  Authenticated  Identityという仕組みを使う。
→ API  Gateway  – Lambdaだけで認証管理すれば良いのでは?
1919
なぜCognitoか
ü セキュリティの向上
API  Gateway  で全公開したくない場合はAuthorization  typeでIAMを選択
→ API  Keyを認証としては使ってはいけない
→ IAMのCredentialをクライアントに直接書くのはセキュリティ上良くない
→ CognitoのAuth Roleでセンシティブな部分を楽にガードできる
ü 拡張性の向上
→ 複数のidPに簡単に対応可能 (Amazon  /  Facebook  /  google  …  )
→ Cognito IDで一元管理
→ 今後のアプリ対応も考えると端末変更も楽に対応可能
2020
なぜCognitoか
注意点
ü 3つの接続管理が必要
・STSのCredential有効期限は最大1時間
・Cognito の Open  ID  Tokenの有効期限は最大24時間
→ ログインをそれ以上維持させたい場合
・独自認証部分の有効期間をToken等で管理(Cookie等々…)
2121
JWT(JSON  Web  Token)
2015年5月に RFCのStandardになった規格
JWT(RFC7519 http://www.rfc-­editor.org/info/rfc7519)
CompactシリアライゼーションのJWSに、いくつかの有用なパラメータ名を導入して、
ログイン情報やアクセス許可情報を伝達できるようにしたもの
RESTfulなシステムでの利用を想定しているがそれ以外でも利用可能。
Tokenを分解するとHeaderとPayloadとSignatureという3つのセグメントから構成さ
れ、それぞれURL-­safe  Base64  Encodingしたもの。
1 Headerは署名アルゴリズムなどを含むJSON
2 Payloadは実際に送信したいJSONデータそのもの
3 Signatureは、HeaderとPayloadを “.”  で連結した文字列に対して、
Headerに指定されたアルゴリズムで署名
既に、GoogleやMicrosoftも大規模に実装済み(OpenID Connect)
→ 実はAWS  Cognitoでも採用されている
JSON  Web  Tokenとは。。。
2222
JSON  Web  Tokenとは
23
JSON  Web  Tokenとは
ü もし書き換えがあっても、 Signatureでチェックができる。
→ セッションハイジャック対策は忘れずに
ü Cognitoでも使用しているので、作成したモジュールの使い回しできる
ü ペイロード部にクライアントに渡しても良いデータ(ユーザーID等)をかけるので、
Lambda上でいちいちDBアクセスしなくて良い。
→ 非同期で動作するLambda(node.js)では、DBアクセス(同期処理)が減ら
せるのは非常に都合が良いです。
24
Copyright  ©  2015.  All  rights  reserved.
課題
課題
ü ポイント増減のニアリアルタイム性
→ StreamTrainでデータが流れるので、特に使用時のロック処理等が必要
ü レイテンシー(API  Gateway  /  Cognito のTokyoRegion)
→ 現在はUS-­West-­1に寄せている。CognitoはUS-­EAST-­1
ü Lambdaの開発設計
→ 1つのFunctionだけで見るとアップロードするだけで楽に見えるが、
moduleの共通化等をしようとすると急に面倒になる。
→ Github -­ CircleCIで自動デプロイを自作した
ü API  Gateway  -­ Lambdaの運用
→ Lambda側で新旧2系統持ち、API  GatewayのIntegrationを切り替えて
デプロイするBlue  /  Greenの要領で行う予定。Swaggerを使おう。
2626
募集中
求む!
・AWSエンジニア
・iOSエンジニア
・Webエンジニア
ハンズラボは積極的に技術者採用中です。
2727
Thank you.

フルマネージドのポイントシステム