59
Copyright © 2015. All rights reserved. 2015 年 11 年 03 年 JAWS Festa 年年 2015 年年年年年年年年年 年年年年 AWS 活活活活活活活活活活活活活活活活活活活

AWS活用のいままでとこれから -東急ハンズの事例-

Embed Size (px)

Citation preview

Page 1: AWS活用のいままでとこれから -東急ハンズの事例-

Copyright © 2015. All rights reserved.

2015 年 11 月 03 日JAWS Festa 九州 2015

ハンズラボ株式会社 井上泰治

AWS 活用の今までとこれから。 ー 東急ハンズの事例 ー

Page 2: AWS活用のいままでとこれから -東急ハンズの事例-

2

もくじ

1. 自己紹介

2. AWS 活用 今までとこれから

3. 東急ハンズの事例

Page 3: AWS活用のいままでとこれから -東急ハンズの事例-

3

自己紹介

名前: 井上 泰治

所属: ハンズラボ株式会社

担当:  EC システム、 AWS まわり

趣味: 旅行、音楽、日本酒

好きな AWS サービス: ElasticBeanstalk

Page 4: AWS活用のいままでとこれから -東急ハンズの事例-

4

2. AWS 活用 今までとこれから。

Page 5: AWS活用のいままでとこれから -東急ハンズの事例-

5

AWS の歴史 (抜粋)

2006 2007 2008 2009 2010 2011 2012 2013 2014 2015

S3EC2SQS

Tokyo Region

VPCRDSEMR DynamoDB

LambdaECSCognitoCodeDeploy

API GatewayMobile HubIoT

CloudFront

CloudFormationSNSIAMRoute53Beanstalk

RedshiftOpsWorksKinesis

デプロイ系サービス

コンピューティングマネージド OSS のマネージド

切り売り

ストリーム / ビッグデータ

モバイル /iOT

Page 6: AWS活用のいままでとこれから -東急ハンズの事例-

6

AWS の提供するもの

AWSサービス

汎用計算リソース

リソースのソフトウェア提供

OSS ソフトウェア

マネージドソフトウェアストレー

ネットワーク

( 半マネージド )

AWS サービスの増加、利用者側の意識変化により、使われ方も徐々に変化

Page 7: AWS活用のいままでとこれから -東急ハンズの事例-

7

OSS ソフトウェア

AWS 導入初期

汎用計算リソース

マネージドソフトウェアストレー

EC2

Apache / Nginx

PHP / Ruby

オンプレのシステムをとりあえず AWS にのせた状態

ネットワーク

AWSサービス

( 半マネージド )リソースのソフトウェア提供

MySQL 、 Redis

Page 8: AWS活用のいままでとこれから -東急ハンズの事例-

8

OSS ソフトウェア

マネージド・サービスの活用

汎用計算リソース

マネージドソフトウェアストレー

ネットワーク

AWSサービス

( 半マネージド )リソースのソフトウェア提供

EC2

EC2 に乗せていたソフトウェアをマネージドシステムへの移行

Elasticache

RDS

ElasticSearch

SQS

DynamoDB

Redshift

S3 EMR

Page 9: AWS活用のいままでとこれから -東急ハンズの事例-

9

EC2 管理コストの削減

この状態の場合、 EC2 の保守運用が残る

汎用計算リソース

OSS ソフトウェア

マネージドソフトウェア

ストレージ

利用

利用

利用

EC2

EC2 が各サービスを利用する状態

EC2 の運用負荷を下げるには…

Page 10: AWS活用のいままでとこれから -東急ハンズの事例-

10

EC2 管理コストの削減

マネージドシステムから EC2 を使う

汎用計算リソース

OSS ソフトウェア

マネージドソフトウェア

ストレージ

利用

利用

利用

EC2

マネージドソフトウェア

Beanstalk

EC2 を直接使わないことで運用負荷の低減

ECS

