Hi there! ナスです。
少し前なんですが、ブルーグリーンデプロイメントなる言葉を何度か聞いたので、たまには勉強したことを記事にしてみよう。
超ざっくり言うと…
2つのサーバ(環境)を運用していて、片方は本番運用中、もう片方は開発物リリースしたりバージョンアップとかしたもので、テストまでしてる状態で、あるタイミングになったら本番運用サーバをもう片方に切り替えて、ダウンタイムを限りなく0に近づけてリリースしていく手法のこと。
おー確かに画期的手法!
交互に本番運用サーバが切り替わるので、本番環境そのものに設定やカスタマイズができるしテストさえしっかりしていれば本当に素早くリリースを継続できる仕組みですね。
AWS環境なら、切り替えた後はAMIとってそこからEC2作成すれば簡単に同じ環境が出来上がりますね。他のクラウド環境でも似たようなことができるはずです。しかも、しばらく開発等がなければサーバ停止したりそもそも環境を消しておいて必要になったらAMIから作成すればいいわけで、こうすることである程度のコスト削減が出来ますね。ただ、そもそもリリースを素早くし続ける前提がありそうな手法なので、停止とかはあまりなさそうですが、ガチガチの業務システム等だと普段片方は停止しとくとかもあるわけで、こういうメリットを享受できる上にコストも抑えられる、まさに一石二鳥です。(適当
でもこれ、どっかで見たような…
転職してから聞いた言葉なので、初めて聞いた時は「おーすげー」と思ったんですが、よく考えると前の仕事でもやってた気がしてきました。
前職はSAPシステムの基盤構築や運用改善の仕事をしてたんですが、アップグレードの時の流れをよーく思い出してみると、
- システムコピーで SAP システムを複製する
- 複製したシステムに対してアップグレードする
- アップグレードしたシステムを公開する&旧システムは削除 or 参照専用マシンに
という感じだったので、常に2つ環境があるわけじゃないけど、ある意味 Blue-Green Deployment なのかなーと思えてきました。(書いてみたら違う気もしてきたけどまぁいいや
というわけで、最近名前は聞いたけど、手法としては実は昔からあったんかな?と思いました。
[2016.10.06 追記]
社内からのフィードバックで、これは Immutable Infrastructure の方が近いね、とのことでした。
Immutable Infrastructure と Blue-Green Deployment の違いは、このリンク先の説明でようやくわかりました。ありがたやー。
www.atmarkit.co.jp
[追記終わり]
[2016.10.06 追記2]
よく考えたら、本番機にも移送でカスタマイズした内容を適用していくから、Immutable じゃなかった…
[追記2終わり]
ところでなんで Blue-Green なの?
これだけいくら探しても見つかりません。別に Blue-Yellow でもいいと思うし、Green-Purple でもいいわけです。
個人的には、安全であることやokであることを示す色を使うことで、安全かつスピーディにリリースできるぜ的なイメージを出せるから Blue-Green になったのかな?と考えてます。が、それは違う!とか私はこう思う!とかの意見を聞いてみたい。