Visual Studio を使用して Web ジョブの開発とデプロイを行う

この記事では、Visual Studio を使用して、コンソール アプリ プロジェクトを Azure Web ジョブとして Azure App Service の Web アプリにデプロイする方法について説明します。 Azure portal を使用して Web ジョブをデプロイする方法については、「Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する」を参照してください。

Web ジョブを開発するときには、.NET Core アプリまたは .NET Framework アプリのどちらとして実行するかを選択できます。 バージョン 3.x の Azure WebJobs SDK では .NET Core アプリと .NET Framework アプリのどちらかとして実行される WebJobs を開発できますが、バージョン 2.x では .NET Framework のみがサポートされます。 Web ジョブ プロジェクトをデプロイする方法は、.NET Core プロジェクトの場合と .NET Framework プロジェクトの場合では異なります。

1 つの Web アプリ内で各 Web ジョブが一意の名前を持つ場合は、複数の Web ジョブを 1 つの Web アプリに発行できます。

.NET Core コンソール アプリとしての WebJobs

バージョン 3.x の Azure WebJobs SDK を使用する場合、.NET Core コンソール アプリとしての Webジョブの作成と発行が可能です。 .NET Core コンソール アプリを作成し、Web ジョブとして Azure に発行する詳細な手順については、「イベント ドリブンのバックグラウンド処理で Azure WebJobs SDK の使用を開始する」を参照してください。

Note

.NET Core Web アプリや .NET Core Web ジョブを Web プロジェクトにリンクすることはできません。 Web アプリと共に Web ジョブをデプロイする必要がある場合は、.NET Framework コンソール アプリとして Web ジョブを作成します

Azure App Service にデプロイする

Visual Studio から Azure App Service への .NET Core Web ジョブの発行では、ASP.NET Core アプリの発行と同じツールを使用します。

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。

  2. [発行] ダイアログ ボックスの [対象][Azure] を選択してから、 [次へ] を選択します。

  3. [特定のターゲット][Azure WebJobs] を選択してから、 [次へ] を選択します。

  4. [App Service instances] (App Service インスタンス) の上で、[新しい Azure WebJob を作成する] のプラス (+) ボタンを選択します。

  5. [App Service (Windows)] ダイアログ ボックスでは、次の表のホスティング設定を使用します。

    設定 提案された値 Description
    名前 グローバルに一意の名前 新しい関数アプリを一意に識別する名前。
    サブスクリプション サブスクリプションの選択 使用する Azure サブスクリプション。
    リソース グループ myResourceGroup 関数アプリを作成するリソース グループの名前。 新しいリソース グループを作成する場合は、 [新規] を選択します。
    ホスティング プラン App Service プラン App Service プランは、アプリのホストとなる Web サーバー ファームの場所、サイズ、機能を規定します。 1 つの App Service プランを共有するように Web アプリを構成することで、複数のアプリをホストするときのコストを抑えることができます。 App Service プランでは、リージョン、インスタンス サイズ、スケール数、および SKU (Free、Shared、Basic、Standard、または Premium) を定義します。 [新規] を選択して、新しい App Service プランを作成します。 Free レベルと Basic レベルでは、サイトを継続的に実行する [Always On] オプションはサポートされていません。

    Create App Service dialog box

  6. [作成] を選択して、これらの設定で Azure に Web ジョブと関連リソースを作成し、プロジェクト コードをデプロイします。

  7. [完了] を選択して [発行] ページに戻ります。

.NET Framework コンソール アプリとしての WebJobs

Visual Studio を使用して、Web ジョブ対応の .NET Framework コンソール アプリ プロジェクトをデプロイする場合、Web アプリの適切なフォルダーにランタイム ファイルがコピーされます (継続的な Web ジョブの場合は App_Data/jobs/continuous、スケジュールされた Web ジョブやオンデマンド Web ジョブの場合は App_Data/jobs/triggered)。

Web ジョブ対応のプロジェクトには、Visual Studio によって以下の項目が追加されます。

Diagram showing what's added to a console app to enable deployment as a WebJob

これらの項目を既存のコンソール アプリ プロジェクトに追加することも、テンプレートを使用して新しい Web ジョブ対応のコンソール アプリ プロジェクトを作成することもできます。

プロジェクトは、それ自体を Web ジョブとしてデプロイするか、Web プロジェクトをデプロイするときには常に自動的にデプロイされるように Web プロジェクトにリンクします。 プロジェクトをリンクする場合、Visual Studio で、Web プロジェクト内の webjobs-list.json ファイルに Web ジョブ対応のプロジェクトの名前が含められます。

Diagram showing WebJob project linking to web project

前提条件

Azure 開発ワークロードと共に Visual Studio 2022 をインストールします。

既存のコンソール アプリ プロジェクトに対する Web ジョブのデプロイを有効にする

