システム自動管理ツールとSCMの活用

障害対応や機能追加でシステムの改修を行った後は、開発環境・テスト環境などで動作を確認した後に本番環境に反映するのが一般的です。このとき、アプリケーションの変更は、ビルドとデプロイの方法が定型的なので、環境によって反映が漏れることは少ないです。しかし、ファイル(シェルスクリプトなど)やOS・ソフトウェアの設定(クーロンやWebサーバの設定など)は、環境ごとに手作業で設定することが多く、反映が漏れることがあります。

この問題の解決手段として、システム自動管理ツールとSCMを組み合わせて運用する方法があります。

システム自動管理ツールは、OS上の環境に対する定義情報を元に、実際の環境設定を自動的に行ってくれるツールです。代表的なツールであるPuppetの場合、以下のような環境設定が自動化できます。

  • ソフトウェア(基本的にaptやyumで管理されてるもの)のインストールやプロセスの起動
  • OSのユーザの設定
  • クーロンの設定
  • 任意のファイルのコピー・変更

など

SCM(software configuration management)は、いわゆるバージョン管理ツールのことで、SubversionやGitが代表的です。

システム自動管理ツールとSCMの活用イメージ

システム自動管理ツールとSCMを活用した場合のイメージは以下になります。

環境の定義情報をSCMで管理し、各環境は、SCM上の定義情報を利用します。これにより、同じ定義情報をもとに各環境をツールが自動で設定するため、設定のズレや漏れを無くすことができます。また、環境ごとに定義情報のバージョンを変えることができるので、「テスト環境でテストが終わるまでは本番環境に設定を反映しない」という運用ができます。また、任意のバージョンの環境に戻すことも容易ですし、新たに環境を構築するのも容易です。

導入時の課題

概念的な説明は簡単ですが、実際の導入は簡単ではありません。ツールの知識も当然必要ですが、「どこまでツールに管理させるか?」のさじ加減も大事です。ツールの機能を駆使すれば、さまざまな設定を管理できますし、環境ごとの差異(本番環境の場合だけ設定を変えるなど)も吸収することができます。しかし、その分、環境の定義情報が複雑になり、メンテナンス性が悪くなります。

また、システム自動管理ツールとSCMを連携させる手段も、適切な方法を選択する必要があります。例えば、Puppetの場合、環境別に定義情報を管理するEnvironmentsという機能が備わっていますが、個人的には、Environments機能は使ない方がシンプルだと思います。具体的には、こちらのサイトで紹介されている方法が参考になります(恐らくEnvironments機能は使っていないと思います)。

さいごに

導入は簡単ではないとはいえ、設定を自動化するメリットは大きいので、「ここの部分の設定が自動化できると有難い」という部分があれば、積極的に導入を検討すべきだと思います。