Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する

Azure portal を使用して、実行可能ファイルまたはスクリプトをアップロードするための WebJobs をデプロイします。 バックグラウンド タスクは、Azure App Service で実行できます。

Azure App Service の代わりに Visual Studio を使用して WebJobs を開発およびデプロイする場合は、Visual Studio を使用して WebJobs をデプロイするに関する記事を参照してください。

概要

Web ジョブは、Web アプリ、API アプリ、またはモバイル アプリと同じインスタンスでプログラムやスクリプトを実行できる Azure App Service の機能です。 WebJobs を使用するための追加のコストはありません。

Azure WebJobs SDK と WebJobs を使用して、多くのプログラミング タスクを単純化できます。 WebJobs は App Service on Linux ではまだサポートされていません。 詳細については、「 Azure Web ジョブ SDK とは」をご覧ください。

Azure Functions は、プログラムとスクリプトを実行する別の方法を提供します。 Web ジョブと Functions の比較については、「Flow、Logic Apps、Functions、WebJobs の比較」を参照してください。

Web ジョブの種類

次の表で、継続的 Web ジョブとトリガーされる Web ジョブの違いを説明します。

継続的 トリガー
Web ジョブが作成されるとすぐに開始します。 ジョブが終了しないようにするため、プログラムまたはスクリプトは、その動作を無限ループ内で実行します。 ジョブが終了した場合でも、再開することができます。 通常、WebJobs SDK と共に使用されます。 手動またはスケジュールに従ってトリガーされたときにのみ開始します。
Web アプリが実行されているすべてのインスタンスで実行されます。 必要に応じて、Web ジョブを 1 つのインスタンスに制限できます。 Azure が負荷分散用に選択した 1 つのインスタンス上で実行されます。
リモート デバッグをサポートします。 リモート デバッグをサポートしません。
コードは \site\wwwroot\app_data\Jobs\Continuous に配置されます。 コードは \site\wwwroot\app_data\Jobs\Triggered に配置されます。

Note

