Blue/Green Deployとか? デプロイ方式について調べました
最近担当プロダクトがBlue/Greenでデプロイするようになったので、デプロイ方式について、改めて調べました。(普段AWS ECSを利用しているので、ECSでのデプロイを前提とした説明になっています。)
ローリングデプロイ
なんとなく名前から想像つく通り、順番に新しい環境に切り替えていく方式。
デプロイの際にALBのターゲットグループは変えず、コンテナを1つづつ順番に新しいものに変更します。そのため、古い環境と新しい環境が混在する瞬間が生まれます。
新しい環境でエラーが起きて古い環境に戻したいとなった場合、また古い環境をデプロイすることになるので、対応に時間がかかってしまいます。しかし、一番単純で、スタンバイ用のコンテナなど準備も不要なので、他と比べるとかかるお金は少なそうです。節約志向な方におすすめです!
Blue/Greenデプロイ
古い環境と新しい環境の両方を用意しておいて、良きタイミングで新しい環境へ流入するようトラフィックを一気に切り替える方式。切り替えタイミングは、新しい環境出来次第切り替えでもいいし、新しい環境作って動作確認してから切り替えでもいいし、その辺りは設定できそうです。
なんで青と緑なのかは、特に意味はないらしく、環境A/BとするとAの方が優位性があるように感じるため、単純に色にしたみたいです。私ならおひさまカラーが好きなので、黄色/水色にしたいですね。それか、ピンク/緑。
新しい環境で動作確認してから、ユーザーにリリースできるのが良いですね。また、古い環境のコンテナを一定時間残しておくことで、エラーが起きた時にALBの向き先を古い方に向けるだけで、古い環境に戻せるのが良いですね。(多分簡単、まだ戻したことないけど)短所は、古い環境と新しい環境でほぼ同じものを2つ用意するので、その分料金がかさみますね!デプロイ頻度が多い場合などは気をつけた方が良さそうです、、。
- 古い環境: Blue
- 新しい環境: Green
カナリアデプロイ
Blue/Greenデプロイと同様に、古い環境と新しい環境を両方用意して、新しい環境へ流入するトラフィックの割合を徐々に増やしていく方式です。炭鉱などで有毒ガスが発生した場合に、人間より先にカナリアが気づいて泣き止むことから、問題を一足先に発見するという意味の比喩でカナリアと言うそうです。
リリース後の様子を見ながら新しい環境に切り替えられるのが良さそうです。しかし、毎回のリリースで、カナリア側確認して->全体に反映、みたいな作業をするのが結構大変そうだなと思いました。慎重なリリースをしたい人におすすめですね。
感想
最適なデプロイ方式を選んでいこう〜
いっぱい安全にデプロイしよ〜
Discussion