Slide 1

Slide 1 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 安心してリリース! 〜Blue/Greenデプロイ戦略の実体験〜 ニフティライフスタイル株式会社 システム開発部 浜村 純

Slide 2

Slide 2 text

自己紹介 2 ニフティライフスタイル株式会社 システム開発部 浜村 純 Jun Hamamura • 新卒5年目 • Webエンジニア • 主にニフティ不動産サイト の開発を担当 趣味:旅行、ドライブ

Slide 3

Slide 3 text

会社紹介 3 思いやりとテクノロジーで、 一人ひとりの「幸せな暮らしの意思決定」を支え続ける。 OUR PURPOSE (株式会社Tryell) GiRAFFE seo (株式会社GiRAFFE & Co.)

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

リリース時、こんなお悩みはありませんか? 5 • 本番デプロイ中に不整合等でエラーが発生しないように 気をつけなければならず、事前に手順を考えるのが大変 • 本番リリースしたら、 開発環境では発生しなかったバグが発生することがある • 緊急切り戻し時の手順が複雑でつい慌ててしまう 結果、リリースのたびに疲弊したり、 リリースで不安を抱えてしまう

Slide 6

Slide 6 text

こんなお悩みはありませんか? 6 結論、 Blue/Green デプロイ戦略 を導入するのがおすすめ

Slide 7

Slide 7 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 7 過去の課題とデプロイ自動化 Blue/Green デプロイ戦略の手順 恩恵を損なわないための注意点 まとめ Blue/Green デプロイ戦略で得られた恩恵 今後の展望

Slide 8

Slide 8 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 8 過去の課題とデプロイ自動化

Slide 9

Slide 9 text

過去に抱えていた課題 9 Webサイトのリリース作業が大変! • デプロイ作業の多くが手作業で労力がかかる • デプロイするファイルを一つ一つ手動でアップロードし、 公開作業を実施する必要があった

Slide 10

Slide 10 text

過去に抱えていた課題 10 ファイルのデプロイ順序をよく考えて実施しないと リリース作業の間にエラーが発生するリスクがあった

Slide 11

Slide 11 text

課題解決のために実施したこと 11 デプロイフローの自動化

Slide 12

Slide 12 text

課題解決のために実施したこと 12 ソース変更の Pull Request をGitHub上でマージするだけで、 裏側で自動的にソースコードのビルドとデプロイが行われる いわゆる「継続的デプロイ(CD)」

Slide 13

Slide 13 text

「継続的デプロイ」(CD)のツール例 13 AWS Codeシリーズ etc… GitHub Actions

Slide 14

Slide 14 text

AWS Codeシリーズを採用 14 ニフティ不動産サイトは AWSのコンテナサービスで構築しており、 同じAWSから提供されているサービスであれば親和性が高い AWS Codeシリーズ AWS Fargate 採 用

Slide 15

Slide 15 text

AWS Codeシリーズを採用 15 これを導入するにあたり、 「デプロイ時の戦略」を 以下の2つから選択する必要がありました • Rolling Update • Blue/Green Deploy AWS Codeシリーズ

Slide 16

Slide 16 text

Rolling Update 16 サーバ(コンテナ)が複数台あるとき、 1台ずつ新しいバージョンに入れ替えていく方式 v2 v2 v2 v2 v2 v1 v2 v1 v1 v1 v1 v1

Slide 17

Slide 17 text

Rolling Update 17 メリット • サーバ台数を増やさずに入れ替えできる デメリット • デプロイ中、新旧の環境が混在する → 「予期せぬ動作」が起きる可能性がある • 例: (Webサイトの場合) • ページ遷移したときに、新旧の環境を行き来する • HTMLはv2、CSS・JavaScriptなどはv1から取ってきて、 存在しないクラスや関数を呼び出そうとし、 表示崩れ・エラーが発生 v2 v1 v1

Slide 18

Slide 18 text

Blue/Green Deploy 18 現状の本番環境(ブルー)とは別に 新しい本番環境(グリーン)を構築した上で、 ロードバランサーの接続先を切り替えるなどして 新しい本番環境をリリースする方式

Slide 19

Slide 19 text

Blue/Green Deploy 19 メリット • デプロイ中、新旧の環境が混在しない → 「予期せぬ動作」が起こりにくい デメリット • サーバ台数を一時的に 2倍にする必要がある

Slide 20

Slide 20 text

比較 20 Rolling Update Blue/Green Deploy メリット デメリット 採 用 サーバ台数を増やさずに 入れ替えできる サーバ台数を一時的に 2倍にする必要がある デプロイ中、 新旧の環境が混在する → 「予期せぬ動作」が 起きる可能性がある デプロイ中、 新旧の環境が混在しない → 「予期せぬ動作」が 起こりにくい → 「予期せぬ動作」を起こさないための考慮が増えると、デプロイ自動化の恩恵が薄れそう

