イベント ドリブンのバックグラウンド処理で Azure WebJobs SDK の使用を開始するGet started with the Azure WebJobs SDK for event-driven background processing

この記事では、Visual Studio 2019 を使用し、Azure WebJobs SDK プロジェクトを作成し、それをローカルで実行し、Azure App Service にデプロイする方法について説明します。This article shows how to use Visual Studio 2019 to create an Azure WebJobs SDK project, run it locally, and then deploy it to Azure App Service. バージョン 3.x の WebJobs SDK は、.NET Core と .NET Framework の両方のコンソール アプリをサポートしています。Version 3.x of the WebJobs SDK supports both .NET Core and .NET Framework console apps. WebJobs SDK の使用方法については、「イベント ドリブンのバックグラウンド処理に Azure WebJobs SDK を使用する方法」を参照してください。To learn more about working with the WebJobs SDK, see How to use the Azure WebJobs SDK for event-driven background processing.

この記事では、.NET Core コンソール アプリとして Webjobs をデプロイする方法を示します。This article shows you how to deploy WebJobs as a .NET Core console app. .NET Framework コンソール アプリケーションとして Webjobs をデプロイするには、「.NET Framework コンソール アプリとしての WebJobs」を参照してください。To deploy WebJobs as a .NET Framework console app, see WebJobs as .NET Framework console apps. .NET Framework だけをサポートする WebJobs SDK バージョン 2.x に興味がある場合、「Visual Studio を使用して Web ジョブを開発してデプロイする - Azure App Service」を参照してください。If you are interested in WebJobs SDK version 2.x, which only supports .NET Framework, see Develop and deploy WebJobs using Visual Studio - Azure App Service.

前提条件Prerequisites

  • Azure 開発 ワークロードと共に Visual Studio 2019 をインストールします。Install Visual Studio 2019 with the Azure development workload. Visual Studio は既にあるものの、必要なワークロードがない場合は、 [ツール] > [Get Tools and Features](ツールと機能の取得) を選択してワークロードを追加してください。If you already have Visual Studio but don't have that workload, add the workload by selecting Tools > Get Tools and Features.

  • WebJobs SDK プロジェクトを Azure に発行するには、Azure アカウントが必要です。You must have an Azure account to publish your WebJobs SDK project to Azure.

プロジェクトの作成Create a project

  1. Visual Studio で、 [新しいプロジェクトの作成] を選択します。In Visual Studio, select Create a New Project.

  2. [コンソール アプリ (.NET Core)] を選択します。Select Console App (.NET Core).

  3. プロジェクトに WebJobsSDKSample という名前を付け、 [作成] を選択します。Name the project WebJobsSDKSample, and then select Create.

    [新しいプロジェクト] ダイアログ

WebJobs NuGet パッケージWebJobs NuGet packages

  1. Microsoft.Azure.WebJobs を含む、Microsoft.Azure.WebJobs.Extensions NuGet パッケージの最新の安定した 3.x バージョンをインストールします。Install the latest stable 3.x version of the Microsoft.Azure.WebJobs.Extensions NuGet package, which includes Microsoft.Azure.WebJobs.

    パッケージ マネージャー コンソール コマンドを次に示します。Here's the Package Manager Console command:

    Install-Package Microsoft.Azure.WebJobs.Extensions -version <3_X_VERSION>
    

    このコマンドの <3_X_VERSION> は、サポートされているバージョンのパッケージに置き換えてください。In this command, replace <3_X_VERSION> with a supported version of the package.

ホストを作成するCreate the Host

ホストは関数のランタイム コンテナーであり、トリガーをリッスンし、関数を呼び出します。The host is the runtime container for functions that listens for triggers and calls functions. 以下の手順では、IHost を実装するホストを作成します。これは、ASP.NET Core での汎用ホストです。The following steps create a host that implements IHost, which is the Generic Host in ASP.NET Core.

  1. Program.cs に、次の using ステートメントを追加します。In Program.cs, add these using statements:

    using System.Threading.Tasks;
    using Microsoft.Extensions.Hosting;
    
  2. Main メソッドを次のコードに置き換えます。Replace the Main method with the following code:

    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.ConfigureWebJobs(b =>
                {
                    b.AddAzureStorageCoreServices();
                });
        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }
    

ASP.NET Core では、ホストの構成は HostBuilder インスタンスでメソッドを呼び出すことによって設定します。In ASP.NET Core, host configurations are set by calling methods on the HostBuilder instance. 詳しくは、「.NET での汎用ホスト」をご覧ください。For more information, see .NET Generic Host. ConfigureWebJobs 拡張メソッドでは、WebJobs ホストが初期化されます。The ConfigureWebJobs extension method initializes the WebJobs host. ConfigureWebJobs では、特定の WebJobs 拡張を初期化し、その拡張のプロパティを設定します。In ConfigureWebJobs, you initialize specific WebJobs extensions and set properties of those extensions.

