この記事では、Visual Studioを使用して、コンソール アプリ プロジェクトを Azure App ServiceAzure WebJob として Web アプリにデプロイする方法について説明します。 Azure ポータルを使用して Web ジョブをデプロイする方法については、「Run background tasks with WebJobs in Azure App Service」を参照してください。
.NET Core アプリまたは .NET Framework アプリとして実行される Web ジョブを開発できます。 Azure WebJobs SDK のバージョン 3.x では、.NET Core アプリまたは .NET Framework アプリとして実行される Web ジョブを開発できますが、バージョン 2.x では .NET Framework のみがサポートされます。 WebJobs プロジェクトをデプロイする方法は、.NET Core プロジェクトの場合と、.NET Framework プロジェクトの場合とは異なります。
Web アプリ内の各 Web ジョブに一意の名前が付いている場合は、複数の Web ジョブを 1 つの Web アプリに発行できます。
.NET Core コンソール アプリとしての Web ジョブ
Azure WebJobs SDK のバージョン 3.x を使用すると、Web ジョブを作成し、コア コンソール アプリとして.NET発行できます。 .NET Core コンソール アプリを作成して Web ジョブとしてAzureに発行する手順については、「Get started with the Azure WebJobs SDK for event-driven background processingを参照してください。
注
.NET Core Web Appsや .NET Core WebJobs を Web プロジェクトにリンクすることはできません。 Web アプリを使用して Web ジョブをデプロイする必要がある場合は、.NET Framework コンソール アプリとして Web ジョブを作成します。
Azure App Serviceにデプロイする
Visual StudioからAzure App Serviceに .NET Core WebJob を発行するには、ASP.NET Core アプリの発行と同じツールを使用します。
Solution Explorer でプロジェクトを右クリックし、Publish を選択します。
Publish ダイアログ ボックスで、Target の Azure を選択し、Next を選択します。Specific target の を選択し、Azure WebJobs Next を選択します。App Service インスタンスの上でプラス (+) ボタンを選択して、新しい Azure WebJob を作成します。
App Service (Windows) ダイアログ ボックスで、次の表のホスティング設定を使用します。
設定 推奨値 説明 名前 グローバルに一意の名前 新しい関数アプリを一意に識別する名前。 サブスクリプション サブスクリプションを選択する 使用するAzure サブスクリプション。 リソース グループ マイリソースグループ 関数アプリを作成するリソース グループの名前。 [ 新規 ] を選択して新しいリソース グループを作成します。 ホスティング プラン App Service プラン App Service プランは、アプリのホストとなる Web サーバー ファームの場所、サイズ、機能を規定します。 1 つの App Service プランを共有するように Web アプリを構成することで、複数のアプリをホストするときのコストを抑えることができます。 App Service プランでは、リージョン、インスタンス サイズ、スケール数、および SKU (Free、Shared、Basic、Standard、または Premium) を定義します。 [新規] を選択して、新しい App Service プランを作成します。 Free レベルと Basic レベルでは、サイトを継続的に実行する [Always On] オプションはサポートされていません。
Create を選択して、これらの設定をAzureに Web ジョブと関連リソースを作成し、プロジェクト コードを配置します。
[完了] を選択して [発行] ページに戻ります。
.NET Framework コンソール アプリとしての Web ジョブ
Visual Studioを使用して WebJobs 対応.NET Framework コンソール アプリ プロジェクトをデプロイする場合、ランタイム ファイルは Web アプリ内の適切なフォルダー (App_Data/jobs/continuous (継続的 Web ジョブの場合) にコピーされ、スケジュールされた Web ジョブまたはオンデマンド Web ジョブの場合は App_Data/jobs/triggered)。
Visual Studioは、WebJobs 対応プロジェクトに次の項目を追加します。
- Microsoft。Web.WebJobs.Publish NuGet パッケージ。
- 展開とスケジューラの設定を含む webjob-publish-settings.json ファイル。
これらの項目を既存のコンソール アプリ プロジェクトに追加することも、テンプレートを使用して新しい WebJobs 対応コンソール アプリ プロジェクトを作成することもできます。
プロジェクトを単独で Web ジョブとして配置するか、Web プロジェクトにリンクして、Web プロジェクトを配置するたびに自動的に配置されるようにします。 プロジェクトをリンクするには、Visual Studio Web ジョブが有効なプロジェクトの名前を Web プロジェクトの webjobs-list.json ファイルに含めます。
[前提条件]
Azure開発ワークロードと共にVisual Studio 2022 をインストールします。
既存のコンソール アプリ プロジェクトの WebJobs デプロイを有効にする
次の 2 つのオプションがあります。
-
Web プロジェクトをデプロイするときに Web ジョブとして自動的にデプロイされるように、既存のコンソール アプリ プロジェクトを構成します。 このオプションは、関連する Web アプリケーションを実行するのと同じ Web アプリで Web ジョブを実行する場合に使用します。
-
Web プロジェクトへのリンクを使用せずに、既存のコンソール アプリ プロジェクトを Web ジョブとして単独でデプロイするように構成します。 このオプションは、Web アプリ内で Web アプリケーションが実行されていない状態で、Web アプリ内で単独で Web ジョブを実行する場合に使用します。 Web アプリケーション リソースとは別に Web ジョブ リソースをスケーリングする場合に使用できます。
Web プロジェクトで Web ジョブの自動デプロイを有効にする
Solution Explorer で Webプロジェクトを右クリックし、追加>して既存のプロジェクトを Azure WebJob として追加を選択します。
Azure WebJob 追加 ダイアログ ボックスが表示されます。
Project name ドロップダウン リストで、Web ジョブとして追加するコンソール アプリのprojectを選択します。
Azure Web ジョブの追加ダイアログ ボックスに入力し、OK を選択します。
Web プロジェクトを使用せずに Web ジョブのデプロイを有効にする
Solution Explorer でコンソール アプリ プロジェクトを右クリックし、 WebJob Azure として発行を選択します。
[Azure Web ジョブの追加] ダイアログ ボックスが表示され、 [プロジェクト名] ボックスに選択されたプロジェクトが示されます。
Azure Web ジョブの追加ダイアログ ボックスに入力し、OK を選択します。
Web パブリッシュウィザードが表示されます。 すぐに発行しない場合は、ウィザードを閉じます。 入力した設定は、 プロジェクトを配置する場合に保存されます。
新しい WebJobs 対応プロジェクトを作成する
新しい WebJobs 対応プロジェクトを作成するには、コンソール アプリ プロジェクト テンプレートを使用し、 前のセクションで説明したように WebJobs のデプロイを有効にします。 別の方法として、WebJobs new-project テンプレートを使用できます。
独立した Web ジョブを作成するために、WebJobs の新規プロジェクト テンプレートを使用する
プロジェクトを作成し、Web プロジェクトへのリンクなしで、単独で Web ジョブとしてデプロイするように構成します。 このオプションは、Web アプリ内で Web アプリケーションが実行されていない状態で、Web アプリ内で単独で Web ジョブを実行する場合に使用します。 Web アプリケーション リソースとは別に Web ジョブ リソースをスケーリングする場合に使用できます。
Web プロジェクトにリンクされた Web ジョブには、WebJobs の「new-project」テンプレートを使用する
Web プロジェクトを同じソリューションに配置するときに、Web ジョブとして自動的に配置するように構成されたプロジェクトを作成します。 このオプションは、関連する Web アプリケーションを実行するのと同じ Web アプリで Web ジョブを実行する場合に使用します。
注
WebJobs の新しいプロジェクト テンプレートは、NuGet パッケージを自動的にインストールし、WebJobs SDK のProgram.csにコードを含めます。 WebJobs SDK を使用しない場合は、Program.csの host.RunAndBlock ステートメントを削除または変更します。
独立した Web ジョブに WebJobs new-project テンプレートを使用する
File>New>Project を選択します。 [新しいプロジェクトの作成] ダイアログ ボックスで、C# Azure WebJob (.NET Framework) を検索して選択します。
前の手順に従って、 コンソール アプリ プロジェクトを独立した Web ジョブ プロジェクトにします。
Web プロジェクトにリンクされた Web ジョブ用に Web ジョブの新しいプロジェクト テンプレートを使用する
Solution Explorer で Web projectを右クリックし、 Add>New Azure WebJob Project を選択します。
Azure WebJob 追加 ダイアログ ボックスが表示されます。
Azure Web ジョブの追加ダイアログ ボックスに入力し、OK を選択します。
webjob-publish-settings.json ファイル
Web ジョブのデプロイ用にコンソール アプリを構成すると、Visual Studioは
{
"$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 ファイル
WebJobs 対応プロジェクトを Web プロジェクトにリンクすると、Visual Studioは Web ジョブ プロジェクトの名前を web プロジェクトの
{
"$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
"WebJobs": [
{
"filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
},
{
"filePath": "../WebJob1/WebJob1.csproj"
}
]
}
IntelliSense を使用して、Visual Studioでこのファイルを直接編集できます。 ファイル スキーマは、 https://schemastore.orgに格納されます。
WebJobs プロジェクトをデプロイする
Web プロジェクトにリンクする Web ジョブ プロジェクトは、Web プロジェクトと共に自動的に配置されます。 Web プロジェクトのデプロイの詳細については、「ハウツー ガイド>左側のナビゲーションでアプリをデプロイする」を参照してください。
WebJobs プロジェクトを単独で配置するには、
独立した Web ジョブの場合、Web プロジェクトに使用されるのと同じ Web 発行 ウィザードが表示されますが、変更できる設定は少なくなります。
[Azure Web ジョブの追加] ダイアログ ボックス
[Web ジョブAzure追加] ダイアログ ボックスでは、Web ジョブの名前と実行モードの設定を入力できます。
このダイアログ ボックスの一部のフィールドは、Azure ポータルの Add WebJob ダイアログ ボックスのフィールドに対応しています。 詳細については、「
Web ジョブのデプロイ情報:
コマンド ラインデプロイの詳細については、「Azure Web ジョブのコマンド ラインの有効化または継続的デリバリーを参照してください。
Web ジョブをデプロイした後、Web ジョブの種類を変更して再デプロイする場合は、 webjobs-publish-settings.json ファイルを削除します。 これにより、Visual Studioが発行オプションを再表示するため、Web ジョブの種類を変更できます。
Web ジョブをデプロイした後、continuous と triggered の間で実行モードを変更Visual Studio、再デプロイ時にAzureに新しい Web ジョブを作成します。 他のスケジュール設定を変更しても、実行モードを同じままにするか、スケジュール設定とオンデマンドジョブを切り替えた場合、Visual Studioは新しいジョブを作成するのではなく、既存のジョブを更新します。
Web ジョブの種類
Webジョブの種類は、トリガー型または継続型のいずれかです。
トリガー (既定): トリガーされた Web ジョブは、バインド イベント、 スケジュール、または手動で (オンデマンドで) トリガーされたときに開始されます。 Web アプリが実行されている 1 つのインスタンスで実行されます。
継続的: Web ジョブが作成されるとすぐに 、継続的 な Web ジョブが開始されます。 既定では、すべての Web アプリのスケーリングされたインスタンスで実行されますが、 settings.job を使用して 1 つのインスタンスとして実行するように構成できます。
注
Web アプリは非アクティブな状態が 20 分続くとタイムアウトになり、実際の Web アプリに対する要求だけがタイマーをリセットできます。 Azure ポータルでアプリの構成を表示したり、高度なツール サイトに要求を行ったりしても、タイマーはリセットされません。 ジョブをホストする Web アプリを継続的に実行するように設定する場合、スケジュールに従って実行する場合、またはイベント ドリブン トリガーを使用する場合は、Web アプリの Azure
トリガーされた Web ジョブのスケジュール設定
コンソール アプリをAzureに発行すると、Visual Studioは既定で Web ジョブの種類を Triggered に設定し、新しい 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}など) を含む WebJobs フォルダーのルートにあります。 Visual Studioから Web ジョブをデプロイする場合は、Visual Studioの settings.job ファイル のプロパティを Copy (新しい場合) としてマーク。
Azure ポータルから Web ジョブを作成場合は、settings.job ファイルが自動的に作成されます。
CRON 式
WebJobs では、Azure Functionsのタイマー トリガーと同じ CRON 式をスケジュールに使用します。 CRON のサポートの詳細については、Azure Functions の Timer トリガー を参照してください。
注
CRON 式の実行に使用される既定のタイム ゾーンは、協定世界時 (UTC) です。 別のタイム ゾーンに基づいて CRON 式を実行するには、ご使用の関数アプリ用に WEBSITE_TIME_ZONE という名前のアプリ設定を作成します。 詳細については、「NCRONTAB タイムゾーン」を参照してください。
settings.job 参照
WebJobs では、 settings.job ファイルで次の設定がサポートされています。
| 設定 | タイプ | 説明 |
|---|---|---|
is_in_place |
全て | Web ジョブを最初に一時フォルダーにコピーせずに、所定の場所で実行できるようにします。 詳細については、 WebJob 作業ディレクトリを参照してください。 |
is_singleton |
継続的 | スケールアウトされた場合にのみ、1 つのインスタンスで Web ジョブを実行します。詳細については、「 連続ジョブをシングルトンとして設定する」を参照してください。 |
schedule |
トリガーされた | CRON ベースのスケジュールで Web ジョブを実行します。 詳細については、 NCRONTAB 式を参照してください。 |
stopping_wait_time |
全て | シャットダウン動作の制御を許可します。 詳細については、グレースフル シャットダウンに関する記事を参照してください。 |
継続的な実行
Azureで Always on を有効にした場合は、Visual Studioを使用して Web ジョブを継続的に実行するように変更できます。
プロジェクトがまだ発行されていない場合は、プロジェクトをAzureに発行します。
Solution Explorer でプロジェクトを右クリックし、Publish を選択します。
[ 設定] セクションで、[ すべての設定を表示] を選択します。
[プロファイル設定] ダイアログ ボックスで、[Web ジョブの種類] で [連続] を選択し、[保存] を選択します。
[ 発行 ] タブで [ 発行 ] を選択し、更新された設定で Web ジョブを再発行します。