2 つのオプションがあります。

  • Web プロジェクトを使用した自動デプロイメントを有効にする

    Web プロジェクトをデプロイしたときに自動的に Web ジョブとしてデプロイされるように、既存のコンソール アプリ プロジェクトを構成します。 Web ジョブを、関連する Web アプリケーションが実行する Web アプリケーションと同じアプリケーションで実行する場合に、このオプションを使用します。

  • Web プロジェクトなしでデプロイメントを有効にする

    既存のコンソール アプリ プロジェクトを、Web プロジェクトにリンクせず、それ自体が Web ジョブとしてデプロイされるように構成します。 Web アプリケーションで Web アプリケーションを実行せずに、Web ジョブ自身によって Web アプリケーション内で実行されようにする場合に、このオプションを使用します。 Web アプリケーションのリソースから独立して Web ジョブのリソースをスケーリングする場合は、そうすることをお勧めします。

  1. ソリューション エクスプローラーで Web プロジェクトを右クリックし、 [追加]>[既存のプロジェクトを Azure Web ジョブとして] を選択します。

    Existing Project as Azure WebJob

    [Azure Web ジョブの追加] ダイアログ ボックスが表示されます。

  2. [プロジェクト名] ドロップダウン リストでコンソール アプリ プロジェクトを選択し、Web ジョブとして追加します。

    Selecting project in Add Azure WebJob dialog box

  3. [Azure Web ジョブの追加] ダイアログ ボックスでの指定を完了し、 [OK] を選択します。

  1. ソリューション エクスプローラーでコンソール アプリ プロジェクトを右クリックし、 [Azure WebJob として発行] を選択します。

    Publish as Azure WebJob

    [Azure Web ジョブの追加] ダイアログ ボックスが表示され、 [プロジェクト名] ボックスに選択されたプロジェクトが示されます。

  2. [Azure Web ジョブの追加] ダイアログ ボックスでの指定を完了し、 [OK] を選択します。

    Web の発行 ウィザードが表示されます。 すぐに発行しない場合は、ウィザードを閉じます。 プロジェクトをデプロイするときのために、入力した設定値は保存されます。

新しい Web ジョブ対応のプロジェクトを作成する

新しい Web ジョブ対応のプロジェクトを作成するには、前のセクションで説明したように、コンソール アプリ プロジェクト テンプレートを使用して、Web ジョブのデプロイを有効にします。 または、次のように Web ジョブの新しいプロジェクト テンプレートを使用できます。

Note

WebJobs の new-project テンプレートは、NuGet パッケージを自動的にインストールし、 WebJobs SDK 用にコードを Program.csに含めます。 WebJobs SDK を使用しない場合は、Program.cs 内の host.RunAndBlock ステートメントを削除または変更します。

  1. [File]>[New]>[Project] の順に選択します。 [新しいプロジェクトの作成] ダイアログ ボックスで、C# 用の Azure Web ジョブ (.NET Framework) を検索して選択します。

  2. 以前の指示に従って、コンソール アプリ プロジェクトを独立した Web ジョブ プロジェクトにします

  1. ソリューション エクスプローラーで Web プロジェクトを右クリックし、 [追加]>[新しい Azure Web ジョブ プロジェクト] を選択します。

    New Azure WebJob Project menu entry

    [Azure Web ジョブの追加] ダイアログ ボックスが表示されます。

  2. [Azure Web ジョブの追加] ダイアログ ボックスでの指定を完了し、 [OK] を選択します。

webjob-publish-settings.json ファイル

Web ジョブのデプロイ用にコンソール アプリを構成すると、Visual Studio によって Microsoft.Web.WebJobs.Publish NuGet パッケージがインストールされ、Web ジョブ プロジェクトの Properties フォルダーにある webjob-publish-settings.json ファイルにスケジュール情報が格納されます。 次にこのファイルの例を示します。

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "WebJob1",
  "startTime": "null",
  "endTime": "null",
  "jobRecurrenceFrequency": "null",
  "interval": null,
  "runMode": "Continuous"
}

このファイルは直接編集でき、Visual Studio で IntelliSense を使用できます。 ファイル スキーマは https://schemastore.org に格納され、そこで表示できます。

webjobs-list.json ファイル

Web ジョブ対応のプロジェクトを Web プロジェクトにリンクすると、Visual Studio は Web ジョブ プロジェクトの名前を Web プロジェクトの Properties フォルダー内の webjobs-list.json ファイルに格納します。 次の例に示すように、一覧には複数の WebJobs プロジェクトが含まれる場合があります。

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
    },
    {
      "filePath": "../WebJob1/WebJob1.csproj"
    }
  ]
}

このファイルは、Visual Studio で IntelliSense を使用して、直接編集することができます。 ファイル スキーマは https://schemastore.org に格納されています。

Web ジョブ プロジェクトをデプロイする

Web プロジェクトにリンクした Web ジョブ プロジェクトは、その Web プロジェクトと共に自動的にデプロイされます。 Web プロジェクトのデプロイについては、左側のナビゲーションの [ハウツー ガイド]>[アプリのデプロイ] を参照してください。

