はじめに
本記事ではPythonを例にAzure FunctionsのHTTP Triggerを作っていきます。
その中で、ローカル環境(Windows)でAzure Functionsの挙動を確認したいので、その方法をまとめます。
参考
VSCodeの拡張機能インストール
VScodeをインストールして、以下の拡張機能を入れる(Japenese、Python、Azure functions、Azurite)。
Core Tools
Ctrl+Shift+Pでコマンドパレットを開いて「Azure Functions: Core Tools のインストールまたは更新」を選択すると以下のようなメッセージが出る。なお、公式の動画内でも同じ動作となっていた(なんでやねん)。
「these instructions」のリンクから「Windows 64-bit」を選択する。
ダウンロードして実行すると以下のような画面が出るので進めていく。
インストール完了後コマンドプロンプトで以下のように出ればOK。
ローカルでAzure functionsを作る
「エクスプローラ」タブでプロジェクトを作りたいフォルダを作成し、選択しておく。
VScodeの「azure」タブを選択し「signed in to Azure」でazureにサインインする。
サインインできた。
「azure」タブの「workspace」の右側にazure functionsのマークがあるので、「Create Function」を選択する(わかりにくい)。
プロジェクトが作成されたらlocal.settings.jsonを以下のように修正する。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
}
}
"AzureWebJobsStorage"を"UseDevelopmentStorage=true"にすることでローカルでBlobStorage等をエミュレーションする。この設定により、Azure Functionsをローカル環境でテストすることが可能になる。
Azurite:startを実行する。
ローカルのAzure Storageのエミュレーションが開始した。
「ターミナル」タブから「新しいターミナル」を選択する。
このままアプリを実行すると以下のようなエラーが出る。
.venv\Scripts\activate : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\ncbpco101\VSProject\test01\.venv\Scripts\Ac
tivate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照して
ください。
発生場所 行:1 文字:1
+ .venv\Scripts\activate ; func host start
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
参考
単純にPowershellのps1ファイルの実行ポリシーの制限によるものなので、powershellを管理者として開いて「set-executionpolicy remotesigned」を実行する。
これでOK。
import azure.functions as func
import logging
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="http_trigger_test01")
def http_trigger_test01(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}. This HTTP triggered function executed successfully.")
else:
return func.HttpResponse(
"This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
status_code=200
)
Azure Functionsに対して任意の入力を行う
関数がJSON形式で入力を待ち受けている状態なので、ローカルで関数に入力を与えてみる。
ターミナルにて関数を実行している状態で「azure」タブから関数を右クリックして「Execute Function Now」を選択する。
logging.infoした情報が「コンソール」タブから確認できる。
また、HttpResponseで返した内容はVSCodeの通知情報としてみることができる。
ローカルで作成したFunctionsをazureにデプロイする方法は以下を見ると丁寧。
次回予告
Azure Functionsを使っていると、取得したデータ等を保管しておきたい要件が出ることもありますよね。
そこで、次回はAzure FunctionsとCosmos DBを連携させて、お手軽なアプリケーションを作ってみましょう。