deploy to lobi
TRANSCRIPT
DEPLOY TO LOBI@handlename
KAYAC Inc.
WHO AM I?
長田洸明(ながた ひろあき)@handlename2010年新卒入社Lobiのサーバーサイドエンジニア
INDEXこんなことをはなします
Lobiとはなんぞやデプロイの仕組みいまむかし
デプロイするときにやっていること
ABOUT LOBILobiとはなんぞや
LOBIサービスについて
チャットをメインコンテンツとしたSNS2010年からサービス提供しているiOS/Android/Web版DAU等は非公開/サーバー数十~百台規模Amazon Web Service上で稼働
公開グループ数は50万弱連携アプリは・・・
LOBI運用・開発チームについて
チームメンバーは40名弱サーバーサイドエンジニアは10名ほど全てのサーバーサイドエンジニアにデプロイ権がある
毎日十数回のデプロイが発生
入社から日が浅いメンバー・外部パートナーは除く
細かくデプロイして確認範囲を小さくする方針
デプロイ作業を日常化する→仕組み化される
MEもデプロイしてる
HISTORY OF DEPLOY SYSTEMデプロイの仕組みいまむかし
HISTORY2010~ git pull2013~ rsync2015~ stretcher
GIT PULL$ git pull origin master
GIT PULLgit repo -> servers
2010年~小規模では便利だった
本番サーバーでgit pullするだけいま何がデプロイされているのかが分かる
GIT PULLしかし・・・
規模が大きくなるとつらい
巨大な.gitディレクトリ新規ホストでcloneが終わらない
RSYNC$ rsync -avn src server:/path/to/dst
RSYNCdeploy server -> servers
2013年~git pullに耐えられなくなった頃に乗り換え本番環境に必要なファイルだけrsync余計なファイルがないのでディスクに余裕
新規ホストのセットアップもつらくない
のちにgnu parallelを使用Archer使ってた
しかし・・・
更に規模が大きくなるとつらい
デプロイサーバーの帯域が埋まる
デプロイサーバーが死ぬと新規ホストが上がらない
STRETCHERhttps://github.com/fujiwara/stretcher
STRETCHER$ consul watch -type event -name deploy stretcher
2015年~rsyncに耐えられなくなった頃に乗り換えconsul/serfのイベントを利用したデプロイツールrefs AWS CodeDeploy, mamiya
STRETCHERdaemontools serviceとして
exec setuidgid app \ consul watch \ # consulで -type event \ # eventの発火を待つ -name deploy \ # 対象は"deploy"という名前のevent stretcher # eventが発火したらstretcherを起動
STRETCHERconsul eventでmanifest.ymlのURIが送られるstretcherはmanifest.ymlを見てデプロイ処理を実行
MANIFEST.YMLデプロイするべきtarballの場所デプロイ先のパス
デプロイの前処理・後処理
デプロイ成功・失敗時の処理
MANIFEST.YMLsrc: s3://path/to/tarball checksum: deea122cf66dd796ee46efb3cacd1e86d6a348af0a5cf5d61b88068f532917f6dest: /path/to/dest commands: pre: - ...(デプロイの前処理:クリーンアップとか) post: - ...(デプロイの後処理:アプリの再起動とか) success: - ...(成功時の処理) failure: - ...(失敗時の処理)
STRETCHER IN LOBImanifest.ymlのテンプレートから生成tarballはS3に保存アプリの更新もプロビジョニングもstretcherで前処理でデプロイ操作の通知
後処理でアプリケーションの再起動、など
プロビジョニングにはchefを使用stretcherにする前はchef serverを使っていたいまはstretcherでchef-soloを実行ホスト一台で処理が完結する
AROUND DEPLOYデプロイするときにやっていること
AROUND DEPLOYSlack botでデプロイ前チェック・周知Consul KV Dashboardに状態を記録Google Calendarにデプロイ履歴を記録etc.
SLACK BOT
SLACK BOTnukoというbotがいるCI通過していないと教えてくれる花金デプロイしようとするとめっちゃ怒る
SLACK BOT
SLACK BOT
CONSUL KV DASHBOARDhttps://github.com/fujiwara/consul-kv-dashboard
CONSUL KV DASHBOARD各ホストのデプロイ状況を一覧
デプロイ処理に失敗したらアラート
CONSUL KV DASHBOARD
GOOGLE CALENDAR
GOOGLE CALENDARデプロイ作業時間を予定として記録
いつ誰が何をデプロイしたのかが分かる
GOOGLE CALENDAR
MORERundeckからデプロイ実行デプロイロック
一台だけデプロイ
Lambda functionのデプロイDBスキーマ変更適用ユニコーンが出たら
etc.
THANK YOU!!
APPENDIXファイル更新もchef実行もstretcherで!Lobiをデプロイするときにやっていること - KAYAC engineers' blogRedashとRundeckで安全・安心なサービス運用 - KAYACengineers' blog#10 Consulと連携するpull型デプロイツール stretcher -KAYAC engineers' blogLobiにおけるConsul活用事例 - KAYAC engineers' blog