Microsoft Azure WebJobs SDKの0.6.0-betaプレビューの発表

Posted: 2014/09/18 カテゴリー: Uncategorized
タグ:, , , ,

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」(ホストを中止する) ボタンがあります。

image

入力関数が問題なく完了すると、ダッシュボードは次のような成功メッセージを表示します。

image

この例では、入力関数は、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サイトです。

ドキュメント

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タグをお使いください。

関連情報

コメント
  1. […] (英語) (翻訳 – SATO NAOKI ブログ : Microsoft Azure WebJobs SDKの0.6.0-betaプレビューの発表) […]

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

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中