Azure Functions 開発をローカルで完結させてデバッグしたい
はじめに
Visual Studio2017において、Azure Functions開発をローカルで完結させようとして、はまったメモです。
AzureWebJobsStrogeにローカルを設定する
AzureWebJobsStrorageの接続先を設定
TimerやQueueなどHTTPトリガー以外のFunctionsはAzureWebJobsStorageの接続文字列の設定が必要です。
設定しないと次のエラーメッセージが出ました。
Missing value for AzureWebJobsStorage in local.settings.json. This is required for all triggers other than HTTP. You can run 'func azure functionapp fetch-app-settings <functionAppName>' or specify a connect string in local.settings.json
ローカル環境で実行する場合は、
local.settings.json 内のAzureWebJobsStorageに下記を設定するとローカルのエミュレータに接続できます。
"UseDevelopmentStorage=true"
ただし、接続文字列を指定するだけではエミュレータは起動しません。
Azure Storage Emulatorを起動
AzureStorageEmulatorはAzure SDKと共にインストールされています。
Winキー
"Azure Storage Emulator"と入力
起動
起動が完了するとタスクバーの中にAzureStorageEulatorが表示されます。
デバッグ実行
Functionsのローカル実行ができます。
ローカル環境でAzureFunctionのTimerFunctionを実行する
HTTPトリガーの場合、デバッグ時にURLがAzureFunctionsToolに表示されるので、そのURLブラウザでアクセスすれば実行されます。
タイマートリガーの場合、ToolにURLは表示されません。
ポータル環境であれば、Testから実行できますがローカルではどうするか
Power ShellからAzure Functionを実行する
Power Shell上で"Invoke-RestMethod"を使います。
Invoke-RestMethod -Method Post -Uri "http://localhost:{PORT}/admin/functions/{YOUR FUNCTIONS NAME}" -Body "{}"
注意点
- 設定環境に依存しますが、何もしないでブラウザから実行するとGETになってしまい失敗しました。
- -Body "{}" 何も指定しないのでと、省略するとBad Requestで失敗しました
さいごに
備忘録ですが、以上でAzure Functionのデバッグをローカルで完結させることができました。