Azure Functionsをローカル環境でテストする際にAzureWebJobsStorageがなくてエラーになる時の対処方

1 min read読了の目安(約1400字

なんの記事か

$ func start

を実行した結果

Missing value for AzureWebJobsStorage in local.settings.json. This is required for all triggers other than httptrigger, kafkatrigger. You can run 'func azure functionapp fetch-app-settings <functionAppName>' or specify a connection string in local.settings.json.

となった場合の対処方法

なんのエラーか

httptriggerとkafkatrigger以外のAzureFunctionsは、動作するためににAzureStorageが必要なので、使用できるAzureStorageが無いとエラーになる。

対応方法

対応方法は大きくわけて2種類

  1. Azure上に本物のStorageを作る
  2. ローカル環境でStorageを動かす

ここでは、2の方法を説明します。
どうせなら全部ローカルで動かしたいので。

DockerでAzure Storageを動かそう

ローカルでStorageを動かすには、たぶんdockerを使うのが楽です。

$ docker run -p 10000:10000 -p 10001:10001 mcr.microsoft.com/azure-storage/azurite

FunctionsからローカルのStorageを参照するように設定しよう

local.settings.jsonAzureWebJobsStorageを下記のように設定しよう

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

動かそう

$ func start

サンプル(TimerTrigger)

https://github.com/k-ibaraki/azure-functions-local-sample

参考にするべき公式マニュアル

https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=macos,csharp,bash
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-app-settings
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-configure-connection-string
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite