Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
安心してリリース!〜Blue/Greenデプロイ戦略の実体験〜 - NIFTY Tech Da...
Search
ニフティ株式会社
PRO
November 27, 2023
Video
Resources
Programming
0
410
安心してリリース!〜Blue/Greenデプロイ戦略の実体験〜 - NIFTY Tech Day 2023
ニフティ株式会社
PRO
November 27, 2023
Tweet
Share
Video
Resources
NIFTY Tech Day 2023
https://techday.nifty.co.jp/2023/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
1
20
モニタリングダッシュボード に表示しておきたい情報 / NIFTY Tech Talk #21
niftycorp
PRO
1
57
PagerDutyを導入して変わったシステム運用とこれから / NIFTY Tech Talk #21
niftycorp
PRO
1
57
ゼロからボトムアップで始めるインナーソース ニフティのリアル事例 - InnerSource Gathering Tokyo 2024
niftycorp
PRO
2
130
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
5
5k
AWS Summit Japan 2024, AWS Game Day 振り返り - NIFTY Tech Talk #20
niftycorp
PRO
2
260
2つのスクラムチームの 調和的な協働・連携について - ニフティのスクラムトーク Vol. 3 / NIFTY Tech Talk #19
niftycorp
PRO
1
44
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
230
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
210
Other Decks in Programming
See All in Programming
ESLint Rule により事業, 技術ドメインに沿った制約と誓約を敷衍させるアプローチのすゝめ
shinyaigeek
1
2.7k
Rustではじめる負荷試験
skanehira
5
1.1k
TypeScriptとGraphQLを活用した変化に強いプロダクト作り
bicstone
4
550
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - iOSDC2024
techtver
PRO
1
570
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
380
Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding
chobishiba
1
220
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
330
Wallet API, Verifier APIで実現するIDカード on iPhoneの世界
shitamori1272
1
320
オートマトン学習しろ / Do automata learning
makenowjust
3
100
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
0
220
フロントエンドカンファレンス北海道2024 『小規模サイトでも使えるVite 〜HTMLコーディングをよりスマートに〜』長谷川広武(ハム)
h2ham
1
2.5k
null or undefined
susisu
20
4k
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
25
1.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Docker and Python
trallard
39
3k
Raft: Consensus for Rubyists
vanstee
135
6.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
22
1.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
21
3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Speed Design
sergeychernyshev
18
400
The Invisible Customer
myddelton
119
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Side Projects
sachag
451
42k
What's new in Ruby 2.0
geeforr
340
31k
Transcript
Copyright ©NIFTY Corpora2on All Rights Reserved. 安心してリリース! 〜Blue/Greenデプロイ戦略の実体験〜 ニフティライフスタイル株式会社 システム開発部
浜村 純
自己紹介 2 ニフティライフスタイル株式会社 システム開発部 浜村 純 Jun Hamamura • 新卒5年目
• Webエンジニア • 主にニフティ不動産サイト の開発を担当 趣味:旅行、ドライブ
会社紹介 3 思いやりとテクノロジーで、 一人ひとりの「幸せな暮らしの意思決定」を支え続ける。 OUR PURPOSE (株式会社Tryell) GiRAFFE seo (株式会社GiRAFFE
& Co.)
4
リリース時、こんなお悩みはありませんか? 5 • 本番デプロイ中に不整合等でエラーが発生しないように 気をつけなければならず、事前に手順を考えるのが大変 • 本番リリースしたら、 開発環境では発生しなかったバグが発生することがある • 緊急切り戻し時の手順が複雑でつい慌ててしまう
結果、リリースのたびに疲弊したり、 リリースで不安を抱えてしまう
こんなお悩みはありませんか? 6 結論、 Blue/Green デプロイ戦略 を導入するのがおすすめ
Copyright ©NIFTY Corpora2on All Rights Reserved. 7 過去の課題とデプロイ自動化 Blue/Green デプロイ戦略の手順
恩恵を損なわないための注意点 まとめ Blue/Green デプロイ戦略で得られた恩恵 今後の展望
Copyright ©NIFTY Corpora2on All Rights Reserved. 8 過去の課題とデプロイ自動化
過去に抱えていた課題 9 Webサイトのリリース作業が大変! • デプロイ作業の多くが手作業で労力がかかる • デプロイするファイルを一つ一つ手動でアップロードし、 公開作業を実施する必要があった
過去に抱えていた課題 10 ファイルのデプロイ順序をよく考えて実施しないと リリース作業の間にエラーが発生するリスクがあった
課題解決のために実施したこと 11 デプロイフローの自動化
課題解決のために実施したこと 12 ソース変更の Pull Request をGitHub上でマージするだけで、 裏側で自動的にソースコードのビルドとデプロイが行われる いわゆる「継続的デプロイ(CD)」
「継続的デプロイ」(CD)のツール例 13 AWS Codeシリーズ etc… GitHub Actions
AWS Codeシリーズを採用 14 ニフティ不動産サイトは AWSのコンテナサービスで構築しており、 同じAWSから提供されているサービスであれば親和性が高い AWS Codeシリーズ AWS Fargate
採 用
AWS Codeシリーズを採用 15 これを導入するにあたり、 「デプロイ時の戦略」を 以下の2つから選択する必要がありました • Rolling Update •
Blue/Green Deploy AWS Codeシリーズ
Rolling Update 16 サーバ(コンテナ)が複数台あるとき、 1台ずつ新しいバージョンに入れ替えていく方式 v2 v2 v2 v2 v2
v1 v2 v1 v1 v1 v1 v1
Rolling Update 17 メリット • サーバ台数を増やさずに入れ替えできる デメリット • デプロイ中、新旧の環境が混在する →
「予期せぬ動作」が起きる可能性がある • 例: (Webサイトの場合) • ページ遷移したときに、新旧の環境を行き来する • HTMLはv2、CSS・JavaScriptなどはv1から取ってきて、 存在しないクラスや関数を呼び出そうとし、 表示崩れ・エラーが発生 v2 v1 v1
Blue/Green Deploy 18 現状の本番環境(ブルー)とは別に 新しい本番環境(グリーン)を構築した上で、 ロードバランサーの接続先を切り替えるなどして 新しい本番環境をリリースする方式
Blue/Green Deploy 19 メリット • デプロイ中、新旧の環境が混在しない → 「予期せぬ動作」が起こりにくい デメリット •
サーバ台数を一時的に 2倍にする必要がある
比較 20 Rolling Update Blue/Green Deploy メリット デメリット 採 用
サーバ台数を増やさずに 入れ替えできる サーバ台数を一時的に 2倍にする必要がある デプロイ中、 新旧の環境が混在する → 「予期せぬ動作」が 起きる可能性がある デプロイ中、 新旧の環境が混在しない → 「予期せぬ動作」が 起こりにくい → 「予期せぬ動作」を起こさないための考慮が増えると、デプロイ自動化の恩恵が薄れそう
Copyright ©NIFTY Corporation All Rights Reserved. 21 Blue/Green デプロイ戦略の手順
Blue/Green Deploy 22 ユーザ サーバ (コンテナ) ロードバランサー v 1.0
Blue/Green Deploy 23 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 新規機能を追加した
v2をリリースしたい 開発者
Blue/Green Deploy 24 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 開発者
従来の手法では、既存サーバに 新しいファイルを配置後、 サーバを再起動 (インプレースデプロイ) → デプロイ作業中に 一時ダウンタイムが発生
Blue/Green Deploy 25 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 v
2.0 開発者 既存サーバの横で v2のコードでサーバを作る
Blue/Green Deploy 26 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境
v 2.0 本番テスト環境 本番テスト環境 開発者 本番環境
Blue/Green Deploy 27 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境
v 2.0 本番テスト環境 開発者 動作確認 v2
Blue/Green Deploy 28 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境
v 2.0 本番テスト環境 開発者 切り替え
Blue/Green Deploy 29 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境
v 2.0 本番環境 開発者 v2
Blue/Green Deploy 30 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境
v 2.0 本番環境 開発者 v2 再度切り替える だけで切り戻せる
Blue/Green Deploy 31 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境
v 2.0 本番環境 開発者 削除 v2
Blue/Green Deploy 32 ユーザ サーバ (コンテナ) ロードバランサー v 2.0 本番環境
開発者 v2
Copyright ©NIFTY Corporation All Rights Reserved. 操作手順イメージ AWS Codeシリーズを使った場合 33
34
35 本番テスト環境の 自動ビルドとデプロイ
36
37
38 マージから 約5分後、 「本番テスト環境」の作成が完了
39 設定ポート番号(例:9000)を指定して 「本番テスト環境」にアクセス そのまま本番環境になる 実際の画面でテストできる
40
41 問題がなかった場合 切り替え
42 問題がなかった場合 修正が必要な場合 切り替え 削除
43
44
45 公開完了
46 3時間後に自動削除
47 前の環境が稼働している3時間の間は 「1クリック」で切り戻しできる
Copyright ©NIFTY Corporation All Rights Reserved. 48 Blue/Green デプロイ戦略で得られた恩恵
Copyright ©NIFTY Corporation All Rights Reserved. 本番と同等の環境下でテストできる 「即」切り戻しできる
Copyright ©NIFTY Corporation All Rights Reserved. 本番と同等の環境下でテストできる
51 開発環境では発生しなかったバグが 本番リリースして発生しまった経験 ありませんか? 🙋
52 開発環境と本番環境で 差分がある場合がある 👻
開発/本番の差分の例 53 if ( env.isDev() ) - production.conf - development.conf
本番 開発 △ ◻
54 開発環境ではバグを見逃す 場合がある 本番環境を再現したテスト をしておきたいが…
55 Blue/Green ならお手軽✨
Blue/Green なら本番テスト環境で確認できる 56 そのまま本番環境に なる予定の環境 本番の分岐コード 本番の設定ファイル 本番のAPI/DB → もし環境差分で
問題があった場合、 リリース前に気づきやすい 本番 開発
バグに気づけたエピソード 57 開発環境 本番テスト環境 【原因】 開発環境では 実行されないコード
58 本来、リリースしてから気づくバグに リリース前に気づくことができた → ユーザに影響を与えずに済んだ 🙌
59 Blue/Greenデプロイ戦略は ニフティ不動産サイトの 信頼性向上に繋がっています
Copyright ©NIFTY Corporation All Rights Reserved. 「即」切り戻しできる
「即」切り戻しできることが大事な理由 61 「本番テスト環境」のテストで あらゆるすべてのパターンを 完全に網羅することはできない
「即」切り戻しが必要になったエピソード 62 「本番テスト環境」で、 確認したときにバグがなかったため、 問題ないと判断し、リリースしたところ… リリース後に、エラーアラートでバグが発覚
事前テストで気付けなかった原因 63 特定の条件を満たす 物件ページでしか発生しない テスト時に確認した物件
「即」切り戻しできることが大事な理由 64 リスクマネジメントの観点 意図しない状況を絶対に起こさない、 全ての状況を事前に想定することは不可能 → 意図しない状況が発生した場合の ユーザ影響をできるだけ小さくすることが大事
Blue/Greenなら「即」切り戻しできる 65 1世代前の環境がスタンバイ状態で稼働しているため、 LBの向き先を再度切り替えるだけで、切り戻しが完了 AWS Codeシリーズを使っている場合は「1クリック」
66 慌てて復旧作業を実施する必要がない ユーザ影響の拡大を速やかに防げる 「即」切り戻しできると
67 素早く復旧できるという観点からも、 Blue/Greenデプロイ戦略は ニフティ不動産サイトの 信頼性向上に繋がっています
Copyright ©NIFTY Corporation All Rights Reserved. 68 恩恵を損なわないための注意点
Copyright ©NIFTY Corporation All Rights Reserved. リリースで外部APIも 併せて変更する場合は要注意!
マイクロサービスアーキテクチャ 70 近年、様々なビジネスロジックを独立したAPIに分離すること が多くなってきている 会員API 検索API 物件詳細API 資料請求API etc… →
大規模な機能リリースの場合、 これらのAPIも併せて変更することが多い
外部APIの変更で後方互換性がなくなる場合 71 リリース時の計画を事前に考えておかないと、 Blue/Green デプロイ戦略の 恩恵が得られなくなってしまう場合がある • 「本番テスト環境」で動作確認ができない • リリース中に一時ダウンタイムが発生する
• 切り戻しが、LBの向き先を切り替えるだけでは済まなくなる
Copyright ©NIFTY Corpora2on All Rights Reserved. 解決策
可能ならURLバージョニングを使う 73 api.xxx.com/v2/ api.xxx.com/v1/ v2 v1 Web サーバ API
v2 v1 74 外部APIも並行稼働させる v1 v2 Web サーバ API
Copyright ©NIFTY Corpora2on All Rights Reserved. 75 今後の展望
DB でも Blue/Green を採用 76 • 現在、Webサーバのみ Blue/Green を採用している •
Amazon RDS も Blue/Green に対応している • 今後のバージョンアップ対応などで活用を検討したい
「カナリアリリース」への挑戦 新しいバージョンを例:10%のユーザのみに公開 Blue/Green デプロイ戦略はカナリアリリースも可能 → テストで見落としたバグがあった場合に、 影響を受けるユーザを限定的にできる v 2.0 v
1.0 77
Copyright ©NIFTY Corpora2on All Rights Reserved. 78 まとめ
要点まとめ • Blue/Green デプロイ戦略は ニフティ不動産サイトの信頼性向上に繋がっている • 本来、リリース後に気づくようなバグにリリース前に気付けたり、 テストで見逃しがあっても「即」切り戻し時ができるため、 Blue/Green デプロイ戦略の導入はおすすめ
• 費用が一時的に2倍になるデメリットは、 一定時間経過後にもう片方の環境を自動終了させる設定に することにより費用削減できる • 一度導入してしまえば、あとは利用するだけなので、 改修が多いサービスの場合、価値のある投資になりやすい 79
Copyright ©NIFTY Corporation All Rights Reserved. 最後に・・・
ニフティライフスタイル株式会社では 一緒に働く仲間を募集中です! 81
[email protected]
/careers/
ニフティライフスタイル TECH BLOG 82 tech.niftylifestyle.co.jp
83