コンソール ログ記録の有効化Enable console logging

ここでは、ASP.NET Core ログ記録フレームワークを使用するコンソール ログ記録を設定します。In this section, you set up console logging that uses the ASP.NET Core logging framework.

  1. Microsoft.Extensions.Logging を含む、Microsoft.Extensions.Logging.Console NuGet パッケージの最新の安定したバージョンをインストールします。Install the latest stable version of the Microsoft.Extensions.Logging.Console NuGet package, which includes Microsoft.Extensions.Logging.

    パッケージ マネージャー コンソール コマンドを次に示します。Here's the Package Manager Console command:

    Install-Package Microsoft.Extensions.Logging.Console -version <3_X_VERSION>
    

    このコマンドの <3_X_VERSION> は、サポートされている 3.x バージョンのパッケージに置き換えてください。In this command, replace <3_X_VERSION> with a supported 3.x version of the package.

  2. Program.cs で、using ステートメントを追加します。In Program.cs, add a using statement:

    using Microsoft.Extensions.Logging;
    
  3. HostBuilderConfigureLogging メソッドを呼び出します。Call the ConfigureLogging method on HostBuilder. AddConsole メソッドでは、構成にコンソールのログ記録が追加されます。The AddConsole method adds console logging to the configuration.

    builder.ConfigureLogging((context, b) =>
    {
        b.AddConsole();
    });
    

    Main メソッドは次のようになります。The Main method now looks like this:

    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.ConfigureWebJobs(b =>
                {
                    b.AddAzureStorageCoreServices();
                });
        builder.ConfigureLogging((context, b) =>
                {
                    b.AddConsole();
                });
        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }
    

    この更新で次が行われます。This update does the following:

    • ダッシュボード ログ記録を無効にします。Disables dashboard logging. ダッシュボードはレガシ監視ツールであり、ダッシュボード ログ記録は高スループットの実稼働シナリオにはお勧めしません。The dashboard is a legacy monitoring tool, and dashboard logging is not recommended for high-throughput production scenarios.
    • 既定のフィルターを使用してコンソールのプロバイダーを追加します。Adds the console provider with default filtering.

これで、Azure Storage キューへのメッセージ到着によってトリガーされる関数を追加することができます。Now, you can add a function that is triggered by messages arriving in an Azure Storage queue.

Storage バインディング拡張機能をインストールするInstall the Storage binding extension

バージョン 3.x より、WebJobs SDK で必要となるストレージ バインディング拡張機能を明示的にインストールする必要があります。Starting with version 3.x, you must explicitly install the Storage binding extension required by the WebJobs SDK. 以前のバージョンでは、ストレージ バインディングは SDK に含まれていました。In prior versions, the Storage bindings were included in the SDK.

  1. Microsoft.Azure.WebJobs.Extensions.Storage NuGet パッケージの最新の安定バージョンであるバージョン 3.x をインストールします。Install the latest stable version of the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x.

    パッケージ マネージャー コンソール コマンドを次に示します。Here's the Package Manager Console command:

    Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version <3_X_VERSION>
    

    このコマンドの <3_X_VERSION> は、サポートされているバージョンのパッケージに置き換えてください。In this command, replace <3_X_VERSION> with a supported version of the package.

  2. ConfigureWebJobs 拡張メソッド内で、HostBuilder インスタンスの AddAzureStorage メソッドを呼び出し、ストレージ拡張機能を初期化します。In the ConfigureWebJobs extension method, call the AddAzureStorage method on the HostBuilder instance to initialize the Storage extension. この段階で、ConfigureWebJobs メソッドは次の例のようになります。At this point, the ConfigureWebJobs method looks like the following example:

    builder.ConfigureWebJobs(b =>
                    {
                        b.AddAzureStorageCoreServices();
                        b.AddAzureStorage();
                    });
    