ペットから家畜へ

Page 11: AWS活用のいままでとこれから -東急ハンズの事例-

11

EC2 管理コストの削減

そもそも EC2 を使わない ① lambda の活用

汎用計算リソース

サーバー → EC2

ソフトウェア → コンテナ

関数 → lambda

アプリケーションミドルウェアOS

アプリケーション最低限の実行環境

アプリケーション

計算リソースがより細かい単位で利用可能に

コレを使う

Page 12: AWS活用のいままでとこれから -東急ハンズの事例-

12

Cognito

DynamoDB

S3

SQS

JavaScript SDK

Mobile SDK

そもそも EC2 を使わない ① lambda の活用

API Gateway Lambda

アプリケーションロジックはここに持つ

EC2 管理コストの削減

Page 13: AWS活用のいままでとこれから -東急ハンズの事例-

13

そもそも EC2 を使わない ② 2 tier アーキテクチャ

マネージドソフトウェア

Cognito

DynamoDB

S3

SQS

クライアントが直接 AWS リソースを操作

JavaScript SDK

Mobile SDKアプリケーションロジックはここに持つ

Lambda

認証

EC2 管理コストの削減

Page 14: AWS活用のいままでとこれから -東急ハンズの事例-

14

これらの AWS クラウドネイティブの話は西谷さんのスライドがわかりやすいです。

『 Serverless Architecture on AWS         クラウドネイティブ化する未来』

http://www.slideshare.net/keisuke69/serverless-architecture-on-aws

Page 15: AWS活用のいままでとこれから -東急ハンズの事例-

15

3. 東急ハンズでの AWS 活用

       今までとこれから

Page 16: AWS活用のいままでとこれから -東急ハンズの事例-

16

1. レガシーアプリのクラウド最適化   ネットストアでの事例

3. クラウドネイティブアーキテクチャを活用した  ポイントシステムの開発

2. AWS 新サービスを使ってみた。   おみやげ配布アプリケーションの構築

Page 17: AWS活用のいままでとこれから -東急ハンズの事例-

17

AWS 上にシステムを構築したものの

全然スケールしないシステム

Page 18: AWS活用のいままでとこれから -東急ハンズの事例-

18

EC サイトの宿命: セール時のスパイクアクセス

2014-08-27 23:402014-08-28 00:022014-08-28 00:242014-08-28 00:462014-08-28 01:082014-08-28 01:302014-08-28 01:520.00

50.00

100.00

150.00

200.00

250.00

300.00

350.00

400.00

450.00

500.00 セール開始 昇竜拳を思わせる

無慈悲なアクセス増

Page 19: AWS活用のいままでとこれから -東急ハンズの事例-

19

以前のネットストアの状態

WEB Servers API Servers

ELB ELB

データをファイルで持っていたため、サーバを増やすごとにファイル同期コストが増大

ユーザ

スケールアウトは手動 プロセス数増大

API レスポンス待ち行列が増加

Page 20: AWS活用のいままでとこれから -東急ハンズの事例-

20

改善後のネットストアの状態

WEB Servers API Servers

ELB

Data Layer

DynamoDB

S3

データ層は単一障害点にならないアーキテクチャの中から選定

Elastic Beanstalk

Beanstalk による Auto ScaleBlue Green Deployment

ユーザ

Elastic Beanstalk

ELB

アクセス増加時は、スループットを上げるだけ

Page 21: AWS活用のいままでとこれから -東急ハンズの事例-

21

開発 / デプロイフロー

Env: BLUE

Env: GREEN

Env: STG

開発者

WEB

WEB

① 開発② ステージングにデプロイ $ eb depoy

④ GREEN に同 Version をデプロイ

③ 動作確認

⑤ 環境の SWAP

ステージング環境

本番環境$ aws elasticbeanstalk swap-environment-cnames \

--region ap-northeast-1 \ --source-environment-name green \

--destination-environment-name blue

