今回は「クラウドサービスへのデプロイ・リリース手法」についてまとめます。
「ゼロダウンタイムデプロイ (Zero Downtime Deployment)」が言われるようになり、様々なデプロイ・リリース方法が出てきました。 そこで今回はデプロイ/リリースの手法についていろいろと調べてまとめてみました。 サイトによって「リリース」と「デプロイ」が混在して記述されている感じもありましたが…「デプロイ」の記載が多かったので今回は「デプロイ」で統一しました。
なお、デプロイとリリースの違いについては 「ビルド / デプロイ / リリース / ロールバック の 意味や違い」 にまとめているので参考にしてください。
デプロイ/リリース方法を分類してみる
クラウドサービスがあたりまえに使われるようになって種類が増えているため、ここでは「手法」「戦略」「対象」の3つの視点で分類してみました。 分類方法は整理するためにあくまで本ブログ上で便宜的に分けているだけで一般的に呼ばれているわけではない点にご注意ください。
「手法」「戦略」「対象」の概念は、「戦略」または「対象」が上位概念(全体に対してどうするか)で、「手法」が下位概念(個別サーバーに対してどうするか)になっています。 また、「手法」「戦略」「対象」は独立した考え方になっているので、それらは組み合わせが可能です。 例えば、「戦略は "ローリング(デプロイ)" で、手法は "イミュータブル(デプロイ)" なデプロイ」や「カナリアデプロイ を インプレース な ローリングデプロイ で実現する」といった組み合わせ方です。
デプロイ手法 (Method)
各サーバーに対してどのようにデプロイを行っていくか、といった視点で分類しています。
名称 | デプロイ先 | ダウンタイム |
---|---|---|
サービス停止 & デプロイ | 稼働中サーバー | 閉塞期間 |
シンボリックリンク切り替え | 稼働中サーバー | ほぼゼロ(最大で再起動時間) |
インプレースデプロイ | 稼働中サーバー | デプロイ+再起動時間 |
ブルー/グリーンデプロイ | 新しいサーバー | ほぼゼロ |
イミュータブルデプロイ | 新しいサーバー | ほぼゼロ |
デプロイ戦略 (Strategy)
複数サーバーに対してどのような順でリリースするか、といった視点で分類しています。
名称 | デプロイ順 | ダウンタイム |
---|---|---|
ローリングデプロイ | ブロック単位で実施 | ゼロ |
一括デプロイ | 全台まとめて実施 | (デプロイ手法に依存) |
デプロイ対象 (Target)
デプロイを行う台数で分類しています。
名称 | デプロイ対象台数 | ダウンタイム |
---|---|---|
カナリアデプロイ | 一定台数のみ | ゼロ |
一括デプロイ | 全台 | (デプロイ戦略、手法に依存) |
サービス停止 & デプロイ
提供中のサービスを一時的に停止(外から見て停止なので実際は閉塞)し、ユーザーからアクセスがない状態でデプロイおよびテストを行った後、再度サービス提供を開始する方法です。 分かりやすいリリース方法ですが、サービス停止が発生するのでユーザーへの影響があります。
シンボリックリンク切り替え
稼働中サーバーに新しいアプリケーションを別フォルダで配置し、提供中サービスが利用しているシンボリックリンクを切り替えることで新しいアプリケーションをリリースする方法です。 リリースするものや状況によっては再起動が発生することになります。
インプレースデプロイ (In-Place Deployment)
稼働中サーバーに対して直接新しいアプリケーションを配置、再起動してしまう方法です。
ブルー/グリーンデプロイ (Blue/Green Deployment)
稼働中サーバー(ブルー)とは別のサーバー(グリーン)に対して新しいアプリケーションを展開し、動作確認を行います。 動作確認が問題なければ
イミュータブルデプロイ (Immutable Deployment)
ブルー/グリーンデプロイに似ていますが、リリース後に旧環境を消してしまう点が異なります。 稼働中サーバーとは別の新しい環境に新しいアプリケーションをデプロイしてテストし、問題なければ新環境に切り替えを行い、旧環境は削除してしまいます。 ロールバックする場合も新環境に古いアプリケーションをリリースして切り替える方法を取ります。
ローリングデプロイ (Rolling Deployment)
複数の稼働中サーバーに対して一定数づつ新しいアプリケーションをデプロイ、リリースしていく方法です。 デプロイする方法は、「稼働中サーバーを一部切り離してデプロイを行い、再びオンラインに戻すを繰り返す方法(インプレースデプロイ)」と 「新しい環境にデプロイして古い環境から切り替え、古い環境は削除するを繰り返す方法(イミュータブルデプロイ)」があります。
カナリアデプロイ (Canary Deployment)
稼働中サーバーの一部だけに新しアプリケーションをデプロイ、リリースする方法です。 特定のユーザーだけに新しいアプリケーションを利用してもらうことで新サービスの検証ができます。 デプロイする方法は問わず、デプロイ先の数だけに注目したデプロイ方法です。
今回は「アプリケーションのデプロイ・リリース手法」についてまとめました。 ポイントは以下の通りです。
- 「手法」「戦略」「対象」に整理してデプロイ方法を考える
参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
参考記事
- Clonos - 近年のデプロイ手法について
- NTT DATA - "Lean Startup"におけるユーザニーズを知るための手法"Canary Release"
- Qiita - 継続的デプロイ&ダウンタイムなしのデプロイのために
- IBM Knowledge Center - Blue-Green デプロイメント、ローリング・デプロイメント、およびカナリア・デプロイメントのモデル化
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!