関数を作成するCreate a function

  1. プロジェクトを右クリックし、 [追加] > 、 [新しいアイテム] の順に選択し、 [クラス] を選択し、新しい C# クラス ファイルに Functions.cs という名前を付け、 [追加] を選択します。Right-click the project, select Add > New Item..., choose Class, name the new C# class file Functions.cs, and select Add.

  2. Functions.cs で、生成されたテンプレートを次のコードに置き換えます。In Functions.cs, replace the generated template with the following code:

    using Microsoft.Azure.WebJobs;
    using Microsoft.Extensions.Logging;
    
    namespace WebJobsSDKSample
    {
        public class Functions
        {
            public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
            {
                logger.LogInformation(message);
            }
        }
    }
    

    QueueTrigger 属性は、queue と呼ばれる Azure Storage キューに新しいメッセージが書き込まれたときに、この関数を呼び出すようランタイムに通知します。The QueueTrigger attribute tells the runtime to call this function when a new message is written on an Azure Storage queue called queue. キュー メッセージの内容は、message パラメーター内のメソッド コードに提供されます。The contents of the queue message are provided to the method code in the message parameter. メソッドの本文では、トリガー データを処理します。The body of the method is where you process the trigger data. この例では、コードはメッセージをログに記録するだけです。In this example, the code just logs the message.

    message パラメーターは文字列である必要はありません。The message parameter doesn't have to be a string. JSON オブジェクト、バイト配列、または CloudQueueMessage オブジェクトにバインドすることもできます。You can also bind to a JSON object, a byte array, or a CloudQueueMessage object. キュー トリガーの使用方法に関するページをご覧ください。See Queue trigger usage. バインドの種類 (キュー、BLOB、テーブルなど) ごとに、バインドできる異なる種類のパラメーター セットがあります。Each binding type (such as queues, blobs, or tables) has a different set of parameter types that you can bind to.

ストレージ アカウントの作成Create a storage account

ローカルで実行する Azure ストレージ エミュレーターには、WebJobs SDK に必要な機能がすべてあるわけではありません。The Azure Storage Emulator that runs locally doesn't have all of the features that the WebJobs SDK needs. そのため、ここでは、Azure にストレージ アカウントを作成し、それを使用するようにプロジェクトを構成します。So in this section you create a storage account in Azure and configure the project to use it. ストレージ アカウントが既にある場合、手順 6 までスキップします。If you already have a storage account, skip down to step 6.

  1. Visual Studio で サーバー エクスプローラー を開き、Azure にサインインします。Open Server Explorer in Visual studio and sign in to Azure. [Azure] ノードを右クリックし、 [Microsoft Azure サブスクリプションへの接続] を選択します。Right-click the Azure node, and then select Connect to Microsoft Azure Subscription.

    Azure へのサインイン

  2. サーバー エクスプローラーAzure ノードで [Storage] を右クリックし、 [ストレージ アカウントの作成] をクリックします。Under the Azure node in Server Explorer, right-click Storage, and then select Create Storage account.

    [ストレージ アカウントの作成] メニュー

  3. [ストレージ アカウントの作成] ダイアログ ボックスで、ストレージ アカウントの一意の名前を入力します。In the Create Storage Account dialog box, enter a unique name for the storage account.

  4. App Service アプリを作成したのと同じ リージョン または近くのリージョンを選択します。Choose the same Region that you created your App Service app in, or a region close to you.

  5. [作成] を選択しますSelect Create.

    ストレージ アカウントの作成

  6. サーバー エクスプローラー[Storage] ノードで、新しいストレージ アカウントを選択します。Under the Storage node in Server Explorer, select the new Storage account. [プロパティ] ウィンドウで、 [接続文字列] 値フィールドの右側にある省略記号 ( ... ) を選択します。In the Properties window, select the ellipsis (...) at the right of the Connection String value field.

    接続文字列の省略記号

  7. 接続文字列をコピーし、この値をいつでももう一度コピーできる任意の場所に保存します。Copy the connection string, and save this value somewhere that you can copy it again readily.

    接続文字列のコピー

ローカル環境で実行するようにストレージを構成するConfigure storage to run locally

WebJobs SDK では、Azure のアプリケーション設定内でストレージの接続文字列が検索されます。The WebJobs SDK looks for the storage connection string in the Application Settings in Azure. ローカル環境で実行すると、ローカル構成ファイルまたは環境変数内でこの値が検索されます。When you run locally, it looks for this value in the local configuration file or in environment variables.

  1. プロジェクトを右クリックし、 [追加] > 、 [新しいアイテム] の順に選択し、 [JavaScript JSON 構成ファイル] を選択し、新しいファイルに appsettings.json という名前を付け、 [追加] を選択します。Right-click the project, select Add > New Item..., choose JavaScript JSON configuration file, name the new file appsettings.json file, and select Add.

  2. 新しいファイルで、次の例のように AzureWebJobsStorage フィールドを追加します。In the new file, add a AzureWebJobsStorage field, as in the following example:

    {
        "AzureWebJobsStorage": "{storage connection string}"
    }
    
  3. {storage connection string} を先ほどコピーした接続文字列で置き換えます。Replace {storage connection string} with the connection string that you copied earlier.

  4. ソリューション エクスプローラーで appsettings.json ファイルを選択し、 [プロパティ] ウィンドウで [出力ディレクトリにコピー][新しい場合はコピーする] に設定します。Select the appsettings.json file in Solution Explorer and in the Properties window, set Copy to Output Directory to Copy if newer.

