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

95
PHPerがAWSと 出会って DevOpsを目指した話 2014/10/11 php conference2014 Retty, Inc 梅田昌太 @ebisusurf 1

Upload: shota-umeda

Post on 25-Dec-2014

3.684 views

Category:

Software


1 download

DESCRIPTION

PHPカンファレンス2014の資料です

TRANSCRIPT

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

PHPerがAWSと 出会って

DevOpsを目指した話!

2014/10/11 php conference2014

Retty, Inc 梅田昌太 @ebisusurf

1

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

本日のお品書き

• 前菜 ご挨拶

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

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

2

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

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

AWSを使ってDevOpsを目指す

ご挨拶

3

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

4

Rettyという恵比寿にある会社から来ました

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

Rettyって?

5

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

Rettyって?

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

• グルメサービスです!

• AppStore Google PlayへGo!

6

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

About me@ebisusurf 梅田昌太

AWS &

プリンタ7

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

About me担当

炒飯

8

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

炒飯な理由

• 皆に愛される平和なメニュー

• ラーメンに対するマイノリティ感

• ラーメンの話は殴り合いになるからNG

9

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

About me

• SoftwareDesign

• 2014年5月号~7月号

• 短期集中連載

• Rettyのサービス拡大を支えた“たたき上げ”DevOps

10

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

Career

• 渋谷でPerl,六本木でPHP

• アプリケーションエンジニアです

• Vim好き

11

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

PerlとPHPのキャリアが が長い&好きなので

12

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

13

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

本題

14

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

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

ご挨拶

15

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

まずは今の構成をご紹介

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

• news.retty.me(ニュース配信)

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

16

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

CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

Route 53

17

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

news.retty.me

ELCmemcached

18

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

owner.retty.me

RDS

EC2ELB

EMR

ELCRedis

EC2development

19

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

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

20

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

サービス総明記

21

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

UU ~10万

22

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

retty.me 信頼と安定の某VPS

MySQL

Apache

Linux

PHP

23

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

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

Wordpress

24

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

10万~

25

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

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

MySQL

Apache

Linux

PHP

26

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

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

乗ってみる

27

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

retty.me

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

28

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

100万~

29

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

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

30

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

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

31

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

監視もしてみた SotfwareDesign 6月号

Nagios Monit

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

32

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

なんとかなった

33

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

200万~400万

34

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

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

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

35

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

起こった事

36

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

起こった事

• サブドメインサービス開発に火がつく

• 既存サブドメインサービスが落ちる

• メインサービスのアラートが止まらない

37

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

起こった事

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

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

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

38

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

やった事

39

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

やった事

• サブドメインはレガシーアーキテクチャを捨てた環境で開発, 初期(学習)コストは気合い

• PHP5.5, ZendFramework2

• ElasticBeanstalk <- 後で話します

40

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

やった事

• サブドメインをAWS + VPCに移行

• VPC移行は視野に入ってたのでちょうど良かった

41

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

やった事

• 32bit PV amazon linux -> 64bit HVM amazon linux

• SoftwareDesign5月号(Vagrantを使って…)

• ある物から構成を掘り起こす作業は泣ける

42

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

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

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

• MySQL5.5->MySQL5.6

• 多段レプリケーション

• ログをfluentd + S3 + MongoDB運用

43

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

Route 53CloudFront

RDS

EC2ELB

S3

結果こうなった

RDS

EC2ELB

RDS

EC2ELB

EMR

MongoDB

ELCmemcached

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

EB

44

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

ミドルウェアバージョンアップの秘訣は?

45

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

多分そんなもの無い

• SlaveのMaster昇格を使ってdev,stg環境でひたすら試す

• E_DEPRECATEDとひたすら戦う

• 64bit移行はPHP_INT_MAXにハマって泣きたかった

46

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

~500万

47

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

より良い物へ

48

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

retty.me

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

EMR

MongoDB

ELCmemcached

ELCRedis

49

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

Nginx upstream で安心deploy

upstream retty { server enviroment-1 weight=nnn; server enviroment-1 weight=nnn; server enviroment-1 weight=nnn; }

RDS

EC2ELB

EB

RDS

EC2ELB

RDS

EC2ELB

Nginx Nginx

50

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

ログをTRESUREDATAへ

RDS

EC2ELB

RDS

EC2ELB

中継

MongoDB

51

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

CIはCircleで

RDS

EC2ELB

RDS

EC2ELB

52

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

Jenkins?

RDS

EC2ELB

RDS

EC2ELB

53

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

Route 53CloudFront

RDS

EC2ELB

EB

S3

Jenkins?

RDS

EC2ELB

RDS

EC2ELB

嫌です

54

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

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

AWSを使ってDevOpsを目指す

ご挨拶

55

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

捗るサービスを選んでOpsの仕事を減らす

56

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

俺的Best3

57

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

Best3

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

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

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

58

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

ElasticBeanstalk

59

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

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

60

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

ElasticBeanstalk

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

61

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

ElasticBeanstalk

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

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

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

62

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

ElasticBeanstalk のスタック

Application

Enviroment Enviroment Enviroment

production staging development

63

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

デプロイは?

64

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

Application

Enviroment Enviroment Enviroment

git

production staging development

git aws.push

65

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

git aws.push

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

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

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

66

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

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

67

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

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

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

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

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

68

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

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

69

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

fluentd

Elastic Beanstalk Mongo&中継

S3

S3

70

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

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

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

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

71

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

RDS

72

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

ぶっちゃけ高い

73

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

それを上回るメリット

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

• ほぼメンテフリー

• 気軽にスケールアップ

74

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

S3

75

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

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

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

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

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

76

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

まとめ

77

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

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

最も重要な事は?

78

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

immutable infrastructure?

79

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

infrastructure as

code?

80

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

A.金81

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

金で解決する事

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

• 自前でフェイルオーバとか時間食い過ぎ

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

82

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

金で解決する事• アプリケーションサーバのような物はEBとかでほったらかすようにする

• データをストアするためにでかいEBSをアタッチするのはやめた方が良いと思う(Mongoとかはどうしてもね。。。

• AWSはインテグレーションする事が大事

83

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

とにかくAWSが推奨するアーキテクチャに乗る

84

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

オペレーションコストの削減にコストをかける

85

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

インフラはAWSに任せて PHP書きましょう!

86

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

時間があればおまけ

87

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

88

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

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

89

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

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

90

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

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

91

懇親会の二次会は Rettyで!

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

92

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

ステッカー持ってます

93

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

94

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

ありがとうございました

95