Immutable Infrastructure
稼働環境(Server)に変更をかけず、新バージョンの環境(Server)に切り替えるという運用スタイル。
これによるメリットは
1. 運用がシンプル
使い捨ての考えで、サーバに変更をかけないので、新しいサーバに切り替えるというシンプルな運用方法が適用できる。
2. 環境がクリーン
稼働中環境に変更を加えないので想定外の問題を抱えにくく、クリーンな環境を維持できる。
3.ロールバックが簡単
新規環境に切替途中で問題が発生したら元に戻せば良い。
4.テスタビリティ
テストした環境をそのまま公開できる。
Immutable Infrastructureの考え方により、BlueGreenDeploymentやAutoScaling(ここでは割愛)を実現すると。
BlueGreenDeployment
BlueGreenDeploymentの考え方は、新しいバージョンの環境を新規に立ち上げ、Routerで稼働中環境から切り替えるというものである。
稼働中環境(青色)から新環境(緑)に切り替えるのでBlueGreenDeploymentという。
稼働中環境(青色)から新環境(緑)に切り替えるのでBlueGreenDeploymentという。
Implementing Blue-Green Deployments with AWS
ここではAWSを使ってBlueGreenDeploymentを検証している。1. Floating IPパターン
ELBを使用していないシンプルな構成の場合の話し。インスタンスのElastic IP Addressを付け替えるだけなので、DNSのTTLに影響されずサーバーを切り替えられる。但し、EIPの切り替えには通常数秒程度の時間がかかってしまうという注意点があります。
2. ロードバランサ配下のインスタンスの追加・削除
Auto Scaling Groupで、ELB APIを使ってGreenInstanceの追加とBlueInstanceの削除を行う方法。
注意点としては、ELBがヘルスチェックを行うため、Green Instanceにルーティングされるには遅延がある。
Amazon.comではこの方法を採用しているようである。
(参考:Amazonは1時間に最大1000回もデプロイする。クラウドネイティブなデプロイとはどういうものか? AWS re:Invent基調講演(Day2 AM))
3. AutoScalingのLaunch Configurationを使う方法
これは面倒だし、挙動が見えにくいので割愛。
4. Route53のDNSリダイレクトを使用する方法
ここでは3つの方法が紹介されています。
①CNAMEを変更する方法
②alias resource record setsを変更する方法
③Route53のCDP:Weighted Transitionパターンを使う方法
これはBlue環境からGreen環境へ重み付けラウンドロビンで移行していく方法。
メリットとして以下をあげている。
(1)ほぼゼロのダウンタイム
(2)Green環境でテストができる
(3)カナリアリリースができる
Green環境を構築し、Beanstalkの手順でアップデートするだけ。
Beanstalkは検証した事無いのでわかりませんが、ゼロダウンタイムリリースができるとのこと。
AWSのProgrammable Infrastructureのおかげでクラウドの世界がますます面白くなってきたと感じます。やってみたい方法としては、Route53のWeighted TransitionとBeanstalkかな。この辺の検証ができたらまた報告します。