こんにちは、Shimacoです。
表題の件、ローカル実行でハマりましたので備忘録を残しておきます。
不足している箇所はのちほど追記していきます。Microsoft公式のリファレンスはこちらです。
環境構築
- Azure VM (Ubuntu 12.x)
- Python3.8
Tera Term等でUbuntuのVMにアクセスし、リファレンスの前提条件通りに、Azure Function Core Toolsなどのインストールをします。
テスト関数の実行
前提条件がクリアできたら、テスト関数を作成して実行してみましょう。
これで、関数を作成したら、
で実行します。
開発した関数をローカル実行
テスト実行が確認できましたら、いよいよこちらのステップに移って参りましょう。
何はともあれまずはGit clone
今回のケースは、既存のFunctionsプロジェクトを、Azure DevOpsからGit Cloneしてローカル実行します。
Git cloneコマンドを実行すると、Azureの認証画面リンクが表示されますのでクリックすると、Tera Termに接続している自分のPCのChromeで開きました。
そこで認証して、無事Git clone完了。
.venvを作って有効化
わたしの最大のハマりポイントでした。
Functions Core toolsでローカル実行する際は、.venvが必須です。
これが分からず、ローカルのPythonパスで実行していたため、ありとあらゆるエラーに苦しめられました。根本理由とは関係ないようなエラーの羅列も。今回は、azure-storage-blobのライブラリを使っていたのですが、あるのにないと言われていました。パス通しているのに。
venvを作成して有効化するには、下記を実行します。
python -m venv .venv
source .venv/bin/activate
パスは通しているんだけど、Pythonは環境複数作れて便利な反面、パラレルワールド的にわたしいまどこ?が明確に分からないとハマるポイントなのかと思いました。同じような初心者の皆さんのお力になれば幸いです。
ローカルの環境変数
Azure側は、Configからアプリの環境変数を設定するのですが、ローカルの場合はlocal.setting.jsonに環境変数を記載していきます。※os.environ[~]で取得するものです。
使っていなければ特に指定しなくてOKです。
ちなみに、試していませんが、Azure環境にデプロイする際に同期もできるようです。便利ですね。
ルートパスで実行
必要な環境変数の設定が終わったら、テスト実行でも触れたようにfunc startで実行します。
Functionsのアイコンの雷みたいなアスキーアートが表示されたあと、ローカルAPIが表示されますので、リクエストしてみましょう。※Tera Termのセッション複製で新たにターミナルを立ち上げて、curlで呼びます。
そうすると、APIが表示された方にも成功とかエラーとか出てきます。
悩んでいる方は是非お試しいただけると幸いです。