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
540
安心してリリース!〜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 ニフティ株式会社
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.1k
Grow on GitHub Collaboration Culture: Case Study of InnerSource Challenge - GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
26
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
210
継続的な改善のためのmodulesの適切な分割単位 - NIFTY Tech Talk #23
niftycorp
PRO
0
120
Re:ゼロから始めるTerraform生活 ~IaC入門編~ - NIFTY Tech Talk #23
niftycorp
PRO
0
130
Terraformにベストプラクティスを取り入れた - NIFTY Tech Talk #23
niftycorp
PRO
0
150
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
160
「天気予報があなたに届けられるまで」 - NIFTY Tech Talk #22
niftycorp
PRO
0
180
@nifty天気予報:フルリニューアルの挑戦 - NIFTY Tech Talk #22
niftycorp
PRO
0
170
Other Decks in Programming
See All in Programming
php-conference-japan-2024
tasuku43
0
410
rails newと同時に型を書く
aki19035vc
5
610
KubeCon NA 2024の全DB関連セッションを紹介
nnaka2992
0
110
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
270
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
720
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
500
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
540
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
270
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
140
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
260
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
320
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
360
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
112
50k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
How STYLIGHT went responsive
nonsquared
96
5.3k
Being A Developer After 40
akosma
89
590k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Producing Creativity
orderedlist
PRO
343
39k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
KATA
mclloyd
29
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Facilitating Awesome Meetings
lara
50
6.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
230
Building Adaptive Systems
keathley
38
2.3k
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