概要
VisualStudioでAzureFunctionsを作成して発行すると、BadRequestエラーで失敗する。しかし、それ以外の詳細情報が無い。どうしよう・・・?という問題を解決した事例紹介です。
最初に結論まとめ
詳細情報は、Functions発行先の「リソースグループ」のログに入っていました。VisualStudioやAzure Functionsのログを見ても情報無しです。
ついでに、OpenApi用のNuGetパッケージは、インプロセスモデルと分離ワーカーモデルで使い分ける必要があるので、注意です。これがエラーの原因でした。
-
インプロセス モデルの場合:
Microsoft.Azure.WebJobs.Extensions.OpenApi
-
分離ワーカー モデルの場合:
Microsoft.Azure.Functions.Worker.Extensions.OpenApi
詳しく
背景
普段Windowsアプリをメインに作っていますが、Azureにチャレンジ中です。すると、基本的なところで次々と躓きます。基本的すぎて意外と情報が見つからなかったりするので、躓いたところと解決策を、この記事のように1つずつ書いていこうと思います。
Functionsの作成と発行
Azure Functionsを作ることになりまして、慣れているVisualStudioで作成を開始しました。
「インプロセス」と「Isolated(分離ワーカーモデル)」という聞き慣れない用語の選択でいきなり悩みます。ざっと調べて・・・使おうとしている機能の都合と、今後は分離ワーカーモデルが推奨になっていくようなので、「Isolated(分離ワーカーモデル)」を選択して作成します。
色々とコーディングしてデバッグ実行での動作もOK。いよいよAzureへ発行です。実験用に分離しておきたいので、リソースグループ・ストレージアカウント・Application Insights等、全て新規作成します。一通り設定したら、発行です。
発行のエラー
失敗しました。さてエラー内容は・・・
「Azure で API を更新できませんでした。(状態コード: BadRequest)」
エラー原因の調べ方で苦戦
うーん、これでは失敗したことしか分かりません。VisualStudioの画面ではこれ以上のエラー情報は無いようです。エラー内容からするとAzureへリクエストは届いた上でAzureからエラーを返されたように見えるので、Azure側のログを見てみます。
Azureポータルで見たところ、Functionsは作成されていました。しかし、Functionsのアクティビティログを見てみますが、何も出ていません。Functionsに紐付けたApplication Insightsのログを見ても、何のログもありません。困った。
解決!
Functions発行先のリソースグループのアクティビティログを見たところ、エラーのログがありました!
Parsing error(s): Failed to import from specified resource [https://<function name>.azurewebsites.net/api/swagger.json:](https://gptsembeddingsearchisofunc.azurewebsites.net/api/swagger.json:) Response status code does not indicate success: 404 (Not Found).
ソースコード上でOpenApiの属性を付けていたのですが、swagger.jsonが出ている事から考えてそれ関連のエラーだったようです。このエラーだけだと原因が分かりづらいですが、結論としては使うNuGetパッケージを間違えていました。
上で触れましたが、今回は「Isolated(分離ワーカーモデル)」を選択しました。なのに、インプロセス向けのNuGetパッケージを使っていたのが原因です。次のように使い分ける必要があります。
-
インプロセス モデルの場合:
Microsoft.Azure.WebJobs.Extensions.OpenApi
-
分離ワーカー モデルの場合:
Microsoft.Azure.Functions.Worker.Extensions.OpenApi
まとめ
Functionsの発行エラーでしたが、Functionsのログではなくリソースグループのログを見る必要があったという話でした。Azureに慣れていないため、エラーが起きた時にどこを見れば良いかという基本的なところでまず躓いてしまったようです。もしかして常識かもしれませんが、同じところで躓いた人の役に立つと嬉しいです。