なんとかするから、なんとかなる

エンジニア関係のことを書きます

Azure Functions 開発をローカルで完結させてデバッグしたい

はじめに

Visual Studio2017において、Azure Functions開発をローカルで完結させようとして、はまったメモです。

AzureWebJobsStrogeにローカルを設定する

AzureWebJobsStrorageの接続先を設定

TimerやQueueなどHTTPトリガー以外のFunctionsはAzureWebJobsStorageの接続文字列の設定が必要です。

設定しないと次のエラーメッセージが出ました。

f:id:hopita:20180314173106p:plain

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と共にインストールされています。

  1. Winキー

  2. "Azure Storage Emulator"と入力

  3. 起動

起動が完了するとタスクバーの中に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のデバッグをローカルで完結させることができました。

参考URL

docs.microsoft.com

docs.microsoft.com