後で、Azure App Service のアプリに同じ接続文字列のアプリ設定を追加します。Later, you'll add the same connection string app setting in your app in Azure App Service.

ローカルでテストするTest locally

ここでは、プロジェクトをローカルでビルドおよび実行し、キュー メッセージを作成して関数をトリガーします。In this section, you build and run the project locally and trigger the function by creating a queue message.

  1. Ctrl キーを押しながら F5 キー を押してプロジェクトを実行します。Press Ctrl+F5 to run the project.

    コンソールは、ランタイムが関数を見つけ、キュー メッセージのトリガーを待機していることを示します。The console shows that the runtime found your function and is waiting for queue messages to trigger it. v3.x のホストでは、次の出力が生成されます。The following output is generated by the v3.x host:

     info: Microsoft.Azure.WebJobs.Hosting.JobHostService[0]
           Starting JobHost
     info: Host.Startup[0]
           Found the following functions:
           WebJobsSDKSample.Functions.ProcessQueueMessage
    
     info: Host.Startup[0]
           Job host started
     Application started. Press Ctrl+C to shut down.
     Hosting environment: Development
     Content root path: C:\WebJobsSDKSample\WebJobsSDKSample\bin\Debug\netcoreapp2.1\
    
  2. コンソール ウィンドウを閉じます。Close the console window.

  3. Visual Studio の サーバー エクスプローラー で、新しいストレージ アカウントのノードを展開し、 [キュー] を右クリックします。In Server Explorer in Visual Studio, expand the node for your new storage account, and then right-click Queues.

  4. [キューの作成] を選択します。Select Create Queue.

  5. キューの名前として「キュー」と入力し、 [OK] を選択します。Enter queue as the name for the queue, and then select OK.

    キューを作成して "queue" という名前を付けているスクリーンショット。Screenshot that shows where you create the queue and name it "queue".

  6. 新しいキューのノードを右クリックし、 [キューの表示] を選択します。Right-click the node for the new queue, and then select View Queue.

  7. メッセージの追加 アイコンを選択します。Select the Add Message icon.

    メッセージの追加アイコンが強調表示されているスクリーンショット。

  8. [メッセージの追加] ダイアログで、「Hello World! 」をIn the Add Message dialog, enter Hello World! [メッセージ テキスト] として入力し、 [OK] を選択します。as the Message text, and then select OK. これでキューにメッセージが入りました。There is now a message in the queue.

    キューの作成

  9. プロジェクトを再度実行します。Run the project again.

    ProcessQueueMessage 関数で QueueTrigger 属性を使用したので、WeJobs SDK ランタイムは起動時にキュー メッセージをリッスンします。Because you used the QueueTrigger attribute in the ProcessQueueMessage function, the WeJobs SDK runtime listens for queue messages when it starts up. "キュー" という名前のキューで新しいキュー メッセージを検索し、関数を呼び出します。It finds a new queue message in the queue named queue and calls the function.

    キュー ポーリング指数バックオフにより、ランタイムがメッセージを検索して関数を呼び出すのに 2 分ほどかかる場合があります。Due to queue polling exponential backoff, it might take as long as 2 minutes for the runtime to find the message and invoke the function. 開発モードで実行すると、この待機時間を短縮できます。This wait time can be reduced by running in development mode.

    コンソール出力は次のようになります。The console output looks like this:

     info: Function.ProcessQueueMessage[0]
           Executing 'Functions.ProcessQueueMessage' (Reason='New queue message detected on 'queue'.', Id=2c319369-d381-43f3-aedf-ff538a4209b8)
     info: Function.ProcessQueueMessage[0]
           Trigger Details: MessageId: b00a86dc-298d-4cd2-811f-98ec39545539, DequeueCount: 1, InsertionTime: 1/18/2019 3:28:51 AM +00:00
     info: Function.ProcessQueueMessage.User[0]
           Hello World!
     info: Function.ProcessQueueMessage[0]
           Executed 'Functions.ProcessQueueMessage' (Succeeded, Id=2c319369-d381-43f3-aedf-ff538a4209b8)
    
  10. コンソール ウィンドウを閉じます。Close the console window.

  11. [キュー] ウィンドウに戻り、ウィンドウを更新します。Go back to the Queue window and refresh it. ローカルで実行されている関数によって処理されたため、メッセージが消えます。The message is gone, since it has been processed by your function running locally.

Application Insights ログの追加Add Application Insights logging

プロジェクトを Azure で実行する場合、コンソール出力を表示して関数の実行を監視することはできません。When the project runs in Azure, you can't monitor function execution by viewing console output. お勧めする監視ソリューションは Application Insights です。The monitoring solution we recommend is Application Insights. 詳しくは、「Azure Functions を監視する」をご覧ください。For more information, see Monitor Azure Functions.