Web ジョブ プロジェクトをそれ自体でデプロイするには、ソリューション エクスプローラーでプロジェクトを右クリックし、 [Azure Web ジョブとして発行] をクリックします。

Publish as Azure WebJob

独立した Web ジョブの場合は、Web プロジェクトで使用されたウィザードと同じ Web の発行 ウィザードが表示されますが、変更可能な設定値の数は少なくなります。

[Azure Web ジョブの追加] ダイアログ ボックス

[Azure Web ジョブの追加] ダイアログでは、Web ジョブの Web ジョブ名と実行モード設定を入力できます。

Add Azure WebJob dialog box

このダイアログ ボックスのフィールドの一部は、Azure portal の [Web ジョブの追加] ダイアログ ボックスのフィールドに対応しています。 詳細については、「Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する」を参照してください。

Web ジョブのデプロイ情報:

  • コマンド ライン デプロイメントについては、「 Enabling Command-line or Continuous Delivery of Azure WebJobs (Azure Web ジョブのコマンド ラインによる配信または継続的配信を有効にする)」を参照してください。

  • Web ジョブをデプロイし、その後、Web ジョブの種類を変更して再デプロイすることに決めた場合は、webjobs-publish-settings.json ファイルを削除します。 そうすることで、Visual Studio に発行オプションが再表示されるので、Web ジョブの種類を変更できます。

  • Web ジョブをデプロイし、後から実行モードを継続的から継続的以外、またはその逆に変更した場合、Visual Studio は再デプロイ時に Azure 内に新しい Web ジョブを作成します。 その他のスケジュール設定を変更し、実行モードを同じままにするか、[スケジュール済み] と [オンデマンド] の間で切り替えた場合、Visual Studio では、新しいジョブは作成されずに既存のジョブが更新されます。

Web ジョブの種類

Web ジョブの種類は、トリガーまたは継続的です。

  • トリガー (既定値):トリガー Web ジョブは、バインディング イベントまたはスケジュールに基づいて開始されるか、手動でトリガーされたときに開始されます (オンデマンド)。 Web アプリが実行されている 1 つのインスタンスで実行されます。

  • 継続的:継続的 Web ジョブは、作成されるとすぐに開始されます。 既定では、すべての Web アプリのスケーリングされたインスタンスで実行されますが、settings.job を使用して 1 つのインスタンスとして実行するように構成できます。

Note

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

トリガーされた Web ジョブのスケジュール設定

コンソール アプリを Azure に発行すると、Visual Studio によって Web ジョブの種類が既定で [トリガー] に設定され、プロジェクトに新しい settings.job ファイルが追加されます。 Web ジョブの種類がトリガーの場合は、このファイルを使用して Web ジョブの実行スケジュールを設定できます。

settings.job ファイルを使用して、Web ジョブの実行スケジュールを設定します。 次の例では、午前 9 時から午後 5 時まで 1 時間ごとに実行されます。

{
    "schedule": "0 0 9-17 * * *"
}

このファイルは、Web ジョブのスクリプトと一緒に、wwwroot\app_data\jobs\triggered\{job name}wwwroot\app_data\jobs\continuous\{job name} などの Web ジョブ フォルダーのルートに置かれます。 Web ジョブを Visual Studio からデプロイする場合は、Visual Studio で、settings.job ファイルのプロパティを [新しい場合はコピーする] に設定します。

Azure portal から Web ジョブを作成する場合は、自動的に settings.job ファイルが作成されます。

CRON 式

WebJobs では、Azure Functions でのタイマー トリガーと同じ CRON 式がスケジュール設定で使用されます。 CRON サポートの詳細については、「Azure Functions のタイマー トリガー」を参照してください。

Note

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

settings.job 参照

WebJobs では、次の設定がサポートされています。

設定 Type 説明
is_in_place All 最初に一時フォルダーにコピーすることなく、そのままの場所で Web ジョブを実行できます。 詳細については、「Web ジョブの作業ディレクトリ」を参照してください。
is_singleton 継続的 スケールアウトされるときは、単一インスタンス上でのみ Web ジョブが実行されます。詳細については、「継続的ジョブをシングルトンとして設定する」を参照してください。
schedule トリガー CRON ベースのスケジュールに従って、Web ジョブを実行します。 詳細については、「NCRONTAB 式」を参照してください。
stopping_wait_time All シャットダウン動作の制御を許可します。 詳細については、グレースフル シャットダウンに関する記事を参照してください。

継続的な実行

Azure で Always On を有効にする場合は、Visual Studio を使用して、継続的に実行するように Web ジョブを変更できます。

  1. Azure にプロジェクトを発行していない場合は、発行します。

  2. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。

  3. [設定] セクションで、[すべての設定を表示] を選択します。

  4. [プロファイル設定] ダイアログ ボックスの [Web ジョブの種類][継続的] を選択してから、 [保存] を選択します。

    Publish Settings dialog box for a WebJob

  5. [発行] タブで [発行] を選択し、設定が更新された Web ジョブを再発行します。

次のステップ