Web アプリは非アクティブな状態が 20 分続くとタイムアウトになり、実際の Web アプリに対する要求だけがタイマーをリセットできます。 Azure portal でアプリの構成を表示したり、高度なツールのサイト (https://<app_name>.scm.azurewebsites.net) に対して要求を行ったりしても、タイマーはリセットされません。 ジョブをホストしている Web アプリを継続的に実行させるか、またはスケジュールに従って実行させるか、あるいはイベント ドリブン トリガーを使用するように設定する場合は、Web アプリの Azure 構成ページで [常にオン] 設定を有効にします。 [常にオン] の設定は、これらの種類の WebJobs が確実に実行されるようにするのに役立ちます。 この機能は、Basic、Standard、および Premium の価格レベルでのみ利用できます。

スクリプトまたはプログラムでサポートされるファイルの種類

次のファイルの種類がサポートされます。

  • .cmd、.bat、.exe (Windows コマンドを使用)
  • .ps1 (PowerShell を使用)
  • .sh (Bash を使用)
  • .php (PHP を使用)
  • .py (Python を使用)
  • .js (Node.js を使用)
  • .jar (Java を使用)

継続的 Web ジョブを作成する

重要

アプリケーションでソース管理が構成されている場合は、ソース管理の統合の一環として Webjobs をデプロイする必要があります。 アプリケーションのソース管理を構成した後、WebJobs を Azure portal から追加することはできません。

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウで [WebJobs] を選択し、[追加] を選択します。

    Screenshot that shows how to add a WebJob in an App Service app in the portal.

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    Screenshot that shows how to configure a mult-instance continuous WebJob for an App Service app.

    設定 値の例 説明
    名前 myContinuousWebJob App Service アプリ内での一意の名前。 文字または数字で始まる必要があり、"-" と "_" 以外の特殊文字を使用することはできません。
    ファイルのアップロード ConsoleApp.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 継続的 Web ジョブの種類については、この記事の中で既に説明しています。
    スケール マルチインスタンス 継続的 Web ジョブでのみ使用できます。 プログラムまたはスクリプトがすべてのインスタンスで実行されるか、1 つのインスタンスだけで実行されるかどうかを決定します。 複数のインスタンスで実行するオプションは、Free または Shared 価格レベルには適用されません。
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. 継続的 Web ジョブを停止または再開するには、一覧でその Web ジョブを右クリックし、[停止] または [実行] ボタンを選択してから、選択内容を確認します。

    Screenshot that shows how to stop a continuous WebJob in the Azure portal.

手動でトリガーされる Web ジョブを作成する

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウで [WebJobs] を選択し、[追加] を選択します。

    Screenshot that shows how to add a WebJob in an App Service app in the portal (manually triggered WebJob).

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    Screenshot that shows how to configure a manually triggered WebJob for an App Service app.

    設定 値の例 説明
    名前 myTriggeredWebJob App Service アプリ内での一意の名前。 文字または数字で始まる必要があり、"-" と "_" 以外の特殊文字を使用することはできません。
    ファイルのアップロード ConsoleApp1.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 トリガー Web ジョブの種類については、この記事で前述のとおりです。
    トリガー マニュアル
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. 手動でトリガーされた Web ジョブを実行するには、一覧でその Web ジョブを右クリックし、[実行] ボタンを選択してから、選択内容を確認します。

    Screenshot that shows how to run a manually triggered WebJob in the Azure portal.

スケジュールされた Web ジョブを作成する

スケジュールされた Web ジョブもトリガーされます。 指定するスケジュールでトリガーが自動的に実行されるように、スケジュール設定できます。

  1. Azure ポータルで、App Service Web アプリ、API アプリ、またはモバイル アプリの App Service ページに移動します。

  2. 左側のウィンドウで [WebJobs] を選択し、[追加] を選択します。

    Screenshot that shows how to add a WebJob in an App Service app in the portal (scheduled WebJob).

  3. 表で指定されている [Web ジョブの追加] 設定を入力し、[Web ジョブの作成] を選択します。

    Screenshot that shows how to configure a scheduled WebJob in an App Service app.

    設定 値の例 説明
    名前 myScheduledWebJob App Service アプリ内での一意の名前。 文字または数字で始まる必要があり、"-" と "_" 以外の特殊文字を使用することはできません。
    ファイルのアップロード ConsoleApp.zip 実行可能ファイルまたはスクリプト ファイルと、プログラムまたはスクリプトを実行するために必要なサポート ファイルを含む .zip ファイル。 サポートされている実行可能ファイルまたはスクリプト ファイルの種類については、「サポートされるファイルの種類」セクションを参照してください。
    種類 トリガー Web ジョブの種類については、この記事の中で既に説明しています。
    トリガー スケジュール スケジュールを確実に動作させるために、Always On 機能を有効にします。 Always On 機能は、Basic、Standard、および Premium の価格レベルでのみ利用できます。
    CRON 式 0 0/20 * * * * CRON 式については、次のセクションで説明します。
  4. [Web ジョブ] ページに新しい Web ジョブが表示されます。 Web ジョブが追加されたというメッセージが表示されても、表示されない場合は、 [更新] を選択します。

  5. スケジュールされた Web ジョブは、CRON 式で定義されたスケジュールで実行されます。 任意のタイミングでこれを手動で実行するには、一覧でその Web ジョブを右クリックし、[実行] ボタンを選択してから、選択内容を確認します。

    Screenshot that shows how to run a manually scheduled WebJob in the Azure portal.

NCRONTAB 式

NCRONTAB 式は、ポータルで入力するか、settings.job ファイルを Web ジョブの .zip ファイルのルートに含めることができます。例を以下に示します。

{
    "schedule": "0 */15 * * * *"
}

詳細については、「Scheduling a triggered WebJob (トリガーされる Web ジョブのスケジュール設定)」を参照してください。

Note

CRON 式の実行に使用される既定のタイム ゾーンは、協定世界時 (UTC) です。 別のタイム ゾーンに基づいて CRON 式を実行するには、ご使用の関数アプリ用に WEBSITE_TIME_ZONE という名前のアプリ設定を作成します。 詳細については、「NCRONTAB タイムゾーン」を参照してください。

Web ジョブの管理

Azure portal で、サイトで実行されている個々の Web ジョブの実行状態を管理できます。 [設定]>[WebJobs] にアクセスし、[Web ジョブ] を選択するだけで、Web ジョブを開始および停止することができます。 また、Web ジョブを実行する Webhook のパスワードを表示および変更することもできます。

また、1 という値を持つ WEBJOBS_STOPPED という名前のアプリケーション設定を追加して、サイトで実行されているすべての Web ジョブを停止することもできます。 この方法を使用すると、ステージングおよび運用スロットの両方で競合する Web ジョブが実行されないようにすることができます。 同様に、1 の値を WEBJOBS_DISABLE_SCHEDULE 設定に使用して、サイトまたはステージング スロットでトリガーされた Web ジョブを無効にすることもできます。 スロットの場合は、設定自体がスワップされないように、 [デプロイ スロットの設定] オプションを必ず有効にしてください。

ジョブ履歴の表示

  1. 表示する Web ジョブで、[ログ] を選択します。

    Screenshot that shows how to access logs for a WebJob.

  2. [WebJob Details](Web ジョブの詳細) ページで、詳細を確認する実行時間を選択します。

    Screenshot that shows how to choose a WebJob run to see its detailed logs.

  3. [Web ジョブ実行の詳細] ページでは、[ダウンロード] を選択してログのテキスト ファイルを取得するか、ページの上部にある [WebJobs] 階層リンクを選択して別の Web ジョブのログを表示できます。

Web ジョブの状態

一般的な Web ジョブの状態の一覧を次に示します。

  • Initializing アプリは開始されたばかりで、Web ジョブでは初期化プロセスが実行されています。
  • Starting Web ジョブを開始しています。
  • Running Web ジョブの実行中です。
  • PendingRestart 継続的 Web ジョブは、何らかの理由で開始されてから 2 分未満で終了し、App Service では 60 秒待ってから Web ジョブを再起動します。 2 分後に継続的 Web ジョブが終了した場合、App Service では 60 秒間待機せず、Web ジョブを直ちに再起動します。
  • Stopped Web ジョブは (通常は Azure portal から) 停止され、現在は実行されておらず、継続的またはスケジュールされた Web ジョブであっても、手動で再度開始するまで実行されません。
  • Aborted これは、実行時間の長い Web ジョブがタイムアウト マーカーに達した場合など、多くの理由で発生する可能性があります。

次のステップ

Azure WebJobs SDK と Web ジョブを使用して、多くのプログラミング タスクを単純化できます。 詳細については、「 Azure Web ジョブ SDK とは」をご覧ください。