96
DevがAWSと 出会って DevOpsを目指した話 えびスタ!#1 2014/12/18 Retty, Inc 梅田昌太 @ebisusurf 1

Devがawsと出会ってdev opsを目指した話

Embed Size (px)

Citation preview

Page 1: Devがawsと出会ってdev opsを目指した話

DevがAWSと 出会って

DevOpsを目指した話 えびスタ!#1

2014/12/18 Retty, Inc

梅田昌太 @ebisusurf

1

Page 2: Devがawsと出会ってdev opsを目指した話

本日のお品書き

• 前菜 ご挨拶

• メイン サービスの成長とインフラの成長

• デザート AWSを使ってDevOpsを目指す

2

Page 3: Devがawsと出会ってdev opsを目指した話

サービスの成長とインフラの成長

AWSを使ってDevOpsを目指す

ご挨拶

3

Page 4: Devがawsと出会ってdev opsを目指した話

4

近所から来ました

Page 5: Devがawsと出会ってdev opsを目指した話

Rettyって?

• 食を通じて世界中の人々をHappyに

• グルメサービスです!

• AppStore Google PlayへGo!

5

Page 6: Devがawsと出会ってdev opsを目指した話

About me@ebisusurf 梅田昌太

AWS &

プリンタ6

Page 7: Devがawsと出会ってdev opsを目指した話

About me担当

炒飯

7

Page 8: Devがawsと出会ってdev opsを目指した話

About me

8

Page 9: Devがawsと出会ってdev opsを目指した話

9

将来の夢

Page 10: Devがawsと出会ってdev opsを目指した話

本題

10

Page 11: Devがawsと出会ってdev opsを目指した話

サービスの成長とインフラの成長AWSを使ってDevOpsを目指す

ご挨拶

11

Page 12: Devがawsと出会ってdev opsを目指した話

まずは今の構成をご紹介

• retty.me(メインサービス)

• owner.retty.me(店舗様向けサービス)

12

Page 13: Devがawsと出会ってdev opsを目指した話

CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

Route 53

13

Page 14: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

EB

S3

owner.retty.me

RDS

EC2ELB

EMR

ELCRedis

EC2development

14

Page 15: Devがawsと出会ってdev opsを目指した話

いきなりこうなった訳ではありません

15

Page 16: Devがawsと出会ってdev opsを目指した話

サービス総明記

16

Page 17: Devがawsと出会ってdev opsを目指した話

UU ~10万

17

Page 18: Devがawsと出会ってdev opsを目指した話

retty.me 信頼と安定の某VPS

MySQL

Apache

Linux

PHP

18

Page 19: Devがawsと出会ってdev opsを目指した話

サブドメイン 信頼と安定のレンタルサーバ

Wordpress

19

Page 20: Devがawsと出会ってdev opsを目指した話

10万~

20

Page 21: Devがawsと出会ってdev opsを目指した話

AWS移行 構成は変わらず(EC2)

MySQL

Apache

Linux

PHP

21

Page 22: Devがawsと出会ってdev opsを目指した話

50万~ AWSアーキテクチャに

乗ってみる

22

Page 23: Devがawsと出会ってdev opsを目指した話

retty.me

AWSアーキテクチャに少し乗ってみる

23

Page 24: Devがawsと出会ってdev opsを目指した話

100万~

24

Page 25: Devがawsと出会ってdev opsを目指した話

何かよく解らんけど 様子がおかしいぞ?

25

Page 26: Devがawsと出会ってdev opsを目指した話

スケールアウトしてみたretty.me

26

Page 27: Devがawsと出会ってdev opsを目指した話

監視もしてみた SotfwareDesign 6月号

Nagios Monit

cloud watch オプションでディスクも監視retty.me

27

Page 28: Devがawsと出会ってdev opsを目指した話

なんとかなった

28

Page 29: Devがawsと出会ってdev opsを目指した話

200万~400万

29

