yotiky Tech Blog

とあるエンジニアの備忘録

Visual Studio で Azure Functions に QueueTrigger のAPIを作成する

TL;DR

Visual Studio でQueue Triggerを使ったAzure Functions のAPIを実装します。
開発環境の準備は含まれないため、Visual Studio を使用する Azure Functions の開発 などを参考にしてください。

目次

開発環境

プロジェクトを作成する

  1. Visual Studioで[ファイル > 新規作成 > プロジェクト]を選択し、[Visual C# > Cloud > Azure Functions]を選択して、任意の場所に設定してOKをクリック。 f:id:yotiky:20190102000223p:plain
  2. Queue trigger を選択してOKをクリック。
    • デフォルトでv2が選択されている
    • ローカル実行の場合は、Connection string setting は空でOK f:id:yotiky:20190102000735p:plain
  3. Function1という名前のサンプルが生成される。

Function1.cs

    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
        }
    }

local.settings.json

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    }
}

QueueTriggerAttributeのQueueNameに指定したキューにデータを登録するとトリガーが発動し処理が動きます。 Local実行の場合はConnectionStringは空で大丈夫です。local.settings.jsonUseDevelopmentStorage=trueが設定されていれば、Azureストレージエミュレータに接続します。1 接続文字列に関してより詳しくは下記のBlogなどが参考になるかと思います。

beachside.hatenablog.com

ローカルで実行する

  1. F5でデバッグ実行。
  2. Cloud Explorer からキューを追加。 f:id:yotiky:20190102000907p:plain f:id:yotiky:20190102000943p:plain
  3. キューが処理されるとログに出力される。 f:id:yotiky:20190102001133p:plain

Newtonsoft.Json.JsonReaderException が発生する場合

デバッグ実行した際に、以下の例外が発生する場合は、デフォルトでセットアップされたMicrosoft.Azure.WebJobs.Extensions.Storageの3.0.0の既知のバグの可能性があるので更新してみてください。2
f:id:yotiky:20190102002419p:plain f:id:yotiky:20190102002617p:plain