ここでは、Azure にデプロイする前に次のタスクを実行して Application Insights のログ記録を設定します。In this section, you do the following tasks to set up Application Insights logging before you deploy to Azure:

  • 使用する App Service アプリと Application Insights インスタンスがあることをご確認ください。Make sure you have an App Service app and an Application Insights instance to work with.
  • Application Insights インスタンスおよび先ほど作成したストレージ アカウントを使用するように App Service アプリを構成します。Configure the App Service app to use the Application Insights instance and the storage account that you created earlier.
  • Application Insights へのログ記録用のプロジェクトを設定します。Set up the project for logging to Application Insights.

App Service アプリと Application Insights のインスタンスの作成Create App Service app and Application Insights instance

  1. 使用できる App Service アプリがまだない場合は、作成します。If you don't already have an App Service app that you can use, create one. アプリを作成するときに、接続されている Application Insights リソースも作成できます。When you create your app, you can also create a connected Application Insights resource. これを行うと、アプリ内で自動的に APPINSIGHTS_INSTRUMENTATIONKEY が設定されます。When you do this, the APPINSIGHTS_INSTRUMENTATIONKEY is set for you in your app.

  2. 使用できる Application Insights リソースがまだない場合は、作成します。If you don't already have an Application Insights resource that you can use, create one. [アプリケーションの種類][全般] に設定し、「インストルメンテーション キーをコピー」の後のセクションをスキップします。Set Application type to General, and skip the sections that follow Copy the instrumentation key.

  3. 使用する Application Insights リソースが既にある場合は、インストルメンテーション キーをコピーします。If you already have an Application Insights resource that you want to use, copy the instrumentation key.

アプリケーションの設定の構成Configure app settings

  1. Visual Studio の サーバー エクスプローラー で、 [Azure] の下の [App Service] ノードを展開します。In Server Explorer in Visual Studio, expand the App Service node under Azure.

  2. App Service アプリがあるリソース グループを展開し、App Service アプリを右クリックします。Expand the resource group that your App Service app is in, and then right-click your App Service app.

  3. [設定の表示] を選択します。Select View Settings.

  4. [接続文字列] ボックスで、次のエントリを追加します。In the Connection Strings box, add the following entry.

    名前Name 接続文字列connection String データベースの種類Database Type
    AzureWebJobsStorageAzureWebJobsStorage {先ほどコピーした Storage 接続文字列}{the Storage connection string that you copied earlier} CustomCustom
  5. [アプリケーション設定] ボックスに Application Insights インストルメンテーション キーがない場合は、先ほどコピーしたキーを追加しますIf the Application Settings box doesn't have an Application Insights instrumentation key, add the one that you copied earlier. (App Service アプリを作成する方法によっては、インストルメンテーション キーが既にある場合があります)。(The instrumentation key may already be there, depending on how you created the App Service app.)

    名前Name Value
    APPINSIGHTS_INSTRUMENTATIONKEYAPPINSIGHTS_INSTRUMENTATIONKEY {instrumentation key}{instrumentation key}
  6. {instrumentation key} を、使用している Application Insights リソースからのインストルメンテーション キーで置き換えます。Replace {instrumentation key} with the instrumentation key from the Application Insights resource that you're using.

  7. [保存] を選択します。Select Save.

  8. Application Insights の接続がプロジェクトに追加されて、ローカル環境で実行できるようになります。Add the Application Insights connection to the project so that you can run it locally. 次の例のように、appsettings.json ファイルで APPINSIGHTS_INSTRUMENTATIONKEY フィールドを追加します。In the appsettings.json file, add an APPINSIGHTS_INSTRUMENTATIONKEY field, as in the following example:

    {
        "AzureWebJobsStorage": "{storage connection string}",
        "APPINSIGHTS_INSTRUMENTATIONKEY": "{instrumentation key}"
    }
    

    {instrumentation key} を、使用している Application Insights リソースからのインストルメンテーション キーで置き換えます。Replace {instrumentation key} with the instrumentation key from the Application Insights resource that you're using.

  9. 変更を保存します。Save your changes.

Application Insights ログ プロバイダーの追加Add Application Insights logging provider

