Azure WebJobs SDK の 1.1.0 RTM を発表

このポストは、12 月 7 日に投稿された Azure WebJobs SDK 1.1.0 RTM の翻訳です。

このたび、Azure WebJobs SDK の最新 RTM 版をリリースしました。多数の機能が追加されており、今回から SDK の新しい拡張モデルとしてカスタム トリガーやバインダーの作成が可能になり、ファイル イベントや定期スケジュールなどに基づいて関数をトリガーできるようになりました。また、関数を含む単一の WebJobs を Azure Queues、Blobs、Service Bus、Files、Timers、WebHooks – GitHub、Slack、Instagram、IFTTT などでトリガーすることもでき、WebJobs の開発や管理がシンプルになりました。また、アラート設定により、関数が正常に動作しなかった場合に通知を送信することも可能です。その他にも多くの新機能が追加され、皆様からのフィードバックに基づいてバグも修正されています。

今回のリリースに含まれる機能

今回のリリースでは、カスタム トリガーやバインダー作成のための新しい SDK 拡張モデルの関連機能が多数用意されているほか、既存の機能セットのコア強化が含まれています。リリースの主な内容は以下のとおりです。

カスタム トリガーやバインダー作成のための拡張モデル

初回のリリースでは Azure Queues、Azure Blobs、Service Bus のイベントに基づいた関数トリガーが中心でした。しかし、他にもファイル イベントやスケジュール、SQL Server のイベントなどに基づいた関数のトリガーも行いたいという声を多数いただき、今回の拡張モデルでは、新しいトリガーやバインダーを作成し、他のユーザーがアプリケーションで使用できるようにしました。

Redis.WebJob.Extensions (英語)Jason Haley 氏 (英語) による開発プロジェクトで、Redis のイベントに基づいて関数をトリガーする機能です。

新しい拡張モデルに基づく拡張機能のオープン ソース リポジトリ (英語) を開設しました。アーキテクチャの詳細はこちら (英語) をご覧ください。カスタム トリガーやバインダー作成の参考になるサンプルを用意しています。

新しいトリガー、バインダー、属性

今回のリリースでは、SDK で関数をトリガーする方法が新たにいくつか追加されました。以下はその一部になります。

  • TimerTrigger を使用したスケジュールに基づくトリガー

  • FileTrigger を使用したファイルのイベントに基づくトリガー

  • 複数のホスト間で同時に特定の関数の 1 つのインスタンスのみ実行する Singleton 属性

  • 指定の時間が経過したら関数をタイムアウトさせる Timeout 属性

  • 関数の終了時に電子メールを送信する SendGrid バインド

  • エラーのしきい値に基づいて関数をトリガーする ErrorTrigger (例: 直近 1 時間のエラー数が 10 を超えたらアラートを発行)

  • 汎用 WebHook イベントに基づいて関数をトリガーする WebHookTrigger (プレビュー版)

次のコード スニペットの Web ジョブの関数は、上記すべてのイベントでトリガーできます。単一の Web ジョブであらゆる関数をさまざまなイベントにてトリガー可能です。パラメーター バインド、ルート マッチングなど既存の SDK 機能もすべて利用できます。

  public class Functions
    {
        public static void ProcessTimer([TimerTrigger("*/15 * * * * *", RunOnStartup = true)]
        TimerInfo info, [Queue("queue")] out string message)
        {
            message = info.FormatNextOccurrences(1);
        }

        public static void ProcessQueueMessage([QueueTrigger("queue")] string message,
        TextWriter log)
        {
            log.WriteLine(message);
        }

        public static void ProcessFileAndUploadToBlob(
            [FileTrigger(@"import\{name}", "*.*", autoDelete: true)] Stream file,
            [Blob(@"processed/{name}", FileAccess.Write)] Stream output,
            string name,
            TextWriter log)
        {
            output = file;
            file.Close();
            log.WriteLine(string.Format("Processed input file '{0}'!", name));
        }

        [Singleton]
        public static void ProcessWebHookA([WebHookTrigger] string body, TextWriter log)
        {
            log.WriteLine(string.Format("WebHookA invoked! Body: {0}", body));
        }

        public static void ProcessGitHubWebHook([WebHookTrigger] string body, TextWriter log)
        {
            dynamic issueEvent = JObject.Parse(body);
            log.WriteLine(string.Format("GitHub WebHook invoked! ('{0}', '{1}')",
                issueEvent.issue.title, issueEvent.action));
        }

        public static void ErrorMonitor(
        [ErrorTrigger("00:01:00", 1)] TraceFilter filter, TextWriter log,
        [SendGrid(
            To = "admin@emailaddress.com",
            Subject = "Error!")]
         SendGridMessage message)
        {
            // log last 5 detailed errors to the Dashboard
            log.WriteLine(filter.GetDetailedMessage(5));
            message.Text = filter.GetDetailedMessage(1);
        }
    }

