この間の続きです。
この間は簡単にCSPackでWindows Azureのデプロイパッケージを作成する方法を記載しました。
ただ、後でわかりましたが前回のフォルダ構成だとWindows Azure SDK 1.3から使えるStartupTasksの利用時やCSRunコマンドを使ったCompute Emulatorでの実行時に問題があることがわかりました。
なので今日はその辺のフォローアップをしたいと思います。
まずWebアプリケーションとWebRole用のEntryPointを作成、サービス定義ファイルを作成するところまでは前回と同じです。忘れずにサービス定義ファイルにStart要素とTask要素を追加してスタートアップタスクを登録しましょう。
さてこれで一通りファイルがそろいました。
前回と違うのは、ファイルの置き場所です。
指定したタスクファイルと、ロールのEntryPointなDLLをアプリケーションルートのBin(この場合発行したWebアプリのBinフォルダ)に移す必要があります。
※タスクファイルはサービス定義ファイルでパス指定しなかった場合
こんな感じですね。
ではCSPackコマンドでパッキングしましょう。
…とその前に、Compute Emulatorで動作するか見てみようと思います。
Compute Emulatorで動作させるにはCSPackのオプションに /copyonlyを追加します。
パスの構成が面倒くさくなったのでおさらい。
- DeployPackage フォルダにRolePropertyファイルやCSDEFファイルをおく
- PublishedWeb フォルダ配下にapproot フォルダ作ってそこに発行されたWebアプリがある
という状態でPublishedWebフォルダでCSPackを実行した場合です。
C:\Temp\samples\CSPackSample\PublishedWeb>cspack ..\deploypackage\ServiceDefinition.csdef
/sitePhysicalDirectories:CSPackWebRole;Web;approot
/out:C:\Temp\samples\CSPackSample\CSPackWebRole.csx
/role:CSPackWebRole;approot;bin\SimpleAzureEntryPoint.dll
/rolePropertiesFile:CSPackWebRole;..\deploypackage\roleproperty.txt
/generateConfigurationFile:..\deploypackage\ServiceConfiguration.cscfg
/copyonly
※実際は全部1行です。パスに関する部分は赤字にしました。
エラーなく完了すれば、指定したフォルダに .csxなフォルダが作成されていると思います。
※.csxでなくてもいいと思うのですがツールにあわせました。
作成した(今回だとCSPackWebRole.csx)フォルダを見てみると。
こんな感じでapprootに指定したWebアプリのファイル、その下のBinフォルダにEntryPointなDLLや指定したタスクのコマンドファイルがちゃんとコピーされているのがわかります。
ではこの状態でComputeEmulatorで実行してみたいと思います。
※CSRunコマンドを実行する場合は管理者権限で実行しましょう。
Windows Azure SDK コマンドプロンプトを開いて以下のように実行します。
csrun CSPackWebRole.csx .\DeployPackage\ServiceConfiguration.cscfg
1つ目のオプションに.csxフォルダ、2つ目のオプションにサービス設定ファイル(.cscfg)を指定するだけです。
簡単ですね。ちゃんと起動してアクセスできることが確認できます。
もしフォルダ構成やCSPackのオプションをミスってたりすると、起動はしますがひたすらエラーでまともに起動しなかったりするので注意しましょう。
※たちの悪いことに、構文的にエラーがなければ(フォルダ階層が多少腐ってても)CSPackはエラーにならないので/copyonlyオプションつけてapproot以下が想定した通りになっているか確認する必要があります。
無事動作することが確認できれば、同様にCSPackで/outオプションで.cspkgファイルを指定し、/copyonlyオプションを外せばばWindows Azureへのデプロイ用パッケージができあがります。
これでいろいろばっちりですね!



