Upgrade to Pro — share decks privately, control downloads, hide ads and more …

安心してリリース!〜Blue/Greenデプロイ戦略の実体験〜 - NIFTY Tech Day 2023

安心してリリース!〜Blue/Greenデプロイ戦略の実体験〜 - NIFTY Tech Day 2023

ニフティ株式会社

November 27, 2023
Tweet

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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


    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. 比較
    20
    Rolling Update Blue/Green Deploy
    メリット
    デメリット


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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  38. 45
    公開完了

    View full-size slide

  39. 46
    3時間後に自動削除

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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


    View full-size slide

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

    View full-size slide

  48. 55
    Blue/Green
    ならお手軽✨

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  65. Copyright ©NIFTY Corpora2on All Rights Reserved.
    解決策

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide