Azure Functions のTimerTriggerをVSforMacで作る
HTTPTriggerだと何も気にせずVSのみで完結するのだが、他のTriggerはAzure Storage Emu.が必要
しかもそれをちゃんと知らずに動かすとよくわからんエラー吐いてしまう、という落とし穴あり。
(なんかそれに関する警告とか出してくれればいいのに…)
ちなみにこんなエラー↓
The listener for function 'Function1' was unable to start. Microsoft.Azure.Storage.Common: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused.
verboseフラグとかつければもっと詳細に出るかもしれないが。
Azuriteを入れる
こういうことだそうな。
Azuriteを入れて動かしておかないとHTTPTrigger以外のAzure Functionsはちゃんと動かない。
なので、上のページに従ってAzuriteを入れる。
(最近はMSのドキュメントでもVSCode前提の記事が多い、ちゃんとVS前提の記事もほしいんだが…)
npm install -g azurite で良いと思う
Dockerイメージとかあるけどサクッと入れれるnpmにした。
開始方法はこちら
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite#run-azurite-from-a-command-line
パスの書き方はmacに合わせること。
まだ手動で開始しないといけないらしい。
Azuriteを起動していたらちゃんと動くようになった。
追加)HTTPTrigger以外のものをHTTPで呼び出す
TimerTriggerを手動で動かせないので、デバッグやりにくい…
と思っていたが、こういう方法があるみたい。
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-manually-run-non-http
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local?tabs=windows%2Ccsharp%2Cbash#non-http-triggered-functions
このあたりを参照
デプロイ後でもHTTP経由でアクセスできるみたい。(Headerにキーは必要)
ローカル実行中なら以下のようなURLになる。
http://localhost:{port}/admin/functions/{function_name}
portはデフォルトなら7071