Core SDK の新機能

拡張モデルの導入やトリガーやバインダーのほかにも、多くの機能が Core SDK に追加されています。これらの多くはコミュニティの機能の要望欄に寄せられたもので、今回のリリースで皆様からの声を機能に反映することができました。

  • Queue 処理の詳細な制御が可能に:デキュー可能な Queue メッセージ数を指定する同時実行設定を詳細に制御できます (JobHostQueuesConfiguration.NewBatchThreshold)。独自の QueueProcessor をプラグインして Queue メッセージの処理方法をカスタマイズできます。

  • 拡張可能なトレースおよびログ: 独自のログ機能をプラグインできる拡張ポイントが追加されました。

  • エラー監視システム: ホストや関数でエラーが発生していないかを監視します。また、アラートを発行したり、通知を電子メールやテキストで送信したり、IFTTT など他のシステムにプラグインしたりすることができます。

  • 複数のストレージ アカウントに対応: Web ジョブの関数で複数のストレージ アカウントを使用できるようになりました。ストレージ アカウントから BLOB を読み取り別のストレージ アカウントにアーカイブ保存するといった処理が可能になります。

  • 関数のタイムアウトを指定可能に: ユーザーからのフィードバック ("継続的な Web ジョブ がフリーズして QueueTriggers が機能しなくなる (英語)") に基づいて、タイムアウト時間を超えたら関数の実行取消を宣言的に要求できる Timeout 属性を追加しました。これは JobHost レベルで設定できます。

  • 関数の動的な有効化/無効化: アプリの設定や環境名を指定した config スイッチで、既にトリガーされた関数を無効化できます。

  • BLOB 用の CloudBlobDirectory バインドを追加しました。

  • BLOB 用 IEnumerable バインダー: BLOB (IEnumerable、IEnumerable、CloudBlobContainer など) のコレクションにバインドすることが可能になりました。

  • WebJobs SDK が使用する Azure Storage SDK クライアントの制御/カスタマイズ: CloudQueueClient/CloudBlobClient/CloudTableClient の高度なオプションを指定または設定する JobHostConfiguration.StorageClientFactory を追加しました。

ServiceBus の機能拡張

拡張モデル導入の一環として、ServiceBus トリガーとバインダーを新しい拡張システムに移行しました。既存の ServiceBus を今回リリースしたバージョンの SDK に更新された場合は、ServiceBus トリガーやバインダーを次のように登録する必要があります。

Service Bus 接続文字列のオーバーライドは今後 ServiceBusConfiguration により提供されます。次のサンプル (英語) を参考にしてください。

 public class Program
{
   public static void Main()
   {
      JobHostConfiguration config = new JobHostConfiguration();
      config.UseServiceBus();
      JobHost host = new JobHost(config);
      host.RunAndBlock();
   }
}

