Azure Functionsをローカル環境で動かすのに苦労したことのメモ

まず、最初にお断り。
試行錯誤中でやっと出来たので、覚えている範囲でしかメモれない。今回は、相当まとまりがない記事。
そしてやたらとMicrosoftの愚痴が多いことはご了承ください(嫌いではない)。

さて、世の中、AWS、Azure、GCPなどのクラウドが当たり前になってきていて、当然環境構築も簡単に出来て、コーディング無しでアプリも作れて・・・。
なーんて、甘い世界を夢見て、Azure Functionsを試してみたのだが・・・。

( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!

ぜんぜん簡単じゃない・・・。
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \
もう笑うしか無い。

オープンソースを使用した案件・開発に主に従事してきたため、マイクロソフト製品は、もう10年くらい前から苦手意識がある。
その理由は下記。

・ドキュメントが分かりづらい
Google検索してもオープンソースほど情報が無いことが多い
・ドキュメントがメンテされていない
オープンソースじゃないから、動かないときにソースを見ながら原因調査なんてことは当然出来ない
マイクロソフトに質問するにもお金がかかる
etc

とにかく、商用製品のくせに、直感的にうまくいかなくて、その上説明書が分かりづらくて、使いづらいんだわ

今回も、Azure Functionsの門に素直に入れてもらえなかった。

◎環境
・使用ローカル環境OS:WIndows10
・使用IDEVS CodeVisual Studio Code
・使用言語:C#
*まぁその他、Core Toolsのバージョンとか、Azure Functionsのバージョンとか色々あるけれど、入門段階でそんなん知らんわな!結局そのへんがよく分からなくて入門できないのですよ、マイクロソフトさん。ドキュメントも更新追いついていないから余計に混乱するんだわ。

1.公式ドキュメントを参考に入門を試みる
公式ドキュメントはこれ。
docs.microsoft.com

流れは次の通り。
(1)VSCodeにAzure Functions拡張機能をインストール
(2)VSCodeC# 拡張機能をインストール
f:id:graySpace:20200227121747p:plain

(3)ローカル プロジェクトを作成する
f:id:graySpace:20200227121826p:plain

ここまでは、指示通りにやったつもり。
しかし、次のステップがうまくいかなかった。

(4)関数をローカルで実行する
f:id:graySpace:20200227121941p:plain

ドキュメント通りなら、コンソールに「Http Functions:HttpTriggerExample: [GET,POST] http://localhost:7071/api/HttpTriggerExample」というようなURLが表示されるはずだが、それが出なかった。
f:id:graySpace:20200227122455p:plain

コンソールには次のメッセージが。

No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure
you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

正直、メソッドはPublicにしているし、そもそもドキュメント通りにやって自動生成されたソースコードだし、何もいじっていないし・・・。
( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!( ゚Д゚)ゴルァ!!
というわけですよ。
ここに辿り着くまでも、ぜんぜん動かなくて、幾つか問題を解決してきて漸く出来たと思ったがこの結果。
それでログを見直すと、Content root pathがnetcoreapp2.1になっているnetcoreapp3.1が期待している値
そこで、.vscode配下に存在するtasks.jsonファイルのnetcoreapp2.1をnetcoreapp3.1に書き換えると・・・成功。
f:id:graySpace:20200227122948p:plain

まじ疲れた。
さて、「ここに辿り着くまでも、ぜんぜん動かなくて、幾つか問題を解決してきて漸く出来た」と書いたが、それについてもメモしておく。
正直、色々やって、前提条件が不確定・不確実なのが苦しいところだけど、全てマイクロソフトのドキュメントがそのへんも含めて明記していないのが悪いのだwwww!!!!!!!

◎その他苦労したこと1

エラーメッセージ「Failed to attach to process: Only 64-bit processes can be debugged」

日本語だと、「プロセスのアタッチに失敗しました:64bitのプロセス以外はデバッグできません。」とかそんな感じのエラーメッセージだったと思う。

このメッセージがコンソールにポップアップで出現して、サーバが停止する現象に非常に長い時間悩まされた。
日本語のエラーメッセージでGoogle検索しても参考になりそうな記事が見つからず、英訳してぐぐったら、次の記事に遭遇。
stackoverflow.com
この記事だと解決方法が次のように言われているが、自分とは状況が異なり、この解決方法は役に立たなかった。
f:id:graySpace:20200227124316p:plain

だいぶ調べて、ようやく辿り着いたのが次の記事。
www.e-learn.cn
f:id:graySpace:20200227124601p:plain

回答がドンピシャっぽい。

The problem was in azure-functions-core-tools installed through chocolatey. Currently it is installing x86 version of tools. Steps I made to solve the problem:
1.run choco uninstall azure-functions-core-tools
2.download nupkg file from here
3.edit tools\chocolateyinstall.ps1 script (change x86 to x64 in a url)
4.run choco install azure-functions-core-tools -source . --ignore-checksums in a folder where edited nupkg file is
5.have fun debugging your functions in VSCode

日本語に訳すと次のような感じ。

問題は、chocolateyを使ってインストールしたazure-functions-core-toolsにある。現在、chocolateyはx86版のazure-functions-core-toolsをインストールするようになっている。
この問題を解決するのに私が行ったことは次の通り。
1. choco uninstall azure-functions-core-toolsを実行
2. nupkg をダウンロード
3. tools\chocolateyinstall.ps1 scriptを編集してx86をx64に変更
4. 編集したnupkgファイルがあるフォルダで、choco install azure-functions-core-tools -source . --ignore-checksumsを実行
5. VSCodeでdebugが出来るようになるはず

自分の場合はchocolateyを使って、azure-functions-core-toolsをuninstallしてから、npmでcore toolのv3をインストールした。

npm i -g azure-functions-core-tools@3 --unsafe-perm true

これも公式ドキュメント通り。
marketplace.visualstudio.com

もちろん、「choco install azure-functions-core-tools」を実行するのも公式ドキュメント通りなんだけど、先程の記事が正しいとすると、これが失敗の原因だろ。。。
そもそも、Microsoft製品なのに、なんでchocolateyとかnpmとか必要とするんだよ!( ゚Д゚)ゴルァ!!と思うのは私だけ?????

f:id:graySpace:20200227125340p:plain

◎その他参照サイト
blog.shibayan.jp

blog.okazuki.jp