なんとはなしに、Function AppをPythonで作ってみるテストで、いきなり躓いたのでメモ。
Azure で初めての Python 関数を作成する | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-first-function-python
基本的な手順は、上記に書いてあるので、素直にコマンドを打てばいいのだけど、どうやら一カ所だけ「書いてない」ので、そこで頓挫してしまう。
仮想環境をアクティブにする
python3.6 -m venv .env
source .env/bin/activate
プロジェクトを作成する
Pythonの仮想環境で動かしているので、”–worker-runtime python” は必要なし。
func init MyFunctionProj
関数を作成する
プロジェクトのフォルダに移動してから、func new する
cd MyFunctionProj
func new
コード(__init__.py)を見る
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
ローカルで実行する
func host start
http://localhost:7071/api/HttpTrigger
にブラウザでアクセスすればOK.
デプロイする
あらかじめ Azure に作成しておいた「azfunc-python」という名前のFunction Appにデプロイします。
func azure functionapp publish azfunc-python
こんな風に、エラー出ます。
Getting site publishing info...
pip download -r /home/masuda/azfunc/MyFunctionProj/requirements.txt --dest /tmp/azureworkeriyncp4zc
There was an error restoring dependencies.ERROR: ['pip', 'download', '-r', '/home/masuda/azfunc/MyFunctionProj/requirements.txt', '--dest', '/tmp/azureworkeriyncp4zc'] failed with exit code 1
何度もやっても駄目、環境を変えても駄目なんですが、どうやら「requirements.txt」の中にある「pkg-resources==0.0.0」を削除すればいいらしいのです。
azure-functions==1.0.0b3
azure-functions-worker==1.0.0b4
grpcio==1.14.2
grpcio-tools==1.14.2
pkg-resources==0.0.0 ★ここを削除
protobuf==3.7.1
six==1.12.0
なんでテンプレートがこの行を作るのか、なぜこの行を消すとうまくいくのかよくわからんのですが、vi などで消します。
Git あたりで見ると、去年の暮れあたりでバグっぽい雰囲気があるのですが、解決されたのかどうかよくわかりません。クローズはされているけど。
Azure Portalで見てみる
ポータルで見ると、無事アップロードできました。
めでたしめでたし。