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
470
安心してリリース!〜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 ニフティ株式会社
AWS AppSyncを用いた GraphQL APIの開発について - NIFTY Tech Talk #22
niftycorp
PRO
0
78
「天気予報があなたに届けられるまで」 - NIFTY Tech Talk #22
niftycorp
PRO
0
86
@nifty天気予報:フルリニューアルの挑戦 - NIFTY Tech Talk #22
niftycorp
PRO
0
84
@nifty天気予報のフロントエンドを 実装するまで - NIFTY Tech Talk #22
niftycorp
PRO
0
84
Application Signalsで始めるSLO ユーザー満足度を数値化する第一歩
niftycorp
PRO
2
230
FourKeysを導入したが生産性向上には至らなかった理由
niftycorp
PRO
1
67
モニタリングダッシュボード に表示しておきたい情報 / NIFTY Tech Talk #21
niftycorp
PRO
1
100
PagerDutyを導入して変わったシステム運用とこれから / NIFTY Tech Talk #21
niftycorp
PRO
1
110
ゼロからボトムアップで始めるインナーソース ニフティのリアル事例 - InnerSource Gathering Tokyo 2024
niftycorp
PRO
2
250
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
570
Outline View in SwiftUI
1024jp
1
330
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
CSC509 Lecture 11
javiergs
PRO
0
180
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
470
Better Code Design in PHP
afilina
PRO
0
130
subpath importsで始めるモック生活
10tera
0
310
Remix on Hono on Cloudflare Workers
yusukebe
1
290
as(型アサーション)を書く前にできること
marokanatani
10
2.7k
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
GitHub's CSS Performance
jonrohan
1030
460k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Practical Orchestrator
shlominoach
186
10k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
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