はじめに
NAntは.NETのビルドスクリプティングツールです。JavaのビルドツールAntとよく似ているので、本稿の説明はAntにもそのまま当てはまるものと思われます。本稿は、NAntについてある程度知っていることを前提としています。
純粋主義者は異を唱えるかもしれませんが、NAntは本質的には一般のビルドタスク(ソース制御操作、コンパイル、ファイルの移動や削除など)を中心に最適化された高級プログラミング言語だと言えます。その自動化能力ゆえ、常時統合を実現するためによく使われます。しかし、用途はそればかりでありません。
本稿では、私がNAntを用いて解決したある厄介なバックアップ問題を扱います。ここではカスタマイズ可能な混成的バックアップシステムを構築する方法を具体的に説明します。本稿はNAntの基本的な知識を前提としています。このツールの詳細については、NAntサイトを参照してください。
本稿で扱うバックアップ対象サーバーではWindows 2003、.NET、SQL、MySQL、MSDE、PHP、メールサーバーが実行されています。このサーバーは95件のクライアントをホストし、各クライアントのバックアップ要件は多岐に渡ります。バックアップについてまったく検討したことがないクライアントや自分でバックアップを管理したがるクライアントがある一方で、不慮のデータ消失を恐れて正式の信頼できるバックアッププロセスを要請するクライアントもあります。このように多様な要件を限られた予算で満たさなければならないため、このバックアップ問題を商用ツールで解決するのは現実的でありません。
そこで、必要なバックアップタイプをIISメタデータのバックアップ、MySQLデータのバックアップ、MS SQLデータのバックアップ、各サイトファイルのバックアップに分類しました。このリストを見る限り、NAntで要件は満たせそうです。もう1つ、バックアップと共に何を行うかという問題があります。とりあえず考えられるオプションとしては、ファイルを圧縮してサーバーに保存する、ファイルを圧縮してネットワークドライブに保存する、ファイルを圧縮してメールで送信する、などがあります。いずれにせよ、クライアントが違えばソリューションも異なる、という点を押さえておくことが大切です。
その他の設計目標は、1つはスケジュールバックアップが可能なことで、もう1つはサーバーに新規のクライアントを追加してもバックアッププロセスの設定作業に過剰な負荷がかからないようにすることです。
バックアップの課題(1):IISメタベースのバックアップ
IISメタベースにはIISの構成情報が格納されています。大きな障害が生じても、これとサイトデータがあればWebサーバーを復元できます。IISスナップイン内でバックアップ対象のコンピュータを右クリックし、[すべてのタスク]メニューの[構成のバックアップまたは復元]を選択すると、IISメタベースがバックアップされます。幸い、この機能はスクリプティングからも利用できます。
Windows 2000またはWindows XPでバックアップを作成するには、コマンドラインから次のコマンドを実行します。
cscript metaback.vbs
Windows 2003では次のコマンドを実行します。
cscript iisback.vbs /backup /b <backup name>
これらのコマンドで作成したIISバックアップを使えば、後でIIS構成を復元することができます。単純にコマンドを実行しているだけなので、そのままNAntスクリプトに含めることができます。NAntスクリプトは次のようになります。
<!-- Parameters -->
セクションに記載されている値は、スクリプトを呼び出すときにプロパティとして設定することを期待されている値です。<?xml version="1.0"?> <project name="IIS" default="CreateIISBackup"> <!-- Parameters backupName scriptDirectory --> <target name="CreateIISBackup" > <exec basedir="${ scriptDirectory }" program="cscript" commandline="iisback.vbs /backup /b ${backupName}" /> </target> </project>
このスクリプトを「IIS.build」という名前で保存します。このスクリプトを呼び出す前にプロパティを設定しておく必要があるため、コマンドラインから直接実行することはできません。このIISスクリプトを実行するスクリプトは次のようになります。
<?xml version="1.0"?> <project name="BackupIIS" default="Backup"> <property name="backupName" value="IISBackup" /> <!-- For this script to work, this must be set to the location of the script (metaback.vbs or IISback.vbs) --> <property name=" scriptDirectory" value="IISBackup" /> <target name="Backup" > <nant buildfile="IIS.build" inheritall="true" /> </target> </project>
このスクリプトを「BackupIIS.build」という名前で保存します。このバックアップを実行すると、IISBackupというIISバックアップが作成されます。このバックアップを実行するためには、両方のスクリプトを同じディレクトリに置き、「nant.exe」にシステムパスを通しておく必要があります。コマンドプロンプトを開き、スクリプトの置かれているディレクトリに移動して次のように入力し、[Enter]キーを押します。
nant -buildfile:BackupIIS.build
バックアップが正常に作成されたことを確認するため、IISスナップインを開き、コンピュータノードを右クリックし、[すべてのタスク]メニューの[構成のバックアップまたは復元]を選択します。バックアップグリッド内にIISBackupというバックアップが表示されるはずです。