Slide 21

Slide 21 text

Copyright ©NIFTY Corporation All Rights Reserved. 21 Blue/Green デプロイ戦略の手順

Slide 22

Slide 22 text

Blue/Green Deploy 22 ユーザ サーバ (コンテナ) ロードバランサー v 1.0

Slide 23

Slide 23 text

Blue/Green Deploy 23 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 新規機能を追加した v2をリリースしたい 開発者

Slide 24

Slide 24 text

Blue/Green Deploy 24 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 開発者 従来の手法では、既存サーバに 新しいファイルを配置後、 サーバを再起動 (インプレースデプロイ) → デプロイ作業中に 一時ダウンタイムが発生

Slide 25

Slide 25 text

Blue/Green Deploy 25 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 v 2.0 開発者 既存サーバの横で v2のコードでサーバを作る

Slide 26

Slide 26 text

Blue/Green Deploy 26 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境 v 2.0 本番テスト環境 本番テスト環境 開発者 本番環境

Slide 27

Slide 27 text

Blue/Green Deploy 27 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境 v 2.0 本番テスト環境 開発者 動作確認 v2

Slide 28

Slide 28 text

Blue/Green Deploy 28 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番環境 v 2.0 本番テスト環境 開発者 切り替え

Slide 29

Slide 29 text

Blue/Green Deploy 29 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境 v 2.0 本番環境 開発者 v2

Slide 30

Slide 30 text

Blue/Green Deploy 30 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境 v 2.0 本番環境 開発者 v2 再度切り替える だけで切り戻せる

Slide 31

Slide 31 text

Blue/Green Deploy 31 ユーザ サーバ (コンテナ) ロードバランサー v 1.0 本番テスト環境 v 2.0 本番環境 開発者 削除 v2

Slide 32

Slide 32 text

Blue/Green Deploy 32 ユーザ サーバ (コンテナ) ロードバランサー v 2.0 本番環境 開発者 v2

Slide 33

Slide 33 text

Copyright ©NIFTY Corporation All Rights Reserved. 操作手順イメージ AWS Codeシリーズを使った場合 33

Slide 34

Slide 34 text

34

Slide 35

Slide 35 text

35 本番テスト環境の 自動ビルドとデプロイ

Slide 36

Slide 36 text

36

Slide 37

Slide 37 text

37

Slide 38

Slide 38 text

38 マージから 約5分後、 「本番テスト環境」の作成が完了

Slide 39

Slide 39 text

39 設定ポート番号(例:9000)を指定して 「本番テスト環境」にアクセス そのまま本番環境になる 実際の画面でテストできる

Slide 40

Slide 40 text

40

Slide 41

Slide 41 text

41 問題がなかった場合 切り替え

Slide 42

Slide 42 text

42 問題がなかった場合 修正が必要な場合 切り替え 削除

Slide 43

Slide 43 text

43

Slide 44

Slide 44 text

44

Slide 45

Slide 45 text

45 公開完了

Slide 46

Slide 46 text

46 3時間後に自動削除

Slide 47

Slide 47 text

47 前の環境が稼働している3時間の間は 「1クリック」で切り戻しできる

Slide 48

Slide 48 text

Copyright ©NIFTY Corporation All Rights Reserved. 48 Blue/Green デプロイ戦略で得られた恩恵

Slide 49

Slide 49 text

Copyright ©NIFTY Corporation All Rights Reserved. 本番と同等の環境下でテストできる 「即」切り戻しできる

Slide 50

Slide 50 text

Copyright ©NIFTY Corporation All Rights Reserved. 本番と同等の環境下でテストできる

Slide 51

Slide 51 text

51 開発環境では発生しなかったバグが 本番リリースして発生しまった経験 ありませんか? 🙋

Slide 52

Slide 52 text

52 開発環境と本番環境で 差分がある場合がある 👻

Slide 53

Slide 53 text

開発/本番の差分の例 53 if ( env.isDev() ) - production.conf - development.conf 本番 開発 △ ◻

Slide 54

Slide 54 text

54 開発環境ではバグを見逃す 場合がある 本番環境を再現したテスト をしておきたいが…

Slide 55

Slide 55 text

55 Blue/Green ならお手軽✨

Slide 56

Slide 56 text

Blue/Green なら本番テスト環境で確認できる 56 そのまま本番環境に なる予定の環境 本番の分岐コード 本番の設定ファイル 本番のAPI/DB → もし環境差分で 問題があった場合、 リリース前に気づきやすい 本番 開発

Slide 57

Slide 57 text

バグに気づけたエピソード 57 開発環境 本番テスト環境 【原因】 開発環境では 実行されないコード

Slide 58

Slide 58 text

58 本来、リリースしてから気づくバグに リリース前に気づくことができた → ユーザに影響を与えずに済んだ 🙌

Slide 59

Slide 59 text