Page 30: Devがawsと出会ってdev opsを目指した話

  奇跡のカーニバル   開  幕  だ  n  ___  n  || /___\ ||  || |(゚) (゚)| || 「「「| \‾‾‾/ 「「「| 「‾|  ‾冂‾  「‾| `ヽ |/‾|‾|‾\| ノ

ここら辺で 一気に火を吹きだした

30

Page 31: Devがawsと出会ってdev opsを目指した話

起こった事

31

Page 32: Devがawsと出会ってdev opsを目指した話

起こった事

• RDSに書き込んでたロギングが限界

• スケールアウト対応が追いつかない&コスパの良いインスタンスが使えない(EC2が32bitPV、PHP5.3)

• RDSのSlave上限にひっかかる(MySQL5.5)

32

Page 33: Devがawsと出会ってdev opsを目指した話

起こった事

• 繰り返される緊急デプロイ

• 信頼と安定のrsync

• 鳴り止まないアラート

• 秘伝のタレが継ぎ足されていくami

33

Page 34: Devがawsと出会ってdev opsを目指した話

やった事

34

Page 35: Devがawsと出会ってdev opsを目指した話

やった事

35

ElasticBeasntalk でインフラの透明化 (後で話します)

Page 36: Devがawsと出会ってdev opsを目指した話

やった事• retty.meのPHP5.3->PHP5.5

• EBで色々選べる(5.3はサポート切れる)

• MySQL5.5->MySQL5.6

• 多段レプリケーション

• ログをfluentd + S3 + MongoDB運用

36

Page 37: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

S3

結果こうなった

RDS

EC2ELB

RDS

EC2ELB

EMR

MongoDB

ELCmemcached

最初の図に少し 近づいてますね

EB

37

Page 38: Devがawsと出会ってdev opsを目指した話

~500万

38

Page 39: Devがawsと出会ってdev opsを目指した話

外部サービス連携

39

Page 40: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

40

Page 41: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

EB

S3

ログをTRESUREDATAへ

RDS

EC2ELB

RDS

EC2ELB

中継

MongoDB

41

Page 42: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

EB

S3

CIはCircleで

RDS

EC2ELB

RDS

EC2ELB

42

Page 43: Devがawsと出会ってdev opsを目指した話

Route 53CloudFront

RDS

EC2ELB

EB

S3

RDS

EC2ELB

RDS

EC2ELB

43

Jenkinsを ホストするのは嫌です

Page 44: Devがawsと出会ってdev opsを目指した話

サービスの成長とインフラの成長

AWSを使ってDevOpsを目指す

ご挨拶

44

Page 45: Devがawsと出会ってdev opsを目指した話

Devの時間を作るために 捗るサービスを使ってOpsの仕事を減らす

45

Page 46: Devがawsと出会ってdev opsを目指した話

オレオレBest3

46

Page 47: Devがawsと出会ってdev opsを目指した話

Best3

• Elastic Beanstalk(オートスケール&自動デプロイ)

• RDS(自前でレプリケーション, フェイルオーバとか泣ける)

• S3(EBSを拡張するの避ける)

47

Page 48: Devがawsと出会ってdev opsを目指した話

ElasticBeanstalk

48

Page 49: Devがawsと出会ってdev opsを目指した話

AWS上のHeroku (そもそもHerokuはry)

49

Page 50: Devがawsと出会ってdev opsを目指した話

ElasticBeanstalk

• 一般的な Web アプリケーションに必要 な設定を組んで、Public DNS 名を割り振って URL でアクセスできるようにしてくれます。

50

Page 51: Devがawsと出会ってdev opsを目指した話

ElasticBeanstalk

• 作るアプリは Web アプリか? Worker か?

• RDS は必要か? Multi-AZ にする?

• ELBを 使 う か? 1インスタンスで動かすか?

51

Page 52: Devがawsと出会ってdev opsを目指した話

ElasticBeanstalk のスタック

Application

Enviroment Enviroment Enviroment

production staging development

52

Page 53: Devがawsと出会ってdev opsを目指した話

デプロイは?

53

Page 54: Devがawsと出会ってdev opsを目指した話

Application

Enviroment Enviroment Enviroment

git

production staging development

git aws.push

54

Page 55: Devがawsと出会ってdev opsを目指した話

git aws.push

• gitのリポジトリをそのままデプロイ

• Enviromentとコミットを指定出来る

• 同一Application内であればブラウザでEnvironment間でデプロイ出来る

55

Page 56: Devがawsと出会ってdev opsを目指した話

Elastic Beanstalk Command Line Interface (EB CLI)

3.0

56

eb deploy

Page 57: Devがawsと出会ってdev opsを目指した話

EBが無いと私の仕事は回らないくらい便利です

57

Page 58: Devがawsと出会ってdev opsを目指した話

大事な事• オートスケールを自在に使いこなす

• レガシーアプリケーションの問題は環境変数に押し込む

• インスタンスを使い捨てにする

• .ebextensionでインスタンスを自在に操る

58

Page 59: Devがawsと出会ってdev opsを目指した話

使い捨てにするため ログ系はリアルタイムで送る

59

Page 60: Devがawsと出会ってdev opsを目指した話

fluentd

Elastic Beanstalk Mongo&中継

S3

S3

60

Page 61: Devがawsと出会ってdev opsを目指した話

.ebextensionsで自由自在• デプロイ時のタスクをymlで記述(chefみたいに抽象化はされてない)

• fluentdのインストール, apacheの設定, local memcached, postfix(やめたい)...etc

commands: 01-install-memcached: command: yum install -y memcached

61

Page 62: Devがawsと出会ってdev opsを目指した話

RDS

62

Page 63: Devがawsと出会ってdev opsを目指した話

ぶっちゃけ高い

63

Page 64: Devがawsと出会ってdev opsを目指した話

それを上回るメリット

• 一度でもMySQLの運用をやった事があればMulti-AZの素晴らしさはすぐわかる

• ほぼメンテフリー

• 気軽にスケールアップ

64

Page 65: Devがawsと出会ってdev opsを目指した話

S3

65

Page 66: Devがawsと出会ってdev opsを目指した話

EBSででかいインスタンスを用意するのは面倒

• Mongoのdiskが溢れてメンテナンス不可能になった

• 因にs3fsはあまりおすすめしないってamazonの人も言ってた

• S3の運用にちゃんと乗った方が楽

66

Page 67: Devがawsと出会ってdev opsを目指した話

最近やったこと (直前追記)

67

Page 68: Devがawsと出会ってdev opsを目指した話

1.chat ops

68

Page 69: Devがawsと出会ってdev opsを目指した話

chat ops@deploy

69

EB Worker

SQS

please deploy

json post

eb deploy

Page 70: Devがawsと出会ってdev opsを目指した話

chat opsの 重要性とは?

70

Page 71: Devがawsと出会ってdev opsを目指した話

なぜchat ops?

71

臨時デプロイしてください

OK!

Page 72: Devがawsと出会ってdev opsを目指した話

なぜchat ops?

72

臨時デプロイしてください

……

臨時デプロイしてください

臨時デプロイしてください

臨時デプロイしてください

臨時デプロイしてください

臨時デプロイしてください

Page 73: Devがawsと出会ってdev opsを目指した話

臨時デプロイしてください

……

臨時デプロイしてください臨時デプロイしてください

臨時デプロイしてください

臨時デプロイしてください臨時デプロイしてください

73

イラっ!

Page 74: Devがawsと出会ってdev opsを目指した話

オペレーションのせいで人間関係悪化は

良くない

74

Page 75: Devがawsと出会ってdev opsを目指した話

75

botちゃんに やってもらいましょう

Page 76: Devがawsと出会ってdev opsを目指した話

2.スポットインスタンス を使ってお得に スケールする

76

Page 77: Devがawsと出会ってdev opsを目指した話

スポットインスタンス

• 基本的にはコストに対しては理解してもらいましょう(技術関係なし)

• それでも考える時はRIとスポットインスタンスの組み合わせが効果的

• 但し費用対効果考えると微妙

77

Page 78: Devがawsと出会ってdev opsを目指した話

78

r3.largeを例にとると オンデマンドだと$0.175 スポットだと$0.0215

Page 79: Devがawsと出会ってdev opsを目指した話

79

r3.largeを例に取ると オンデマンドだと$0.175 スポットだと$0.0215

誰かが釣り上げると落とされます

Page 80: Devがawsと出会ってdev opsを目指した話

まとめ

80

Page 81: Devがawsと出会ってdev opsを目指した話

Q.AWSを使ってDevOpsを目指す上で

最も重要な事は?

81

Page 82: Devがawsと出会ってdev opsを目指した話

immutable infrastructure?

82

Page 83: Devがawsと出会ってdev opsを目指した話

infrastructure as

code?

83

Page 84: Devがawsと出会ってdev opsを目指した話

A.金84

Page 85: Devがawsと出会ってdev opsを目指した話

金で解決する事

• 特にRDSとかRDSとかRDSとか

• 負荷がきつかったらパラメータ一生懸命いじっても余りパフォーマンス上がらない、思い切ってスケールアップ

85

Page 86: Devがawsと出会ってdev opsを目指した話

金で解決する事

• アプリケーションサーバはEBとかでほったらかすようにする

• AWSはそれぞれのサービスを有機的に結合させることがとても大事

• S3とかSQSとかIAMとか

86

Page 87: Devがawsと出会ってdev opsを目指した話

EC2を立てたら 負けだと思ってる

87

Page 88: Devがawsと出会ってdev opsを目指した話

言いたかったこと

88

インフラはAWSを 使い倒して(お任せして)

サービスをガンガン開発しよう!

Page 89: Devがawsと出会ってdev opsを目指した話

時間があればおまけ

89

Page 90: Devがawsと出会ってdev opsを目指した話

90

Rettyでは 仲間を募集してます

Page 91: Devがawsと出会ってdev opsを目指した話

91

Rettyでは 仲間を募集してます

Page 92: Devがawsと出会ってdev opsを目指した話

92

Rettyでは 仲間を募集してます

Page 93: Devがawsと出会ってdev opsを目指した話

93

Rettyでは 仲間を募集してます

Page 94: Devがawsと出会ってdev opsを目指した話

ステッカー持ってます

94

Page 95: Devがawsと出会ってdev opsを目指した話

95

二次会のお店は Rettyで!

Page 96: Devがawsと出会ってdev opsを目指した話

ありがとうございました

96