トップ回答者
AzureでASP.NETのWebサイトのバッチ処理の作り方

質問
-
Azureでのバッチ処理の作り方について教えてください。
Visual Studio 2013、ASP.NETでWebサイトを構築し、Azureに展開することを検討しています。
やりたいことは、会員制のWebサイトを構築し、週に一回、会員向けにおしらせメールを送信するというものです。
まず最初に考えられるのは、Webページ(RESTのようなイメージで)を用意して実行するというものですが、この場合は処理に時間がかかる場合にコネクションタイムアウトになる恐れがあります。
次に、何かしらのexeファイルを作成してコマンド実行するというものですが、この場合はASP.NETのプロジェクトとは別に、もう一つプロジェクトを作る必要がありそうです。そうすると、DB周りの設定やクラスファイルなど、もう一つ作りこむ必要があり、保守性に欠けると思います。
phpやRubyの場合、
php test.php
ruby test.rb
などスクリプトファイルを書いて、他のファイルを呼び出すだけでイメージもわきやすいです。
AzureでASP.NETのWebアプリケーションを構築した場合のバッチ処理は、みなさん、どうされているのでしょうか?
回答
-
一般にはWorkerRoleを作るとかだろうと思います。
WebRoleでもRun実装すればいけるとかだった気がします。
※まれにしか実行しない処理ならそれで十分な気もします(WorkerRoleはもったいない)。スケジュールされたジョブ機能というのも使えるようです。
この辺参考になるかもしれません。
http://www.buildinsider.net/web/webapibatch/01--追記
色々あるみたいですね。私のAzureの知識はちょっと古いので、新しい機能などでより適切なものがあればそちらを使ってください。
-
>AzureでASP.NETのWebアプリケーションを構築した場合のバッチ処理は、みなさん、どうされているのでしょうか?
私が知っているところでは、SQL Databaseに作成したスケジュール用のテーブルを作成してWorkerロールで定期的(1分以内)に確認することで、スケジュール実行を実現しています。他にスケジュールで実行できそうなのは以下が思いつきますが、それぞれで制約事項があると思いますので要件にあったものをチョイスしていただければと思います。
・スタートアップタスクにWindowsのタスクスケジューラを設定するスクリプトを仕込む
・Azureのオートメーションサービスを使用する
http://azure.microsoft.com/ja-jp/services/automation/
・AzureのAzure Batchサービスを使用する(プレビュー)
http://azure.microsoft.com/ja-jp/documentation/articles/batch-technical-overview/ただ、エラー時のリトライ処理などで○○分後に再実行したい、といったことが要件にある場合は、DBにスケジュール用のテーブルを作成してWorkerロールで実現した方がいろいろなことが出来るんじゃないかなと思います。
-
WebSitesのバッチ処理であれば
KuduのAPIをたたく方法もありますが、
最近PreviewがはずれたWeb Jobsの利用がよいと思います。
オンプレのタスクスケジューラでタスクを登録するのとほぼ同じ感覚で利用できます。
ブチザッキさんのサイトも参考になるかと思います。
(記事が2014/1/17のものなので、現時点と比べて多少の機能相違にはご注意を)
ASP.NETのWEB開発では、DAL(Data Access Layer)を疎結合に切り出して、
バッチ部分はそれを共有して使うことで保守性も高まると思います。
(詳しい状況がわからないので、当たり障りのない抽象的な回答ですみません)
- 回答としてマーク さかのうえ 2014年10月31日 0:08
-
Azure WebJobsを使うという方法もあると思います。
そんなに詳しくないので多くは語れませんが、しばやんさんのブログ が参考になると思います。
http://blog.shibayan.jp/ちょうどプレビューが外れたタイミングでエントリ書かれてます(2014/10/19)。
- Azure WebJobs と WebJobs SDK が正式リリースされたので使い方のコツをメモしておく
http://blog.shibayan.jp/entry/20141019/1413689099- 回答としてマーク さかのうえ 2014年10月31日 0:10
すべての返信
-
> 週に一回、会員向けにおしらせメールを送信するというものです。
Web アプリの中に実装するのではなく、それとは別に Windows Serivce として実装することを検討されてはいかがですか?
Windows サービス アプリケーションの概要
http://msdn.microsoft.com/ja-jp/library/d56de412(v=vs.110).aspxWeb アプリは、基本的に、クライアントの要求に対して応答を返すというものです。クライアントとのやりとり無しで特定機能を実行するのであれば Windows Serivce が適切ではないかと思います。
もっとも、Azure に Windows Serivce が実装できるかどうかは自分は分かりません。不明なことがあれば、別にスレッドを立てて質問されることをお勧めします。
-
一般にはWorkerRoleを作るとかだろうと思います。
WebRoleでもRun実装すればいけるとかだった気がします。
※まれにしか実行しない処理ならそれで十分な気もします(WorkerRoleはもったいない)。スケジュールされたジョブ機能というのも使えるようです。
この辺参考になるかもしれません。
http://www.buildinsider.net/web/webapibatch/01--追記
色々あるみたいですね。私のAzureの知識はちょっと古いので、新しい機能などでより適切なものがあればそちらを使ってください。
-
>AzureでASP.NETのWebアプリケーションを構築した場合のバッチ処理は、みなさん、どうされているのでしょうか?
私が知っているところでは、SQL Databaseに作成したスケジュール用のテーブルを作成してWorkerロールで定期的(1分以内)に確認することで、スケジュール実行を実現しています。他にスケジュールで実行できそうなのは以下が思いつきますが、それぞれで制約事項があると思いますので要件にあったものをチョイスしていただければと思います。
・スタートアップタスクにWindowsのタスクスケジューラを設定するスクリプトを仕込む
・Azureのオートメーションサービスを使用する
http://azure.microsoft.com/ja-jp/services/automation/
・AzureのAzure Batchサービスを使用する(プレビュー)
http://azure.microsoft.com/ja-jp/documentation/articles/batch-technical-overview/ただ、エラー時のリトライ処理などで○○分後に再実行したい、といったことが要件にある場合は、DBにスケジュール用のテーブルを作成してWorkerロールで実現した方がいろいろなことが出来るんじゃないかなと思います。
-
WebSitesのバッチ処理であれば
KuduのAPIをたたく方法もありますが、
最近PreviewがはずれたWeb Jobsの利用がよいと思います。
オンプレのタスクスケジューラでタスクを登録するのとほぼ同じ感覚で利用できます。
ブチザッキさんのサイトも参考になるかと思います。
(記事が2014/1/17のものなので、現時点と比べて多少の機能相違にはご注意を)
ASP.NETのWEB開発では、DAL(Data Access Layer)を疎結合に切り出して、
バッチ部分はそれを共有して使うことで保守性も高まると思います。
(詳しい状況がわからないので、当たり障りのない抽象的な回答ですみません)
- 回答としてマーク さかのうえ 2014年10月31日 0:08
-
Azure WebJobsを使うという方法もあると思います。
そんなに詳しくないので多くは語れませんが、しばやんさんのブログ が参考になると思います。
http://blog.shibayan.jp/ちょうどプレビューが外れたタイミングでエントリ書かれてます(2014/10/19)。
- Azure WebJobs と WebJobs SDK が正式リリースされたので使い方のコツをメモしておく
http://blog.shibayan.jp/entry/20141019/1413689099- 回答としてマーク さかのうえ 2014年10月31日 0:10
-
回答ありがとうございます。Web Jobsを初めて知りました。「ブチザッキさんのサイト」もわかりやすかったです。こちらも実装検討したいと思います。