Azure Functionsで初めてのPython関数を作ったら躓くの話

なんとはなしに、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で見てみる

ポータルで見ると、無事アップロードできました。

めでたしめでたし。

カテゴリー: 開発 パーマリンク