// 20140811 追記 --------------------------- ↓
WebJobs SDK の 0.3.1-beta に対応したコードに変更しました。
// 20140811 追記 --------------------------- ↑
Windows Azure – 技術者でつなぐ日めくりカレンダー の 3/7 の記事です。Web Jobs SDK と SendGrid を使って、サンプルアプリを作りました。エラーが発生したら、例外のメッセージを Queue ストレージに追加すると、メールでアラートが送信され、Table ストレージにログを記録するシナリオです。
Web Jobs SDK については、しばやんさんのブログが大変分かりやすかったので、参考にさせて頂きました。
SendGrid については、先日 SendGrid Night Episode 2 に参加してきました。
Azure Store から契約すると、マーケティングメールが使えなかったり、プランの上限を超えると送信できなかったりしますが、開発中の動作確認であれば、25,000通/月のFreeプランで十分だと思います。Azure Storeからの契約でも、構造計画研究所が日本語でサポートしてくれるのは助かります。
サンプルアプリの作成
コンソールアプリを作成し、NuGet から Web Jobs と SendGrid の SDK をインストールします。
- Install-Package Microsoft.WindowsAzure.Jobs.Host -Pre
- Install-Package Sendgrid -Version 1.0.1
NetworkCredential には、SendGrid と契約した際の username と password を設定します。Azure ストレージの connectionString は、ポータルから Web サイトの方にも、忘れずに設定しておきます。
#Program.cs static void Main(string[] args) { new JobHost().RunAndBlock(); } public static void SendAlert([QueueInput("error")] string message, [Table("ErrorLog")] IDictionary<Tuple<string, string>, object> table) { // SendGridを利用して、メールでアラート通知 var myMessage = SendGrid.GenerateInstance(); myMessage.AddTo("tony@gmail.com"); myMessage.From = new MailAddress("admin@gooner.com", "システム管理者"); myMessage.Subject = "アラート"; myMessage.Text = message; var credentials = new NetworkCredential("username", "password"); var transportSMTP = SMTP.GenerateInstance(credentials); transportSMTP.Deliver(myMessage); // テーブルストレージにエラーログを書く var partitionKey = "error"; var rowKey = String.Format("{0:D19}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks); table.Add(Tuple.Create(partitionKey, rowKey), new { Message = message }); }
#App.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="AzureJobsRuntime" connectionString="DefaultEndpointsProtocol=https;AccountName=test;AccountKey=xxx"/> <add name="AzureJobsData" connectionString="DefaultEndpointsProtocol=https;AccountName=test;AccountKey=xxx"/> </connectionStrings> </configuration>
あとは、ビルドして作成された Debug フォルダごと zip ファイルに変換して、ポータルから Web サイトの Web Jobs にアップロードして完了です。
結果確認
Queue ストレージに「エラーが発生しました!」というメッセージを追加すると、メールが送信され、Table ストレージにログが記録されました。
まとめ
Web Jobs SDK を利用するメリットは、アプリ本体の実装からログやアラートなどを切り離せることです。Queue ストレージのメッセージには 8KB のサイズ制限があるので、Table ストレージをトリガーにしたかったのですが、難しいようです。エラーログのアラートなら、Blob ストレージを使ってメールに添付する方法もありですが、リアルタイムではないので注意が必要です。