こんにちは、Shimaco(@shimacotrip)です。
Azure Functionsへのリモートビルドが手くいかず、色々調べて「へぇそんなんだー」と思ったことを備忘録的にまとめておきます。
お役に立てれば幸いです。
リモートビルドに必要な環境変数
Azure FunctionsはLinuxプラン、言語はPythonという環境でのお話です。
- VSCodeからのデプロイ ⇒成功
- Azure DevOpsからビルド/リリースパイプラインを使ったデプロイ ⇒デプロイはできるがFunctionsが動作しなかった。
という挙動の差を発見しました。
色々検証してみたところ、Cofigulation(日本語メニューでは「構成」)の環境変数に違いを発見しました。
VSCodeからデプロイした場合は以下の環境変数があるのに、Azure DevOpsからのデプロイした場合は設定されていません。
ENABLE_ORYX_BUILD=true
SCM_DO_BUILD_DURING_DEPLOYMENT=true
試しに、Azure DevOpsからのデプロイしたFunctions環境に上記の環境変数を追加してみたところ、アッサリ動きました。
こちらの環境変数は調べたところ、Linuxプランのリモートビルド設定に関する環境変数だということ。
ライブラリのバージョンは必ず指定
当たり前なのですが、ついつい今開発しているバージョンで動いているから指定を忘れがちです。
そして、開発していた時点では問題なかったものの、少し時間経過すると依存関係のエラーが起きやすいのではないかと思います。
今回まさにリモート環境のバージョンに合わせてライブラリがインストールされるため、意図しないエラーが発生したのですが、
まず、どのバージョンがインストールされているか確認してみましょう。
Functionsのメニューから「SSH」を選択してコンソールに入ります。
インストールされているフォルダは、以下のようなパスです。多少異なるかもしれません。。。
/home/site/wwwroot/.python_packages/lib/site-packages
原因になるバージョンを確認して、requirement.txtを修正して再度デプロイすると上手くいきます。
私の場合は、原因は「databricks-sql-connector」というライブラリの依存関係でエラーが発生していたので「databricks-sql-connector==1.0.1」と固定すること解決しました。
読んで頂きありがとうございました!