拡張機能の内容:

  • メッセージ処理の詳細なカスタマイズが可能な ServiceBusConfiguration.MessagingProvider

  • MessagingProvider が ServiceBus MessagingFactory および NamespaceManager のカスタマイズをサポート

  • Queue/トピック単位でプロセッサを指定する MessageProcessor ストラテジー パターン

  • メッセージ処理の同時実行を既定でサポート (これまでは同時実行は不可)

  • OnMessageOptions のカスタマイズが容易な ServiceBusConfiguration.MessageOptions

  • ServiceBusTriggerAttribute/ServiceBusAttribute で AccessRights の指定が可能に (Manage 権限がない場合のシナリオ向け)

WebHook サポート (プレビュー)

HTTP コールバックの WebHook (英語) イベント発生時に実行される HTTP POST。HTTP POST を通じたシンプルなイベント通知。Microsoft.Azure.WebJobs.Extensions.WebHooks (英語) NuGet パッケージを使用して WebHook コールバックに基づいた関数のトリガーのサポートを追加できます。たとえば、IFTTT (英語) で関数をトリガーできます。

また、ASP.NET WebHooks (英語) を使用して GitHub (英語)Slack (英語)Salesforce (英語)Instagram (英語) など各種 WebHook プロバイダーのサポートを追加できます。詳しくは、WebJobs の WebHooks の詳細なウォークスルー (英語) を参照してください。

ダッシュボードでの監視

さまざまなイベントにトリガーされる関数をすべてダッシュボードで監視できます。リアルタイム監視、リアルタイム I/O、関数の再生、関数の中止など、既存ダッシュボードの機能も継続して使用できます。次の画像は、特定の Web ジョブに関するダッシュボードの [Functions] ビューです。

最新リリースをダウンロードする

WebJobs SDK は NuGet ギャラリーからダウンロードできます。パッケージは NuGet ギャラリーから NuGet Package Manager Console を使用してインストールできます。次を参照してください。

Microsoft Azure Service Bus を使用する場合、次のパッケージをインストールします。

これは、新たな拡張モデルに基づいたトリガー (Timer、File など) やバインダーが追加された最新のパッケージです。

SendGrid (英語) サービスから電子メールを送信できる新しいパッケージはこちらです。関数の失敗などさまざまなエラーを電子メールで通知することができます。

WebHook イベントに基づいて関数をトリガーできる新しいパッケージは、現在プレビュー版です。

オープン ソース

SDK のソース コード、拡張システム、および関連するリポジトリのソース コードはこちらをご覧ください。

コードや SDK のフィードバックに関しては、イシューを発行し、修正が必要な問題に対してプル リクエストを送信してください。

サンプル

  • Azure Blobs、Table、Queue、Timer、Files、WebHooks、Service Bus でのトリガーやバインダー使用方法のサンプルを用意しています。

  • PhluffyShuffy では、画像を処理する Web サイトにユーザーが画像をアップロードすると、Blob Storage から画像を処理する関数がトリガーされます。

  • PhluffyLogs では、アプリが生成したログ ファイルを WebJobs が解析してアーカイブします。

関連資料

フィードバックとサポート

質問がありましたら、Azure フォーラムASP.NET フォーラム (英語) または StackOverflow.com (英語) (タグ名 #Azure-WebJobsSDK) までお寄せください。

まとめ

今回リリースされた SDK により、トリガーとバインダーの新しい世界が広がり、拡張機能の開発者が File イベント、Timer/Cron スケジュール イベント、SQL イベント、Redis pub/sub イベントなどのあらゆるトリガーを作成できるようになりました (ドキュメントやサンプルのリンクをご覧ください)。Azure イベントに限らずさまざまなソースからのイベントを監視できるので、トリガーを使用したアプリの開発や管理がずっと容易になります。トリガーやバインダー作成に関するさまざまなアイデアや、拡張モデルに関するご意見をぜひお寄せください。

よろしくお願いいたします。

Azure WebJobs チーム
最新情報は Twitter (#AzureWebJobs) をフォローしてください。