ソフトウェアデプロイメント(Software deployment)は、開発された
ソフトウェアシステムをユーザーが利用できる状態にするための一連の活動を指します。これは単に
ソフトウェアを配置するだけでなく、リリースからサポート終了まで、
ソフトウェアのライフサイクル全体に関わる重要な
プロセスです。
デプロイメントの構成要素
デプロイメントは、開発者側と顧客側の両方で協力して行う、複雑で相互に関連する活動で構成されています。
ソフトウェアの種類や目的によって具体的な手順は異なりますが、一般的には以下のような作業が含まれます。
リリース
ソフトウェア開発が完了した後、顧客に配布可能な状態にすることをリリースと呼びます。市販の
ソフトウェアの場合、注文を受けてから出荷するものと、見込み生産して大量に出荷するものとがあり、それぞれリリース手順が異なります。
顧客の環境に
ソフトウェアを導入する最初の作業が
インストールです。専用のインストーラを用いて、ファイル群の転送や設定を行います。
アクティベート
インストールされた
ソフトウェアを使用可能にする作業がアクティベートです。多くの場合、
ソフトウェアの
実行ファイルを起動することを指します。プロプライエタリ
ソフトウェアでは、
ライセンス認証のために
シリアル番号などを入力し、キーコードを取得するなどの手順を踏むことがあります。
ディアクティベート
アクティベートの反対で、実行中の
ソフトウェアを停止させることをディアクティベートと呼びます。
ソフトウェアの更新時に、古いバージョンを停止させる際などに必要になります。
アップデート(更新)
既にデプロイされている
ソフトウェアを、新しいバージョンに更新したり、パッチを適用したりする活動をアップデートと呼びます。データベースのバージョンアップなどもアップデートに含まれます。
不要になった
ソフトウェアをシステムから削除する作業です。
インストールの逆の作業となります。
サポート停止
ソフトウェア製品のライフサイクルが終了し、開発元からのサポートが打ち切られることを指します。
アップデートの重要性と課題
ソフトウェアのアップデートは、バグの修正や新機能の追加のために不可欠ですが、デプロイ済みの
ソフトウェアが提供するサービスに様々な影響を与える可能性があります。例えば、一時的なサービス停止や、アップデート版のバグによるサービスレベルの低下などが考えられます。最悪の場合、アップデートによって重要な既存サービスに悪影響が出てしまう(デグレード)可能性があり、その場合はアップデート前の状態に戻す
ロールバックが必要になります。
アップデートに伴う課題
- - 一時的なサービス停止
- - サービスレベルの低下
- - アップデートの失敗によるデグレード
- - ロールバックの困難性
これらの課題を解決するため、様々なデプロイメント手法が開発されています。
様々なデプロイメント手法
ローリングアップデート
新バージョンを段階的にデプロイし、旧バージョンと並行稼働させることで、サービス停止時間を最小限に抑える手法です。旧バージョンを段階的に停止させていくことで、無停止でのアップデートを実現します。
カナリアリリース
新バージョンを一部のユーザー(カナリア)にのみ提供し、本番環境での動作を検証する手法です。問題がなければ徐々に提供範囲を広げていきます。ローリングアップデートと似た構成になります。
Blue-Greenデプロイメント
稼働中の環境(Blue)とは別に、新バージョンを導入した環境(Green)を用意し、テスト後にDNSルーティングなどを切り替えて、Green環境にリクエストを切り替える手法です。これにより、切り替え時のダウンタイムを短縮できます。
これらのデプロイメント手法は、Immutable Infrastructure(不変インフラ)の考え方に基づいています。これは、既存の
ソフトウェアに手を加えるのではなく、新しいインスタンスを作成し、旧インスタンスと切り替えることで、常に安定した環境を保つというものです。また、コードによるインフラ構成(
Infrastructure as Code)を組み合わせることで、構成の再現性を高めています。
コンテナオーケストレーションシステム
コンテナ化されたアプリケーションの場合、
Kubernetesなどのコンテナオーケストレーションシステムを用いて、より高度なアップデート管理が可能です。例えば
Kubernetesは、ローリングアップデートに対応しており、自動的に新バージョンをデプロイすることができます。
まとめ
ソフトウェアデプロイメントは、
ソフトウェアのライフサイクルにおいて不可欠な
プロセスであり、その手法は多岐にわたります。それぞれの状況や要件に合わせて最適な手法を選択し、効率的かつ安全な
ソフトウェア運用を目指すことが重要です。
参考文献
Carzaniga A., Fuggetta A., Hall R. S., Van Der Hoek A., Heimbigner D., Wolf A. L. — A Characterization Framework for Software Deployment Technologies — Technical Report CU-CS-857-98, Dept. of Computer Science, University of Colorado, April 1998. http://serl.cs.colorado.edu/~carzanig/papers/CU-CS-857-98.pdf
関連項目
外部リンク
- - Solution Installation Schema Submission request to W3C
- - OASIS Solution Deployment Descriptor TC
- - OMG Specification for Deployment and Configuration of Component-based Distributed Applications (OMG D&C)
- - JSR 88: Java™ EE Application Deployment