☕
Azure Functionsをローカル環境でテストする際にAzureWebJobsStorageがなくてエラーになる時の対処方
なんの記事か
$ 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種類
- Azure上に本物のStorageを作る
- ローカル環境で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.json
のAzureWebJobsStorage
を下記のように設定しよう
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node"
}
}
動かそう
$ func start
補足
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
を設定すると、下記と同じ動作をするようです。Storageをlocalhost以外で動かしている場合はIPアドレス部分を書き換えると動きます。
"AzureWebJobsStorage": "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10001/devstoreaccount1;"
サンプル(TimerTrigger)
参考にするべき公式マニュアル
Discussion