この記事では、Visual Studio を使用してコンソール アプリ プロジェクトを Azure App Service の Web アプリに Azure WebJob としてデプロイする方法について説明します。 Azure portal を使用して Web ジョブをデプロイする方法については、「Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する」を参照してください。
.NET Core アプリまたは .NETFramework アプリとして実行される Web ジョブの開発を選択できます。 Azure WebJobs SDK のバージョン 3.x では、.NET Core アプリまたは .NET Framework アプリとして実行される Web ジョブを開発できますが、バージョン 2.x では .NET Framework のみがサポートされています。 Web ジョブ プロジェクトをデプロイする方法は、.NET Core プロジェクトの場合と .NET Framework プロジェクトの場合とは異なります。
Web アプリ内の各 Web ジョブの名前が一意である場合は、複数の Web ジョブを 1 つの Web アプリに発行できます。
.NET Core コンソール アプリとしての Web ジョブ
バージョン 3.x の Azure WebJobs SDK を使用すると、Web ジョブを作成し、.NET Core コンソール アプリとして発行できます。 .NET Core コンソール アプリを作成し、Web ジョブとして Azure に発行する手順については、 イベント ドリブンのバックグラウンド処理に関する Azure WebJobs SDK の概要に関するページを参照してください。
注
.NET Core Web Apps や .NET Core WebJobs を Web プロジェクトにリンクすることはできません。 Web アプリを使用して Web ジョブをデプロイする必要がある場合は、 .NET Framework コンソール アプリとして WebJobs を作成します。
Azure App Service へのデプロイ
Visual Studio から .NET Core WebJob を Azure App Service に発行するには、ASP.NET Core アプリを発行するのと同じツールを使用します。
ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。
[発行] ダイアログ ボックスの [対象] で [Azure] を選択してから、 [次へ] を選択します。
[特定のターゲット] で [Azure WebJobs] を選択してから、 [次へ] を選択します。
[App Service instances] (App Service インスタンス) の上で、+ のプラス () ボタンを選択します。
[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] オプションはサポートされていません。 [作成] を選択して、これらの設定で Azure に Web ジョブと関連リソースを作成し、プロジェクト コードをデプロイします。
[完了] を選択して [発行] ページに戻ります。
.NET Framework コンソール アプリとしての Web ジョブ
Visual Studio を使用して WebJobs 対応の .NET Framework コンソール アプリ プロジェクトをデプロイすると、ランタイム ファイルが Web アプリ内の適切なフォルダーにコピーされます (継続的な Web ジョブの場合は App_Data/jobs/continuous 、スケジュールされた 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 プロジェクトの webjobs-list.json ファイルに WebJobs 対応プロジェクトの名前を含めます。
[前提条件]
Azure 開発ワークロードと共に Visual Studio 2022 をインストールします。
既存のコンソール アプリ プロジェクトの WebJobs デプロイを有効にする
次の 2 つのオプションがあります。
-
Web プロジェクトをデプロイするときに Web ジョブとして自動的にデプロイされるように、既存のコンソール アプリ プロジェクトを構成します。 このオプションは、関連する Web アプリケーションを実行するのと同じ Web アプリで Web ジョブを実行する場合に使用します。
-
Web プロジェクトへのリンクを使用せずに、既存のコンソール アプリ プロジェクトを Web ジョブとして単独でデプロイするように構成します。 このオプションは、Web アプリ内で Web アプリケーションが実行されていない状態で、Web アプリ内で単独で Web ジョブを実行する場合に使用します。 Web アプリケーション リソースとは別に Web ジョブ リソースをスケーリングする場合に使用できます。
Web プロジェクトで Web ジョブの自動デプロイを有効にする
ソリューション エクスプローラーで Web プロジェクトを右クリックし、 [追加>プロジェクトを Azure WebJob として使用する] を選択します。
[ Azure Web ジョブの追加 ] ダイアログ ボックスが表示されます。
[ プロジェクト名 ] ドロップダウン リストで、Web ジョブとして追加するコンソール アプリ プロジェクトを選択します。
[ Azure Web ジョブの追加 ] ダイアログ ボックスを完了し、[ OK] を選択します。
Web プロジェクトを使用せずに Web ジョブのデプロイを有効にする
ソリューション エクスプローラーでコンソール アプリ プロジェクトを右クリックし、[Azure WebJob として発行] を選択します。
[ 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 テンプレートを使用する
ファイル>新規作成>プロジェクトを選択します。 [ 新しいプロジェクトの作成 ] ダイアログ ボックスで、C# 用 の Azure WebJob (.NET Framework) を検索して選択します。
前の手順に従って、 コンソール アプリ プロジェクトを独立した Web ジョブ プロジェクトにします。
Web プロジェクトにリンクされた Web ジョブ用に Web ジョブの新しいプロジェクト テンプレートを使用する
ソリューション エクスプローラーで Web プロジェクトを右クリックし、>を選択します。
[ Azure Web ジョブの追加 ] ダイアログ ボックスが表示されます。
[ Azure Web ジョブの追加 ] ダイアログ ボックスを完了し、[ OK] を選択します。
webjob-publish-settings.json ファイル
WebJobs 配置用にコンソール アプリを構成すると、Visual Studio は Microsoft.Web.WebJobs.Publish NuGet パッケージをインストールし、スケジュール情報を WebJobs プロジェクトのプロジェクト のプロパティ フォルダーの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 プロジェクトのプロパティ フォルダー内の webjobs-list.json ファイルに Web ジョブ プロジェクトの名前を格納します。 次の例に示すように、リストには複数の WebJobs プロジェクトが含まれている場合があります。
{
"$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 プロジェクトを単独でデプロイするには、 ソリューション エクスプローラー でプロジェクトを右クリックし、[ Azure WebJob として発行] を選択します。
独立した Web ジョブの場合、Web プロジェクトに使用されるのと同じ Web 発行 ウィザードが表示されますが、変更できる設定は少なくなります。
[Azure WebJob の追加] ダイアログ ボックス
[ Azure Web ジョブの追加 ] ダイアログ ボックスでは、Web ジョブの名前と実行モードの設定を入力できます。
このダイアログ ボックスの一部のフィールドは、Azure portal の [ Web ジョブの追加 ] ダイアログ ボックスのフィールドに対応しています。 詳細については、「 Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する」を参照してください。
Web ジョブのデプロイ情報:
コマンド ライン デプロイの詳細については、「 Azure WebJobs のコマンド ラインまたは継続的デリバリーの有効化」を参照してください。
Web ジョブをデプロイした後、Web ジョブの種類を変更して再デプロイする場合は、 webjobs-publish-settings.json ファイルを削除します。 これにより、Visual Studio で発行オプションが再表示されるため、Web ジョブの種類を変更できます。
Web ジョブをデプロイした後で実行モードを継続的から非継続的に、またはその逆に変更した場合、Visual Studio は再デプロイ時に Azure に新しい Web ジョブを作成します。 他のスケジュール設定を変更しても、実行モードを同じままにするか、スケジュールされたジョブとオンデマンドジョブを切り替えると、Visual Studio は新しいジョブを作成する代わりに既存のジョブを更新します。
Web ジョブの種類
Webジョブの種類は、トリガー型または継続型のいずれかです。
トリガー (既定): トリガーされた Web ジョブは、バインド イベント、 スケジュール、または手動で (オンデマンドで) トリガーされたときに開始されます。 Web アプリが実行されている 1 つのインスタンスで実行されます。
継続的: Web ジョブが作成されるとすぐに 、継続的 な Web ジョブが開始されます。 既定では、すべての Web アプリのスケーリングされたインスタンスで実行されますが、 settings.job を使用して 1 つのインスタンスとして実行するように構成できます。
注
Web アプリは非アクティブな状態が 20 分続くとタイムアウトになり、実際の Web アプリに対する要求だけがタイマーをリセットできます。 Azure portal でアプリの構成を表示したり、高度なツール サイトに要求を行ったりしても、タイマーはリセットされません。 ジョブをホストしている Web アプリを継続的に実行させるか、またはスケジュールに従って実行させるか、あるいはイベント ドリブン トリガーを使用するように設定する場合は、Web アプリの Azure の [構成]ウィンドウで [Always On] 設定を有効にします。 [Always On] 設定は、これらの種類の 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}
など) を含む WebJobs フォルダーのルートにあります。 Visual Studio から Web ジョブをデプロイする場合は、Visual Studio の settings.job ファイルのプロパティを 新しい場合はコピーとしてマークします。
Azure portal から Web ジョブを作成すると、settings.job ファイルが自動的に作成されます。
CRON 式
WebJobs では、Azure Functions のタイマー トリガーと同じ CRON 式をスケジュールに使用します。 CRON のサポートの詳細については、 Azure Functions のタイマー トリガーに関するページを参照してください。
注
CRON 式の実行に使用される既定のタイム ゾーンは、協定世界時 (UTC) です。 別のタイム ゾーンに基づいて CRON 式を実行するには、ご使用の関数アプリ用に WEBSITE_TIME_ZONE という名前のアプリ設定を作成します。 詳細については、「NCRONTAB タイムゾーン」を参照してください。
settings.job 参照
WebJobs では、次の設定がサポートされています。
設定 | タイプ | 説明 |
---|---|---|
is_in_place |
全て | Web ジョブを最初に一時フォルダーにコピーせずに、所定の場所で実行できるようにします。 詳細については、 WebJob 作業ディレクトリを参照してください。 |
is_singleton |
継続的 | スケールアウトされた場合にのみ、1 つのインスタンスで Web ジョブを実行します。詳細については、「 連続ジョブをシングルトンとして設定する」を参照してください。 |
schedule |
トリガー | CRON ベースのスケジュールで Web ジョブを実行します。 詳細については、 NCRONTAB 式を参照してください。 |
stopping_wait_time |
全て | シャットダウン動作の制御を許可します。 詳細については、グレースフル シャットダウンに関する記事を参照してください。 |
継続的な実行
Azure で Always on を有効に した場合は、Visual Studio を使用して、継続的に実行するように Web ジョブを変更できます。
まだ発行していない場合は、 プロジェクトを Azure に発行します。
ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。
[ 設定] セクションで、[ すべての設定を表示] を選択します。
[プロファイル設定] ダイアログ ボックスで、[Web ジョブの種類] で [連続] を選択し、[保存] を選択します。
[ 発行 ] タブで [ 発行 ] を選択し、更新された設定で Web ジョブを再発行します。