2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Azure Functionsをローカルでテストできる環境を整える

Last updated at Posted at 2024-06-29

はじめに

本記事ではPythonを例にAzure FunctionsのHTTP Triggerを作っていきます。
その中で、ローカル環境(Windows)でAzure Functionsの挙動を確認したいので、その方法をまとめます。

参考

VSCodeの拡張機能インストール

VScodeをインストールして、以下の拡張機能を入れる(Japenese、Python、Azure functions、Azurite)。

image.png

Core Tools

Ctrl+Shift+Pでコマンドパレットを開いて「Azure Functions: Core Tools のインストールまたは更新」を選択すると以下のようなメッセージが出る。なお、公式の動画内でも同じ動作となっていた(なんでやねん)。
image.png

「these instructions」のリンクから「Windows 64-bit」を選択する。

image.png

ダウンロードして実行すると以下のような画面が出るので進めていく。

image.png

インストール完了後コマンドプロンプトで以下のように出ればOK。

image.png

ローカルでAzure functionsを作る

「エクスプローラ」タブでプロジェクトを作りたいフォルダを作成し、選択しておく。

image.png
今はTEST01フォルダを選択した。

VScodeの「azure」タブを選択し「signed in to Azure」でazureにサインインする。
image.png
サインインできた。

「azure」タブの「workspace」の右側にazure functionsのマークがあるので、「Create Function」を選択する(わかりにくい)。
image.png

以下の設定をコマンドパレットに入力していく。
image.png

プロジェクトが作成されたらlocal.settings.jsonを以下のように修正する。

local.settings.json
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
  }
}

"AzureWebJobsStorage"を"UseDevelopmentStorage=true"にすることでローカルでBlobStorage等をエミュレーションする。この設定により、Azure Functionsをローカル環境でテストすることが可能になる。

Azurite:startを実行する。

image.png
ローカルのAzure Storageのエミュレーションが開始した。

image.png

「ターミナル」タブから「新しいターミナル」を選択する。
このままアプリを実行すると以下のようなエラーが出る。

.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」を実行する。
image.png
これでOK。

「F5」キーを押すとアプリを実行ができる。
image.png

function_app.py
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
        )

実行結果
image.png

Azure Functionsに対して任意の入力を行う

関数がJSON形式で入力を待ち受けている状態なので、ローカルで関数に入力を与えてみる。

ターミナルにて関数を実行している状態で「azure」タブから関数を右クリックして「Execute Function Now」を選択する。

image.png
エンター。

実行結果
image.png

logging.infoした情報が「コンソール」タブから確認できる。
また、HttpResponseで返した内容はVSCodeの通知情報としてみることができる。

ローカルで作成したFunctionsをazureにデプロイする方法は以下を見ると丁寧。

次回予告

Azure Functionsを使っていると、取得したデータ等を保管しておきたい要件が出ることもありますよね。
そこで、次回はAzure FunctionsとCosmos DBを連携させて、お手軽なアプリケーションを作ってみましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?