Application Insights のログ記録を利用するには、ログ記録のコードを次のように更新します。To take advantage of Application Insights logging, update your logging code to do the following:

  • 既定のフィルタリングで Application Insights ログ プロバイダーを追加します。Add an Application Insights logging provider with default filtering. ローカルで実行しているときは、情報レベルとそれより高いレベルのログがすべて、コンソールと Application Insights の両方に出力されます。When running locally, all Information and higher-level logs are written to both the console and Application Insights.
  • ホストの終了時にログ出力がフラッシュされるように、LoggerFactory オブジェクトを using ブロックに配置します。Put the LoggerFactory object in a using block to ensure that log output is flushed when the host exits.
  1. NuGet パッケージ Microsoft.Azure.WebJobs.Logging.ApplicationInsights の最新の安定した 3.x バージョンをインストールしますInstall the latest stable 3.x version of the Microsoft.Azure.WebJobs.Logging.ApplicationInsights NuGet package.

    パッケージ マネージャー コンソール コマンドを次に示します。Here's the Package Manager Console command:

    Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -Version <3_X_VERSION>
    

    このコマンドの <3_X_VERSION> は、サポートされているバージョンのパッケージに置き換えてください。In this command, replace <3_X_VERSION> with a supported version of the package.

  2. Program.cs を開き、Main メソッド内のコードを次のコードに置き換えます。Open Program.cs and replace the code in the Main method with the following code:

    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.UseEnvironment(EnvironmentName.Development);
        builder.ConfigureWebJobs(b =>
                {
                    b.AddAzureStorageCoreServices();
                    b.AddAzureStorage();
                });
        builder.ConfigureLogging((context, b) =>
                {
                    b.AddConsole();
    
                    // If the key exists in settings, use it to enable Application Insights.
                    string instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                    if (!string.IsNullOrEmpty(instrumentationKey))
                    {
                        b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = instrumentationKey);
                    }
                });
        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }
    

    先にアプリ設定に追加したキーを利用し、Application Insights プロバイダーがログ記録に追加されます。This adds the Application Insights provider to the logging, using the key you added earlier to your app settings.

Application Insights ログ記録のテストTest Application Insights logging

ここでは、もう一度ローカル環境で実行して、ログ データが Application Insights とコンソールに記録されることを確認します。In this section, you run locally again to verify that logging data is now going to Application Insights as well as to the console.

  1. Hello App Insights! 」をメッセージ テキストとして入力すること以外は に行ったときと同様に、Visual Studio の サーバー エクスプローラー を使用してキュー メッセージをUse Server Explorer in Visual Studio to create a queue message like you did earlier, except enter Hello App Insights! 作成します。as the message text.

  2. プロジェクトを実行します。Run the project.

    WebJobs SDK がキュー メッセージを処理し、コンソール ウィンドウにログが表示されます。The WebJobs SDK processes the queue message, and you see the logs in the console window.

  3. コンソール ウィンドウを閉じます。Close the console window.

  4. Azure Portal に移動し、Application Insights リソースを表示します。Go to the Azure portal to view your Application Insights resource. Application Insights を探して選択します。Search for and select Application Insights.

  5. Application Insights インスタンスを選択します。Choose your Application Insights instance.

  6. [検索] を選択します。Select Search.

    [検索] の選択

  7. "Hello App Insights! " メッセージが表示されない場合は、If you don't see the Hello App Insights! [更新] を数分ごとに定期的に選択しますmessage, select Refresh periodically for several minutes. (Application Insights クライアントが処理するログをフラッシュするのに少し時間がかかるので、ログはすぐには表示されません)。(Logs don't appear immediately, because it takes a while for the Application Insights client to flush the logs it processes.)

    Application Insights のログ

  8. コンソール ウィンドウを閉じます。Close the console window.

Azure にデプロイするDeploy to Azure