マネージメントコンソールにて ローカル環境

(Atlassian Stash)

(⑥何か問題があったら SWAP して戻

す )

Page 22: AWS活用のいままでとこれから -東急ハンズの事例-

22

環境構築自動化例 ( ebextensions による設定)

Page 23: AWS活用のいままでとこれから -東急ハンズの事例-

23

この状態になるまでに、1 年半くらいかかりました。

この間の非常に泥臭い作業についてお話します。

Page 24: AWS活用のいままでとこれから -東急ハンズの事例-

24

1. ボトルネックの特定

WEB Servers API Servers

ELB ELB

ユーザ

1番のボトルネックがスケールできない API サーバーと特定、ここの改善から始めることに決定

100 本以上の API10万行以上のソースコード

数ヶ月後には、昨年負荷に耐えられなかったセールを控えている状況

Page 25: AWS活用のいままでとこれから -東急ハンズの事例-

25

API

コール数

ここを直すだけで、全体の半分以上のリクエスト数をカバー。

コール数の多いセッション系 API など改修の対象として選定

コール頻度の低いものは後回し

2. 改修対象の選定時間的制約により、セール前に全てを直すことは不可能なので、 1 日あたりのAPI コール数を調査し、最も多くコールされている API から順番に改修していくことに。

Page 26: AWS活用のいままでとこれから -東急ハンズの事例-

26

3. 改修方法の決定

既存の API サーバーは、数年前に立てられたもので、諸々のミドルウェアが古い状態

依存関係も不明のため、アップデートも困難

既存サーバー内で改修するのではなく、新環境を用意して、新環境で新しい API を構築することに。

Page 27: AWS活用のいままでとこれから -東急ハンズの事例-

27

3. 改修方法の決定

WEBAPPサーバー

旧 API サーバー

新 API サーバー

機能 A

機能 A

① 改修

<案1> APP サーバーでの新旧切り替え

② 切り替え

新 API での実装が終わったら、APP サーバーでコール先を変更する

1. APP サーバー側での改修が必要2. リリース及び切り戻し時、 APP サーバー

チームで   切り替え作業を行う必要がある

☓却下

Page 28: AWS活用のいままでとこれから -東急ハンズの事例-

28

3. 改修方法の決定

WEBAPPサーバー

旧 API サーバー

新 API サーバー

<案 2> ReverseProxy での切り替え

機能 AProxy

機能 A① 改修

② 切り替え

Proxy の設定変更でリリース

API サーバー開発チームだけで自由にリリース/切り戻し作業が行える。APP サーバーチームは改修の必要なし。

◎ 採用

Page 29: AWS活用のいままでとこれから -東急ハンズの事例-

29

WEB Servers 新 API Servers兼 Proxy サーバ

ELB

Data Layer

DynamoDBS3

• 1レイヤ追加• Elastic Beanstalk の導入

ユーザ

旧 API Servers

既存環境に 1 レイヤ追加された状態に

新旧 API が混在のため、データ同期が必要

Page 30: AWS活用のいままでとこれから -東急ハンズの事例-

30

4. DynamoDB とファイルのデータ同期

Worker( ファイル監視 )

CGI(Batch)

Worker(DynamoDB更新 )

ファイル

更新call

ファイルを監視してSQS に登録

キューを監視して DynamoDB を更新

SQSDynamoDB

(CGI 、バッチ処理のファイル更新を DynamoDB に反映 )

json

Page 31: AWS活用のいままでとこれから -東急ハンズの事例-

31

4. DynamoDB とファイルのデータ同期

CGI PHPNode.js

外部コマンドcall

DynamoDB

HTTP

(CGI から DynamoDB参照 )

JSONbash から aws cli で DynamoDB たたくのは、かなりしんどくてこうなりました。

Page 32: AWS活用のいままでとこれから -東急ハンズの事例-

32

5. あとはひたすら機能の移植

