Azure Webサイト にある Webジョブ。 存在は前から知ってたんだけど、使ってなくて、先日ようやく使ってみたら、めちゃくちゃ便利だったので、 SNS でつぶやいたところ、ブログにまとめてーとリクエストを頂いたので、タイプし始めました。 まずは Microsoft Azure の Azure Webサイト。 簡単に Web アプリケーションをデプロイして、全世界に公開することができる PaaS。 用途にもよると思うけど、IaaS と比べたら、そのメンテナンスの手間はくらべものにならないくらい楽。 スケールアウト、スケールアップも管理ポータルから誰でも直感的にできちゃう。 車で言えば、電子制御なマニュアルシフトや自動ブレーキ、クルーズコントロール、アラウンドビューモニターがついたミドルクラスのオートマチックなハイブリッド車といったところでしょうか。 そんな Azure Webサイト にある Webジョブ。 一言で言うと、様々な言語で書かれた定型的なバッチ処理を アップロードして、スケジューリングできるというサービス。 (実際は Azure スケジューラが使用されています。) ちなみに Webジョブ 自体は GitHub で詳細が公開されてますので こちら を参照してください(英語です)。 なお、プログラムを作成して、ZIP に圧縮してアップロードするのですが、 圧縮前のフォルダに含まれる実行可能なファイルの拡張子は以下の通り。 (VSからデプロイする場合は、自分で圧縮する必要はありません)
.NET 以外はもちろん、単純な .bat や .ps1 なんかも使えるとなると、 開発者の方だけではなく、インフラ系 の IT Pro の方にも歓迎されるのではないでしょうか? (どなたか .NET 系以外のプログラムを試してくださーい) これ何に使えるとかと言うと、例えば、ECサイトの日次締め処理、BI 用の DWH へのデータ連携。 トリガーを指定して実行可能なので、ちょっと時間のかかる処理をオンデマンドで任せることができます。 なので、SignalR を使用して Web ブラウザに対して、プッシュ通知的なこともやろうと思えば、 できちゃうのですが、まぁ、普通は モバイルサービス を使いますね...w なお、すごく重い処理については試してません。 たしか Azure の別サービスで Azure Batch がプレビューですが、あったりするので、 大規模なものはそちらでやるべきなのかもしれません。比較はしてないので詳しい方、教えてくださいw ------------------------------------------------------------- さて、ここからが本題。 今回は可能な限り簡単にということで、手順を最も少なくすることをテーマにします。 <前提> ・Visual Studio 2013 Pro 以上(Community Edition でも可) ・Azure SDK インストールされていること ・C# <手順>
これだけです。簡単ですね! 1.Azure Web サイトを準備 Azure 管理ポータルで Web サイト を作成しておきます。今回は同時にデータベースも作成しておきます。 Webサイトを作成 データベースも一緒に作成 作成したデータベースに SQL Server Management Studio から接続 今回作成した AccessInfo テーブルの定義 2.Visual Studio でコンソールアプリケーションを作成 今回は実行時の現在時刻を DB に保存するという簡単なアプリケーションを作成します。 コンソール アプリケーションを作成 Main.cs にすべての処理を書きます。 EntityFramework にて DB からコードファーストで作成した DbContext クラス(WebJobTestModel.cs) AccessInfo テーブルのエンティティクラス(AccessInfo.cs) 3.作成したアプリをデプロイ 最初に Web サイトを作成しましたが、Webアプリとしては空です。 今回は Web ジョブを 試すために、Web ジョブ で動作させるアプリのみデプロイします。 プロジェクトを右クリック ⇒ [Azure WebJob として発行] をクリック スケジューラの設定。この設定は後から Azure 管理ポータルで編集可能。 今回は [Microsoft Azure Websites] を選択。プロファイルが手元にある人は [インポート] を選択。 先に作成した Web サイトを選択。ここで新たに Web サイトを作成することも可能。 各種設定を確認し、[接続の検証] をクリック。緑のチェックが出たら、[発行] をクリック。 「サイトは正常に発行されました」が表示されれば OK ! 4.Azure 管理ポータルでスケジュールを調整 さきほど VS から発行時にスケジューラの設定があったのですが、確認と調整は Azure 管理ポータルで行います。 Web サイトで [WEB ジョブ] タブを開くと、先ほど発行した、[WebJobTest] が確認できる。 [スケジュール] をクリックすると、スケジューリングが可能。 いちばん右の [ログ] をクリックすると別ページでログが確認できます。 [スケジュール] をクリックするとこの画面に飛んでくる。 Azure の スケジューラ 画面。 スケジューラの詳細設定。 5.ログの確認と SQL データベースの確認 Azure 管理ポータルの Webサイトの [Web ジョブ] ⇒ 一覧右端の [ログ] にあるリンクをクリックするとこの画面が開く。ジョブの実行履歴が見れる。黄色のリンクをクリックすると、ログの詳細が確認できる。 ログの詳細画面。Console.WriteLine() で出力した内容が確認できる。 SQL Server Management Studio からインサートされたデータを確認。 どうでしょう?簡単でしょ!! ポイントは Azure Web サイトの Web ジョブというサービスを使用して、そこにやりたいことを記述したプログラムを作成して、アップロードできることです。スケジューラやトリガーという起動の仕組みはすべて揃っている。アプリから見たら、インフラはそこにあるということです。開発者は本当にやりたいことだけに注力できる。なので、まずはローカルでやりたいこと、必要な処理を作り切っちゃいましょう。できたら、それをポイッとデプロイ♪ プログラムは Web サイトにアップしますが、ぶっちゃけその Web サイトとは全く関係のないプログラムをあげることだってできちゃう。 (これはさすがに無意味ですが...) そして、アップしたプログラムには URL が振られますので、その処理をオンデマンドで Web アプリケーションから起動することも可能。例えば、画像処理や CSV アップロード等、ブラウザからだとちょっと重い処理なんかは、切り出しておいて、Webアプリから非同期で呼んでおく。出来上がったら、通知を返す、DBに登録するといった、これまで Webロール + Worker ロールに任せていた処理を、Webサイト + Webジョブ に置き換えることもできるかと。ま、サイト要件が許せば、ですが。。。 ちなみに今回は、VS からデプロイをしましたが、ビルドした Release フォルダを ZIP に圧縮し、Azure の管理ポータルから主導でアップロードすることも可能です。ただ、おすすめは VS からデプロイです。なぜなら、管理ポータルへの手動アップロードは、更新に対応していないようなので、一度 Web ジョブを削除して、改めて追加する必要があるからです。VS からのデプロイは更新に対応しています! それと、最新の VS への更新(正確には Update3 以降だったかな?)を適用していれば、[新しいプロジェクト] ⇒ [Cloud] ⇒ [Azure WebJob] というテンプレートが選択できるのですが、何回か試したところ、Azure ストレージを使う想定になっているようで、ちょっと使いづらかったです。なので、実業務では今回のように何らかの DB への処理をバッチにすることが多いと思いますので、そういう場合は、コンソールアプリケーション を作成してデプロイで十分だと思います。 また、Console.WriteLine() に文字列を渡せば、Azure WebJobs dashboard にログとして出力されるのですが、日本語を出力すると、文字化けしちゃうので、英数字のみにしましょう。 詳細はソースを公開しますので、そちらを参照してください!!! ※今回使用したソースファイルは以下からダウンロードできます。
0 コメント
|
AuthorYugo Shimizu 株式会社セカンドファクトリー在籍。アーキテクト。主にマイクロソフト系技術を使っております。C#、.NET、SQL Server 等。最近は Power BI や IoT, Web API 等に興味あり。
このブログは IT を普通の人が使えるものにする 民主化 をテーマにしています。 Archives
10 月 2020
Categories
すべて
|