サービスを運用するうえで、リリース(デプロイ)に伴うダウンタイムを減らすことは非常に重要です。これまでは利用者の少ない深夜帯を利用してリリースするという方法が一般的でしたが、近年のWEBサービスに求められるニーズを考えると「24時間365日稼働し続けられること」が、ユーザーから求められる必須条件といえます。
サービスのリリースにかかるダウンタイムを減らし、安定稼働する戦略を取ることはユーザーからの満足度及び信頼度向上につながります。本記事では、SREの取り組みのひとつであるリリースエンジニアリング、そしてデプロイ戦略について解説していきます。
リリースエンジニアリングとは
リリースエンジニアリングは、リリース時に起こる以下のような課題を避けるために用いられる手法です。
- 繰り返し行われる手作業であるトイルの削減
- 自動化されていない作業の一貫性の確立
- ロールアウトの状況把握および迅速なロールバックの実現
SREの教則本として知られるSREワークブックによれば、以下がリリースエンジニアリングの基本原則と言われています。
・再現可能なビルド
常に再現可能な成果物を生成できる状態でなくてはならない。同じ入力から生成されたコードは、いつでも同じ出力を生成するべきである。
・自動化されたビルド
コードがコミットされたら、自動化によって成果物が生成され、ストレージシステムにアップロードされるべきである。
・自動化されたテスト
自動化されたビルドが生成した成果物が機能することを、テストスイートが検証すべきである。
・自動化されたデプロイメント
デプロイメントは人間ではなく、自動化された仕組みによって行われるべきである。
・小規模なデプロイメント
ビルドの成果物には、小さく自己完結した変更が含まれているべきである。
上記の原則に従ってリリースが自動化できれば、リリース頻度を上げることができます。リリースの頻度が上がるという事は、それぞれのリリースに含まれる変更が少なくなり、バグがあった場合でもロールバックの負担が下がることを意味します。これによってリスクを減らしつつバグの修正を早くユーザーに届けられるというメリットがあります。サービスの成長速度の向上はもちろん、ユーザーからの信頼度にもつながる考えです。
次項では、リリースエンジニアの中の「デプロイ戦略」をピックアップして詳しく解説していきます。デプロイ戦略には様々な手法があるため、自社の運用体制に最もあった手法を選べると良いでしょう。
デプロイ戦略の方法とそれぞれの特徴
ここでは、デプロイ戦略について詳しく解説いたします。デプロイ戦略としてよく使用されるものとして、ブルーグリーンデプロイメント、ローリングアップデート、インプレースアップデート、カナリアリリースといったものが挙げられます。
それぞれの違いについて詳しく見ていきます。
ブルーグリーンデプロイメント
参考画像:Google Cloud
ブルーグリーンデプロイメントは、既存の環境に影響を与えず、新しい環境に新しいバージョンをデプロイする方法のことを指します。既存の環境とは分離された環境に新しいバージョンを構築するため、安全性の高いデプロイ方法として多くの企業で用いられている手法です。
新たに作られた環境で十分にテストを行い、品質の担保が取れたタイミングでユーザーを古いバージョンから新しいバージョンに切り替えます。
【メリット】
- ダウンタイムゼロ
- 即時ロールバックが可能
- 完全な環境の分離
【デメリット】
- 高コスト
- 運用上のオーバーヘッド
ローリングアップデート
参考画像:Google Cloud
ローリングアップデートは、すべてのインスタンスを同時に更新するのではなく、徐々に新しいコードを追加していく手法のことを指します。既存の環境は一時的に古いバージョンと新しいバージョンが共存する状態になり、やがて新しいバージョンにすべて置き換わります。
徐々に新しいバージョンに切り替わる特性上、ロールアウトと同様にロールバックに時間がかかるというデメリットもあります。
【メリット】
- ダウンタイムゼロ
- デプロイリスクの削減
【デメリット】
- ロールバックが遅い
- 同環境内で下位互換性が存在する
インプレースアップデート
参考画像:Google Cloud
インプレースアップデートは既存の環境に対して新しいバージョンを上書きしてリリースする手法のことを指します。リリース方法が非常にシンプルな点と低コストな点が大きな利点です。バージョン管理の必要性がない、小規模なリリースで扱われることの多い手法です。
【メリット】
- リリース方法がシンプル
- 低コスト
【デメリット】
- ダウンタイムが発生する
- 大規模なリリースには向いていない
- バージョン管理がしづらい
カナリアリリース
参考画像:Google Cloud
カナリアリリースとは、新しいバージョンをある一部の特定ユーザーにのみ公開し、本番環境でのテストを行ってから全体に展開する手法のことを指します。ブルーグリーンデプロイとは、実際にユーザーが本番環境で使用できるという点で異なります。
基本的にはブルーグリーンデプロイの構成を活用し、特定ユーザーを新しい環境であるグリーンバージョンにルーティングすることで実装します。特定のユーザーの選定についてはロードバランサやプロキシ単位、アプリケーション上の設定やユーザーの使用地域といった情報をもとにコントロールすることも可能です。
【メリット】
- ダウンタイム無し
- 本番環境でのテストが可能
- 高速ロールバック
【デメリット】
- ロールアウトに時間がかかる
- モニタリング機能の実装が必要
リリースエンジニアリングの最適化なら弊社スリーシェイクにお任せください!
このように、リリースエンジニアリングの「デプロイ戦略」という一部分にフォーカスしても様々な戦略があります。これらの戦略は事業規模や会社の方針、運用体制によって最適なものを選ぶ必要があります。
リリースエンジニアリングについてはサービスが成長した後に検討されることが多いですが、サービスの規模が大きくなればなるほど複雑で煩雑化しやすくなるポイントでもあります。
そのため、可能であればサービス開始前から考慮し、取り組むことが最善だと言えます。しかし現実問題として、サービスの初期リリースという手のかかるタイミングで、初めからリリースエンジニアリングにリソースを割くことは難しいでしょう。
もし貴社で、リリースエンジニアリングをなるべく初期段階で取り組んでいきたいという企業様がいらっしゃいましたら、弊社スリーシェイクにお問い合わせください。貴社にあった最適なプランを構築し、貴社のサービスの成長をサポートさせていただきます。
サービス詳細や料金についてのご質問・ご相談などお気軽にお問い合わせください
サービスのメリットや紹介テキスト
金融・医療・動画配信・AI・ゲームなどの様々な領域での実績から、最適な課題設定と解決策を提示します。
SreakeではSREや関連する情報を発信していきます。