WEBAPPサーバー

旧 API サーバー

新 API サーバー 機能 AProxy

機能 A① 改修

② 切り替え

旧 API サーバーの機能がなくなるまで、① 改修 と ②切り替えを繰り返す。(まだ道半ば)

Page 33: AWS活用のいままでとこれから -東急ハンズの事例-

33

<やっとスケールできるシステムになりました>

WEB Servers API Servers

ELB

Data Layer

DynamoDB

S3

Elastic Beanstalk

ユーザ

Elastic Beanstalk

ELB

環境構築自動化

Auto Scale

Page 34: AWS活用のいままでとこれから -東急ハンズの事例-

34

クラウドを導入したら自動的にスケールするシステムになったり、運用負荷が下がるわけではない。

疎結合はとても重要。

クラウドのやり方に自分たちをフィットさせていく必要がある。

Page 35: AWS活用のいままでとこれから -東急ハンズの事例-

35

今 システムがイケてなくても悲観しないでください。

問題に向き合い、試行錯誤して苦労した分、確実に個々人及び会社の成長につながります。

時間はかかるかもしれませんが、お互いがんばりましょう。

Page 36: AWS活用のいままでとこれから -東急ハンズの事例-

36

1. レガシーアプリのクラウド最適化   ネットストアでの事例

3. クラウドネイティブアーキテクチャを活用した  ポイントシステムの開発

2. AWS 新サービスを使ってみた。   おみやげ配布アプリケーションの構築

Page 37: AWS活用のいままでとこれから -東急ハンズの事例-

37

先日ラスベガスで行われた AWS のイベント re:Invent に参加させていただきました。 今年もたくさん新サービス

やアップデートの発表がありました!

Page 38: AWS活用のいままでとこれから -東急ハンズの事例-

38

新サービスは無理やりでも使おうEC2 をなるべく使わない縛りプレイなるべく少ない労力で

AWS re:Invent の報告として、ただ新サービスを紹介してもつまらない(某 blog の会社の方が早いし、詳しいし…)新サービスを実際に使って何かアプリケーションを作ってみたら良いのではおみやげの配布を新サービスつかってやってみては?

という話に帰りの空港で盛り上がり、設計を開始飛行機の中でもあれこれと議論を行いました。

使うサービスと使わないサービスの選別やサービス間の連携方法、テーブル設計はどうしよう 、などなど。

きっかけ コンセプト

Page 39: AWS活用のいままでとこれから -東急ハンズの事例-

39

ざっくりと要件

1. お土産の一覧を見ることができる。2.欲しいお土産に応募できる

1.応募状況が確認できる2. お土産の抽選が行える

ユーザー側機能

管理者機能

Page 40: AWS活用のいままでとこれから -東急ハンズの事例-

40

設計したらこうなった

Page 41: AWS活用のいままでとこれから -東急ハンズの事例-

41

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

アーキテクチャ

Page 42: AWS活用のいままでとこれから -東急ハンズの事例-

42

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

アプリケーションは JavaScript によるシングル ページアプリケーショ−ン気づいたら iOS アプリも出来てた配信は CloudFront ( S3 オリジン)無駄に WAF

Page 43: AWS活用のいままでとこれから -東急ハンズの事例-

43

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

認証は Facebook権限付与は Cognito

Page 44: AWS活用のいままでとこれから -東急ハンズの事例-

44

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

データは、 API Gateway + Lambda を経由して DynamoDBへLambda は Python を使用

Page 45: AWS活用のいままでとこれから -東急ハンズの事例-

45

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

DynamoDB に入った応募データはLambda から Firehose で S3経由Redshift へ

ただ、 Lambda コンテナ上の AWS SDK が古くて Firehose が呼び出せず実現せず。

Page 46: AWS活用のいままでとこれから -東急ハンズの事例-

46

Lambda

Kinesis Firehose

Cloud Front

API Gateway

Cognito

