🙆‍♀️

Blue-Greenデプロイについて

2024/12/06に公開

第 5 回 JAZUG for Women Yurie Mori さんの話にインスパイアされて・・・

https://jazug.connpass.com/event/331400/

通常、Blue-GreenデプロイといえばApp Serviceのドキュメントにもあるとおりデプロイするためのスロットと運用スロットを分けてApp Serviceであればスワップさせることでリリースとするような手法をさす。

https://learn.microsoft.com/ja-jp/azure/app-service/deploy-best-practices
上記、Microsoft Learnからの画像であるがこのような方法を思い浮かべることが多い。
すなわち実質的に2スロットで実現できる。

この方法の問題点

この方法に問題点が一つある。
確実な切り戻しが保障されていないことである。

次のようなケースを考えてみたい。
スロット構成は上の図の通りとする

  • Main Slotへデプロイ
  • Production SlotとMain SlotをSwap
  • 何らかの開発が進んでMain Slotへデプロイ
  • この時点で障害発生・切り戻し要請
  • 切り戻し資材なし!!

すでに新しいものでMain Slotにデプロイ済みのため一個前のものに切り戻ししたいとなってもスワップによる切り戻しは不可能です。

解決策

ポイントは登場するスロットを3つ用意します。

そして、すこしリリース手順が煩雑になります。
理想的にはApp Serviceの前段にロードバランサーかなにかでこの作業の間サイト停止かなにかの処置した方がいいのかも知れません。


まず、最初にMain Slotにデプロイまでは変わりません。


次に、テンポラリスロットに今まで稼働していたものを待避します。


最後に、リリース物件がMain Slotにあるのでこれを入れ替えます。

この場合は、新たにスロットによるリリース操作をするまではテンポラリスロットに一つ前のものが残り続けることになります。
よって、いつでもテンポラリスロットとプロダクションスロットを入れ替えれば確実な切り戻しができることになります。

Discussion