59 Blue/Greenデプロイ戦略は ニフティ不動産サイトの 信頼性向上に繋がっています

Slide 60

Slide 60 text

Copyright ©NIFTY Corporation All Rights Reserved. 「即」切り戻しできる

Slide 61

Slide 61 text

「即」切り戻しできることが大事な理由 61 「本番テスト環境」のテストで あらゆるすべてのパターンを 完全に網羅することはできない

Slide 62

Slide 62 text

「即」切り戻しが必要になったエピソード 62 「本番テスト環境」で、 確認したときにバグがなかったため、 問題ないと判断し、リリースしたところ… リリース後に、エラーアラートでバグが発覚

Slide 63

Slide 63 text

事前テストで気付けなかった原因 63 特定の条件を満たす 物件ページでしか発生しない テスト時に確認した物件

Slide 64

Slide 64 text

「即」切り戻しできることが大事な理由 64 リスクマネジメントの観点 意図しない状況を絶対に起こさない、 全ての状況を事前に想定することは不可能 → 意図しない状況が発生した場合の ユーザ影響をできるだけ小さくすることが大事

Slide 65

Slide 65 text

Blue/Greenなら「即」切り戻しできる 65 1世代前の環境がスタンバイ状態で稼働しているため、 LBの向き先を再度切り替えるだけで、切り戻しが完了 AWS Codeシリーズを使っている場合は「1クリック」

Slide 66

Slide 66 text

66 慌てて復旧作業を実施する必要がない ユーザ影響の拡大を速やかに防げる 「即」切り戻しできると

Slide 67

Slide 67 text

67 素早く復旧できるという観点からも、 Blue/Greenデプロイ戦略は ニフティ不動産サイトの 信頼性向上に繋がっています

Slide 68

Slide 68 text

Copyright ©NIFTY Corporation All Rights Reserved. 68 恩恵を損なわないための注意点

Slide 69

Slide 69 text

Copyright ©NIFTY Corporation All Rights Reserved. リリースで外部APIも 併せて変更する場合は要注意!

Slide 70

Slide 70 text

マイクロサービスアーキテクチャ 70 近年、様々なビジネスロジックを独立したAPIに分離すること が多くなってきている 会員API 検索API 物件詳細API 資料請求API etc… → 大規模な機能リリースの場合、 これらのAPIも併せて変更することが多い

Slide 71

Slide 71 text

外部APIの変更で後方互換性がなくなる場合 71 リリース時の計画を事前に考えておかないと、 Blue/Green デプロイ戦略の 恩恵が得られなくなってしまう場合がある • 「本番テスト環境」で動作確認ができない • リリース中に一時ダウンタイムが発生する • 切り戻しが、LBの向き先を切り替えるだけでは済まなくなる

Slide 72

Slide 72 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 解決策

Slide 73

Slide 73 text

可能ならURLバージョニングを使う 73 api.xxx.com/v2/ api.xxx.com/v1/ v2 v1 Web サーバ API

Slide 74

Slide 74 text

v2 v1 74 外部APIも並行稼働させる v1 v2 Web サーバ API

Slide 75

Slide 75 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 75 今後の展望

Slide 76

Slide 76 text

DB でも Blue/Green を採用 76 • 現在、Webサーバのみ Blue/Green を採用している • Amazon RDS も Blue/Green に対応している • 今後のバージョンアップ対応などで活用を検討したい

Slide 77

Slide 77 text

「カナリアリリース」への挑戦 新しいバージョンを例:10%のユーザのみに公開 Blue/Green デプロイ戦略はカナリアリリースも可能 → テストで見落としたバグがあった場合に、 影響を受けるユーザを限定的にできる v 2.0 v 1.0 77

Slide 78

Slide 78 text

Copyright ©NIFTY Corpora2on All Rights Reserved. 78 まとめ

Slide 79

Slide 79 text

要点まとめ • Blue/Green デプロイ戦略は ニフティ不動産サイトの信頼性向上に繋がっている • 本来、リリース後に気づくようなバグにリリース前に気付けたり、 テストで見逃しがあっても「即」切り戻し時ができるため、 Blue/Green デプロイ戦略の導入はおすすめ • 費用が一時的に2倍になるデメリットは、 一定時間経過後にもう片方の環境を自動終了させる設定に することにより費用削減できる • 一度導入してしまえば、あとは利用するだけなので、 改修が多いサービスの場合、価値のある投資になりやすい 79

Slide 80

Slide 80 text

Copyright ©NIFTY Corporation All Rights Reserved. 最後に・・・

Slide 81

Slide 81 text

ニフティライフスタイル株式会社では 一緒に働く仲間を募集中です! 81 [email protected]/careers/

Slide 82

Slide 82 text

ニフティライフスタイル TECH BLOG 82 tech.niftylifestyle.co.jp

Slide 83

Slide 83 text

83