デプロイ中、関数を実行するアプリ サービス インスタンスを作成します。During deployment, you create an app service instance in which to run your functions. .NET Core コンソール アプリを Azure で App Service に発行すると、Web ジョブとして自動的に実行されます。When you publish a .NET Core console app to App Service in Azure, it automatically gets run as a WebJob. 発行に関する詳細については、「Visual Studio を使用して Web ジョブを開発してデプロイする」を参照してください。To learn more about publishing, see Develop and deploy WebJobs using Visual Studio.

  1. ソリューション エクスプローラー で、プロジェクトを右クリックし、 [発行] を選択します。In Solution Explorer, right-click the project and select Publish.

  2. [発行] ダイアログ ボックスの [対象][Azure] を選択してから、 [次へ] を選択します。In the Publish dialog box, select Azure for Target, and then select Next.

  3. [特定のターゲット][Azure WebJobs] を選択してから、 [次へ] を選択します。Select Azure WebJobs for Specific target, and then select Next.

  4. [新しい Azure Web ジョブを作成する] を選択します。Select Create a new Azure WebJob.

    発行先の選択

  5. [App Service (Windows)] ダイアログ ボックスでは、次の表のホスティング設定を使用します。In the App Service (Windows) dialog box, use the hosting settings in the following table.

    設定Setting 推奨値Suggested value 説明Description
    名前Name グローバルに一意の名前Globally unique name 新しい関数アプリを一意に識別する名前。Name that uniquely identifies your new function app.
    サブスクリプションSubscription サブスクリプションの選択Choose your subscription 使用する Azure サブスクリプション。The Azure subscription to use.
    リソース グループResource group myResourceGroupmyResourceGroup 関数アプリを作成するリソース グループの名前。Name of the resource group in which to create your function app. 新しいリソース グループを作成する場合は、 [新規] を選択します。Choose New to create a new resource group.
    ホスティング プランHosting Plan App Service プランApp Service plan App Service プランは、アプリのホストとなる Web サーバー ファームの場所、サイズ、機能を規定します。An App Service plan specifies the location, size, and features of the web server farm that hosts your app. 1 つの App Service プランを共有するように Web アプリを構成することで、複数のアプリをホストするときのコストを抑えることができます。You can save money when hosting multiple apps by configuring the web apps to share a single App Service plan. App Service プランでは、リージョン、インスタンス サイズ、スケール数、および SKU (Free、Shared、Basic、Standard、または Premium) を定義します。App Service plans define the region, instance size, scale count, and SKU (Free, Shared, Basic, Standard, or Premium). [新規] を選択して、新しい App Service プランを作成します。Choose New to create a new App Service plan.

    [App Service の作成] ダイアログ ボックス

  6. [作成] を選択して、これらの設定で Azure に Web ジョブと関連リソースを作成し、プロジェクト コードをデプロイします。Select Create to create a WebJob and related resources in Azure with these settings and deploy your project code.

Azure で関数をトリガーするTrigger the function in Azure

  1. ローカルで実行していないことを確認します (コンソール ウィンドウがまだ開いている場合は閉じます)。Make sure you're not running locally (close the console window if it's still open). そうしないと、作成するキュー メッセージが最初にローカル インスタンスによって処理される可能性があります。Otherwise the local instance might be the first to process any queue messages you create.

  2. Visual Studio の [キュー] ページで、前と同様にキューにメッセージを追加します。In the Queue page in Visual Studio, add a message to the queue as before.

  3. [キュー] ページを更新すると、Azure で実行されている関数によって処理されたため、新しいメッセージが表示されなくなります。Refresh the Queue page, and the new message disappears because it has been processed by the function running in Azure.

    ヒント

    Azure でテストするときに、開発モードを使用して、キュー トリガー関数がすぐに呼び出されることを確認し、キュー ポーリング指数バックオフによる遅延を回避します。When you're testing in Azure, use development mode to ensure that a queue trigger function is invoked right away and avoid delays due to queue polling exponential backoff.

Application Insights のログの表示View logs in Application Insights

  1. Azure Portal を開き、Application Insights リソースに移動します。Open the Azure portal, and go to your Application Insights resource.

  2. [検索] を選択します。Select Search.

  3. "Hello Azure! " メッセージが表示されない場合は、If you don't see the Hello Azure! [更新] を数分ごとに定期的に選択しますmessage, select Refresh periodically for several minutes.

    Web ジョブで実行されている関数からのログを確認します。これには、前のセクションで入力した "Hello Azure! "You see the logs from the function running in a WebJob, including the Hello Azure! テキストが含まれます。text that you entered in the preceding section.

入力バインディングの追加Add an input binding

