しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure WebJobs と WebJobs SDK が正式リリースされたので使い方のコツをメモしておく

割と時間がかかりましたが、Azure WebJobs SDK の正式版がついにリリースされました。

NuGet Gallery | Microsoft.Azure.WebJobs 1.0.0

そして、ついに Azure WebJobs 自体もプレビューが取れて正式リリースされたようです。数日前まではあったはずのプレビューという表示が無くなっています。

f:id:shiba-yan:20141019011936p:plain

折角なので、Azure WebJobs を実際に使ってみて嵌った点など、使い方のコツ的なものを紹介しておこうかと思います。SDK に限らず紹介していきます。

プロジェクトテンプレート

Visual Studio 2013 Update 3 をインストール済みの環境であれば、Cloud カテゴリに Azure WebJobs テンプレートが追加されているはずです。

f:id:shiba-yan:20141019010324p:plain

しかし、このテンプレートは特にコンソールアプリケーションのプロジェクトテンプレートと違いが無いので、既に Web アプリケーションを作っている場合は、ソリューションエクスプローラーの右クリックメニューから追加した方が色々便利です。

f:id:shiba-yan:20141019010701p:plain

この方法だと WebJobs としての基本的な設定を同時に行えるので便利です。Web アプリケーションとの関連付けも自動的に行われます。

run.cmd を用意しておく

WebJob としてデプロイしたファイルに exe が複数含まれていたりすると、どの実行ファイルがエントリポイントなのか Kudu が判断できなくなるので、基本的に run.cmd というファイルを用意しておくことが公式な情報として推奨されています。

ちなみに Kudu がどのような順番でエントリポイントを検索するかというロジックは Wiki にあります。

We use the following logic to decide which file is the script to run within the job's directory:

  • Per file type we look first for a file named: run.{file type extension} (for example run.cmd or run.exe .
  • If it doesn't exists for all file types, we'll then look for the first file with a supported file type extension.
  • The order of file types extension used is: .cmd , .bat , .exe , .ps1 , .sh , .php , .py , .js .
  • The recommended script file to have in your job directory is: run.cmd .
  • Note: We'll only look for a script under the root directory of that job (not under sub directories of it).
Web jobs · projectkudu/kudu Wiki · GitHub

run.* というファイル名が付いたものを最優先で検索しに行くので、run.cmd というファイル名で用意しておくわけです。ちなみにルートに用意しておかないと WebJob として認識されないので、その点だけ注意が必要だと思います。*1

ストレージ接続文字列の設定

Azure WebJobs Dashboard を使うためには、ストレージ接続文字列を App.config と管理ポータルにある接続文字列の 2 箇所で設定する必要があります。

ちなみに正しく設定できていないと、以下のように怒られます。

f:id:shiba-yan:20141019012817p:plain

WebJobs 自体には App.config に以下の 2 つの接続文字列を追加しておきます。

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=NAME;AccountKey=KEY" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=NAME;AccountKey=KEY" />

そして管理ポータルでは AzureWebJobsDashboard だけを追加しておけば大丈夫です。

f:id:shiba-yan:20141019012923p:plain

WebJobs Dashboard を使えないとデバッグが非常に困難になるので、必ず設定しておきましょう。

Visual Studio でのデプロイ

Visual Studio 2013 Update 3 から Azure WebJob のデプロイ機能が追加され、非常に簡単にスケジュールで実行される WebJob のデプロイが行えるようになりました。

f:id:shiba-yan:20141010161227p:plain

管理ポータルではタイムゾーンを考慮する必要がありましたが、Visual Studio からは自動で開発マシンのタイムゾーンが反映されるので、良く分からないタイムゾーンになっていて実行時間がおかしくなるというミスも無くせそうです。

あと、終了日の無いスケジュールを指定できるのも便利です。

デプロイに関係する json の設定については、公式のドキュメントが英語ですが詳しいです。

Deploy Azure WebJobs to Azure Websites

ちなみに Web アプリケーションプロジェクトに WebJob プロジェクトを関連付けておくと、Web サイトのデプロイ時に同時に WebJob もデプロイしてくれるようになります。実に素晴らしい。

*1:つまり、サブディレクトリに外部 exe などを置いておくという手もあり