Scott Hanselmanが紹介している (英語 / 日本語) Microsoft Azure WebJobs SDKの新しいプレビューをリリースします。以前のリリースをさらに確認するには、この発表のポスト (英語 / 日本語 / 日本語) をお読みください。
今回のリリースには、0.5.0-betaと同じ一連の機能に加えて、いくつかの心躍る新機能もあります。
今回のリリースのダウンロード
NuGetギャラリーから、WebJobs SDKをダウンロードできます。次のように、NuGetパッケージ マネージャー コンソールを使って、NuGetギャラリーからパッケージのインストールやアップデートを行えます:
Install-Package Microsoft.Azure.WebJobs ?Pre
Microsoft Azure Service Busトリガーを使いたい場合は、次のパッケージをインストールしてください:
Install-Package Microsoft.Azure.WebJobs.ServiceBus -Pre
WebJobs SDKとは何か?
Microsoft Azure WebsitesのWebJobs (Webジョブ) (英語 / 日本語) 機能は、Webサイトで、サービスやバックグラウンド タスクなどのプログラムを実行するための、簡単な方法を提供します。.exe、.cmd、.batなどの実行可能ファイルをアップロードして、実行できます。これらのファイルは、トリガーされたWebJobs、または連続的なWebJobsとして実行されます。WebJobs SDKがないと、バックグラウンド タスクの接続と実行には、多くの複雑なプログラミングが必要となります。SDKは、一般的なタスクを行うために書くコード量を最小化するフレームワークを提供します。
WebJobs SDKは、Microsoft Azure Storage (BLOB、テーブル、キュー)、Service Busと連携する、バインディングとトリガーのシステムを持っています。バインディング システムによって、Microsoft Azure Storageのオブジェクトを読み書きするコードを書くのが、簡単になります。トリガー システムは、キューやBLOBで新規データを受信した際に、自分のコード内の関数を呼び出します。
今回のプレビューのアップデート
テーブル入力
SDKの機能の1つに、Azureテーブル ストレージのバインディングがあります。SDKの今回のリリースでは、データをAzureテーブルに入力 (ingress) できます。入力は、(CSVリーダーのような) BLOBに格納されたファイルを解析し、その値をテーブルに格納する際の、一般的なシナリオです。この場合、入力関数は、多数の行 (場合によっては、数百万行) を書き込みます。
WebJobs SDKによって、この機能を簡単に実装することが可能になり、(テーブルに書き出された行数などの) リアル タイム監視機能を追加できるので、入力関数の進捗を監視できます。
次の関数は、Azureテーブル ストレージに10万行を書き込む方法を示しています。
public static class Program
{
static void Main()
{
JobHost host = new JobHost();
host.Call(typeof(Program).GetMethod("Ingress"));
}
[NoAutomaticTrigger]
public static void Ingress([Table("Ingress")] ICollector<Person> tableBinding)
{
// 多数の行の入力をシミュレーションするためにループ。
// これを、BLOBストレージから読み取りAzureテーブルに書き込む
// 独自のロジックで置き換える。
for (int i = 0; i < 100000; i++)
{
tableBinding.Add(
new Person()
{ PartitionKey = "Foo", RowKey = i.ToString(), Name = "Name" }
);
}
}
}
public class Person
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string Name { get; set; }
}
この関数を実行し、ダッシュボードで関数を表示すると、次のスナップショットが表示されます。ダッシュボードは、「Ingress」というテーブルに書き込まれた行数をリアル タイムで示します。これは長時間の関数なので、ダッシュボードには、長時間の関数をキャンセルできる「Abort Host」(ホストを中止する) ボタンがあります。
入力関数が問題なく完了すると、ダッシュボードは次のような成功メッセージを表示します。
この例では、入力関数は、host.Call() を介して呼び出されました。このパターンを使って、スケジュールに従ってこの入力プログラムを呼び出せます。また、コンテナーに新規BLOBがアップロードされた際に、入力関数を呼び出すこともできます。たとえば、BLOBストレージに格納されたファイルを解析し、データをテーブルに書き込むバックグラウンド処理プログラムがある場合、次のようにできます:
public static class Program
{
static void Main()
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void CSVParsing(
[BlobTrigger(@"table-uploads{name}")] TextReader input,
[Table("Ingress")] ICollector<Person> tableBinding)
{
// これは、CSVファイルを解析し、それをAzureテーブルに
// 格納する方法を示す疑似コード
IEnumerable<Person> rows = ParseUsingMyCSVParser<Person>(inputStream);
foreach (var row in rows)
{
tableBinding.Add(row);
}
}
}
public class Person
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string Name { get; set; }
}
開発者は、入力シナリオをかなり簡単に実装でき、また、自分で診断コードを書く必要なしに、ダッシュボードでリアル タイム監視できるようになりました。
入力シナリオ以外に、Azureテーブルで次のことも行えます:
- 単一のエンティティを読み取る
- パーティションを列挙する
- エンティティの一覧を取得するために、IQueryable/ IEnumerableにバインドする
- エンティティを作成、更新、削除する
さらなる情報については、次のサンプルを参照してください: https://github.com/Azure/azure-webjobs-sdk-samples/tree/master/BasicSamples/TableOperations
キューへの複数メッセージの送信
今回のリリースから、ICollector.Add() を使って、キューに複数メッセージを送信できます。
注: SDKの以前のバージョンでは、ICollectionを使っていましたが、これは削除されました。今後は、ICollectorを使ってください。
もう1つの挙動の変更は、Add() を行うとすぐに、SDKはキューにメッセージを書き込むようになりました。SDKの以前のバージョンでは、関数が完了するまで待ってから、キューにすべてのメッセージを書き込んでいました。
次のコードは、キューへの複数メッセージの送信方法を示しています。
public static class Program
{
static void Main()
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void WriteMultipleQueueMessages(
[QueueTrigger("queue")] string message,
[Queue("outputqueue")]ICollector<string> output)
{
// キュー メッセージを処理し、outputqueueに複数メッセージを書き込む
output.Add("message1");
output.Add("message2");
}
}
サンプル
WebJobs SDK向けのサンプルは、https://github.com/Azure/azure-webjobs-sdk-samples にあります。
- BLOB、テーブル、キュー、Service Bus向けのトリガーとバインディングの使い方のサンプルがあります。
- PhluffyShuffyというサンプルがあります。これは、ユーザーが写真をアップロードでき、それがBLOBストレージの写真を処理する関数をトリガーする、画像処理Webサイトです。
ドキュメント
- チュートリアル: Get Started with the Azure WebJobs SDK (Azure WebJobs SDKでの作業の開始) (英語 / 日本語 / 日本語)
- Channel 9動画: Making Your Jobs Easier With Windows Azure WebJobs SDK (Azure WebJobs SDKで仕事をより簡単にする)
- Scott Hanselmanによる、WebJobsとSDKの紹介 (英語 / 日本語)
- Brady Gasterによって、WebJobsとASP.NETを使って構築されたWebサイト監視 (英語 / 日本語)
- Azure WebJobs – Recommended Resources (推奨リソース) (英語 / 日本語)
- Azure FridayのWebJobs動画シリーズ
SDKを使ったWebJobsのAzure Websitesへのデプロイ
Visual Studio 2013 Update 3とAzure SDK 2.4は、WebJobsをAzure Websitesに発行するVisual Studioツールのサポートを追加しました。さらなる情報については、How to Deploy Azure WebJobs to Azure Websites (Azure WebsitesへのAzure WebJobsのデプロイ方法) (英語 / 日本語 / 日本語)
0.5.0-betaから0.6.0-betaへの移行時の既知の問題
ICollectionに代わるICollector
SDKの以前のバージョンでは、ICollectionを使っていましたが、これは削除されました。今回のリリースからは、ICollectorを使ってください。
もう1つの挙動の変更は、Add() を行うとすぐに、SDKはキューにメッセージを書き込むようになりました。SDKの以前のバージョンでは、関数が完了するまで待ってから、キューにすべてのメッセージを書き込んでいました。
フィードバックとヘルプ
Microsoft Azure WebsitesのWebJobs (英語 / 日本語) 機能と、Microsoft Azure WebJobs SDKは、プレビューです。エクスペリエンスを改善するためのフィードバックを、いつでも歓迎します。
チュートリアルに直接関係しない質問がある場合は、Azureフォーラム (英語 / 日本語)、ASP.NETフォーラム、またはStackOverflow.comに投稿できます。#AzureWebJobs Twitterハッシュタグ、Azure-WebJobsSDK StackOverflowタグをお使いください。
関連情報
- .NET Web Development and Tools Blog > Announcing the 0.6.0-beta preview of Microsoft Azure WebJobs SDK (2014/09/12)





[…] (英語) (翻訳 – SATO NAOKI ブログ : Microsoft Azure WebJobs SDKの0.6.0-betaプレビューの発表) […]
[…] (英語) (翻訳 – SATO NAOKI ブログ: Microsoft Azure WebJobs SDK の 0.6.0-beta プレビューの発表)、0.5.0-beta、0.4.0-beta、0.3.0-beta […]