入力バインディングでは、データを読み取るコードを簡略化します。Input bindings simplify code that reads data. この例では、キュー メッセージは BLOB 名になり、BLOB 名を使用して Azure Storage 内で BLOB を検索し、読み取ります。For this example, the queue message will be a blob name and you'll use the blob name to find and read a blob in Azure Storage.

  1. Functions.cs で、ProcessQueueMessage メソッドを次のコードに置き換えます。In Functions.cs, replace the ProcessQueueMessage method with the following code:

    public static void ProcessQueueMessage(
        [QueueTrigger("queue")] string message,
        [Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob,
        ILogger logger)
    {
        logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes");
    }
    

    このコードでは、queueTriggerバインディング式なので、実行時に別の値に解決されます。In this code, queueTrigger is a binding expression, which means it resolves to a different value at runtime. 実行時には、キュー メッセージの内容が含まれます。At runtime, it has the contents of the queue message.

  2. using を追加します。Add a using:

    using System.IO;
    
  3. ストレージ アカウントで BLOB コンテナーを作成します。Create a blob container in your storage account.

    a.a. Visual Studio の サーバー エクスプローラー で、ストレージ アカウントのノードを展開し、 [BLOB] を右クリックして [BLOB コンテナーの作成] を選択します。In Server Explorer in Visual Studio, expand the node for your storage account, right-click Blobs, and then select Create Blob Container.

    b.b. [BLOB コンテナーの作成] ダイアログで、コンテナー名として「container」を入力し、 [OK] をクリックします。In the Create Blob Container dialog, enter container as the container name, and then click OK.

  4. BLOB コンテナーに Program.cs ファイルをアップロードしますUpload the Program.cs file to the blob container. (このファイルは、ここでは例として使用しています。任意のテキスト ファイルをアップロードし、そのファイルの名前でキュー メッセージを作成できます)。(This file is used here as an example; you could upload any text file and create a queue message with the file's name.)

    a.a. サーバー エクスプローラー で、作成したコンテナーのノードをダブルクリックします。In Server Explorer, double-click the node for the container you created.

    b.b. [コンテナー] ウィンドウで アップロード ボタンをクリックします。In the Container window, select the Upload button.

    BLOB のアップロード ボタン

    c.c. Program.cs を検索して選択し、 [OK] を選択します。Find and select Program.cs, and then select OK.

  5. Program.cs をメッセージのテキストとして、以前に作成したキューにキュー メッセージを作成します。Create a queue message in the queue you created earlier, with Program.cs as the text of the message.

    キュー メッセージ Program.cs

  6. プロジェクトをローカルで実行します。Run the project locally.

    キュー メッセージによって関数がトリガーされ、BLOB が読み取られて、その長さがログに記録されます。The queue message triggers the function, which then reads the blob and logs its length. コンソール出力は次のようになります。The console output looks like this:

    Found the following functions:
    ConsoleApp1.Functions.ProcessQueueMessage
    Job host started
    Executing 'Functions.ProcessQueueMessage' (Reason='New queue message detected on 'queue'.', Id=5a2ac479-de13-4f41-aae9-1361f291ff88)
    Blob name:Program.cs
    Size: 532 bytes
    Executed 'Functions.ProcessQueueMessage' (Succeeded, Id=5a2ac479-de13-4f41-aae9-1361f291ff88)
    

出力バインディングを追加するAdd an output binding

出力バインディングでは、データを書き込むコードを簡略化します。Output bindings simplify code that writes data. この例では、サイズをログに記録する代わりに BLOB のコピーを書き込むことで、前の例を変更します。This example modifies the previous one by writing a copy of the blob instead of logging its size. BLOB ストレージのバインドは、前にインストールした Azure Storage の拡張機能パッケージに含まれます。Blob storage bindings are included in the Azure Storage extension package that we installed previously.

  1. ProcessQueueMessage メソッドを次のコードに置き換えます。Replace the ProcessQueueMessage method with the following code:

    public static void ProcessQueueMessage(
        [QueueTrigger("queue")] string message,
        [Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob,
        [Blob("container/copy-{queueTrigger}", FileAccess.Write)] Stream outputBlob,
        ILogger logger)
    {
        logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes");
        myBlob.CopyTo(outputBlob);
    }
    
  2. Program.cs をメッセージのテキストとして別のキュー メッセージを作成します。Create another queue message with Program.cs as the text of the message.

  3. プロジェクトをローカルで実行します。Run the project locally.

    キュー メッセージによって関数がトリガーされ、BLOB が読み取られ、その長さがログに記録されて、新しい BLOB が作成されます。The queue message triggers the function, which then reads the blob, logs its length, and creates a new blob. コンソール出力は同じですが、BLOB コンテナー ウィンドウに移動して [更新] を選択すると、copy-Program.cs という名前の新しい BLOB が表示されます。The console output is the same, but when you go to the blob container window and select Refresh, you see a new blob named copy-Program.cs.

Azure に更新プログラムを再発行するRepublish the updates to Azure

  1. ソリューション エクスプローラー で、プロジェクトを右クリックし、 [発行] を選択します。In Solution Explorer, right-click the project and select Publish.

  2. [発行] ダイアログ ボックスで、現在のプロファイルが選択されていることを確認し、 [発行] を選択します。In the Publish dialog, make sure that the current profile is selected and then choose Publish. 発行の結果は [出力] ウィンドウに詳しく表示されます。Results of the publish are detailed in the Output window.

  3. ファイルを再び BLOB コンテナーにアップロードし、アップロードしたファイルの名前になっているキューにメッセージを追加することで Azure で関数を検証します。Verify the function in Azure by again uploading a file to the blob container and adding a message to the queue that is the name of the uploaded file. キューからメッセージが削除されたことと、BLOB コンテナーにファイルのコピーが作成されたことを確認できます。You see the message get removed from the queue and a copy of the file created in the blob container.

次のステップNext steps

この記事では、WebJobs SDK 3.x プロジェクトを作成、実行、デプロイする方法について説明しました。This article showed you how to create, run, and deploy a WebJobs SDK 3.x project.