Upload
masayuki-kato
View
4.083
Download
0
Embed Size (px)
Citation preview
はじめに
ü 東急ハンズシンガポール店向けポイントシステム
ü 今日話す事
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
なぜEC2レスのフルマネージド?
ü 単純にワクワクする 〜エンジニアの性〜
ü コスト圧縮
→ EC2が半分以上を占める事が多いü 運用がつらい
→ Heartbleed、Shellshock、POODLE→ リザーブドインスタンス等々
フルマネージドサービスを積極活用せずに、何が、AWSの活用じゃ!フルマネージドこそ、クラウドの真髄ではありませんか!
ü ボスの意向
77
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は署名アルゴリズムなどを含むJSON2 Payloadは実際に送信したいJSONデータそのもの3 Signatureは、HeaderとPayloadを “.” で連結した文字列に対して、Headerに指定されたアルゴリズムで署名
既に、GoogleやMicrosoftも大規模に実装済み(OpenIDConnect)→ 実はAWS Cognitoでも採用されている
JSON Web Tokenとは。。。
2222
JSON Web Tokenとは
ü もし書き換えがあっても、Signatureでチェックができる。→ セッションハイジャック対策は忘れずに
ü Cognitoでも使用しているので、作成したモジュールの使い回しできる
ü ペイロード部にクライアントに渡しても良いデータ(ユーザーID等)をかけるので、Lambda上でいちいちDBアクセスしなくて良い。→ 非同期で動作するLambda(node.js)では、DBアクセス(同期処理)が減ら
せるのは非常に都合が良いです。
24
課題
ü ポイント増減のニアリアルタイム性
→ 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