DynamoDB

userclient

API

HTMLJS Image

認証

権限

S3

RedShift

Lambda

Facebook

WAF

Lambda

Administrator

- List Items- Create User - Entry- List Entries

- Report (cron)

SNS

Administrator

- お土産リストの確認- 欲しいお土産のエントリ

- おみやげ抽選

- レポート

3. おみやげ配布アプリを新サービスを使って作ってみた

Lambda の定期実行( CRON) を使って 応募状況を SNS でレポート

Page 47: AWS活用のいままでとこれから -東急ハンズの事例-

47

テクノロジーの無駄遣い

Page 48: AWS活用のいままでとこれから -東急ハンズの事例-

48

報告会 兼 おみやげ抽選会

Page 49: AWS活用のいままでとこれから -東急ハンズの事例-

49

報告会 兼 おみやげ抽選会

Page 50: AWS活用のいままでとこれから -東急ハンズの事例-

50

Lambda コード抜粋 (応募状況を返す API )

Python で書いたらすごくシンプルに書けた!

Page 51: AWS活用のいままでとこれから -東急ハンズの事例-

51

やってみて良かったこと

新サービスをむりやり使う方針によってどんなサービスがあったか復習できた。想定ユースケースの確認ができた

新サービスを使ってみてサービスの概要を把握できた一回手を動かしてみることで、苦手意識が低下し

たLambda力が増したAPI Gateway が使えるようになったNode.js の辛さを再認識したPython に目覚めたサーバーレスアーキテクチャも行けそうな気がし

てきた

Page 52: AWS活用のいままでとこれから -東急ハンズの事例-

52

サーバーレスアーキテクチャについて

API Gateway の登場によりより現実感が増した。2 Tier アーキテクチャは用途が限定的なイメージデプロイ系はまだこなれてない開発方法、運用方法についてノウハウの蓄積が必要デプロイ手法の確立 (JAWS framework など )ブラウザでポチポチするのは辛い。ログまわり (CloudwatchLogs辛い)

認証まわりがまだふわっとしてる(自分の中で)うまくいけばコストダウンになりそう

Page 53: AWS活用のいままでとこれから -東急ハンズの事例-

53

新しい技術を学ぶのには“しばり”があると面白い

新サービスしばり

EC2 レスしばり

Lambdaしばり

Page 54: AWS活用のいままでとこれから -東急ハンズの事例-

54

1. レガシーアプリのクラウド最適化   ネットストアでの事例

3. クラウドネイティブアーキテクチャを活用した  ポイントシステムの開発

2. AWS 新サービスを使ってみた。   おみやげ配布アプリケーションの構築

Page 55: AWS活用のいままでとこれから -東急ハンズの事例-

55

• EC2 レス• マネージドシステムのフル活用

• DynamoDB 、 Cognito 、 SQS 、 S3 、 STS…• Lambda + API Gateway の採用

東急ハンズのポイントシステムを  AWS フルマネージドで構築する作業を進めています。

特徴

Page 56: AWS活用のいままでとこれから -東急ハンズの事例-

56

新ポイントシステム基盤 AWS 全体構成

56

Page 57: AWS活用のいままでとこれから -東急ハンズの事例-

57

まとめ

クラウドはものすごい速さで進化している。 いままでのやり方が、少しすれば古いやり方に

次々と新しい概念や仕組みが現れるので、勉強して自分たちもシステムも成長させよう。

Page 58: AWS活用のいままでとこれから -東急ハンズの事例-

58

まとめ

大変なことも多いけど、自分たちの頭で考えてシステムを作っていくのは楽しい。

AWS の勉強会は各地で行われています。困ったら相談しよう。(相談に乗ってください)

一緒にクラウドのよりよい活用方法を考えて行きましょう!

Page 59: AWS活用のいままでとこれから -東急ハンズの事例-

59

ご静聴ありがとうございました。

Do It Yourself