はじめに
前回Azure Open AIによって、ベクター化したデータもインデックスに登録できるようになりました。
前回の記事
この記事でやること
下の図の赤枠のところです。
Cosmos DBにデータを登録するFunctionsを作成します。
今回のFunctionsが完成すると、HTTP Triggerを使ってCosmos DBにデータの登録ができ、そこから前回までに実装したCosmos DB Triggerによってインデックスにデータの登録までができるようになります。
関数を追加する
現在のフォルダに関数を追加しようとしたところ、3通りの方法があったのでメモです。(試したのは2通り)
Visual Studio CodeのAzure拡張機能から、Fuctions追加ボタンをクリックします。
追加しようとるすと、追加方法が3通りでてきました。
そのうち上の2つを試しました。
Add httpTrigger function to an existing fileの場合
今のファイル(function_app.py)にHTTP Triggerのソースコードが追加されました。
デバックすると、関数が2つあることがわかります。
Create New Blueprint fileの場合
blueprint.pyファイルが新たに作成され、そちらのファイルにHTTP Triggerがありました。
blueprint機能というものがあり、この機能を使うと1関数につき1ファイルという感じでファイルを分けられるようです。
blueprintに関する参考記事👇
function_app.pyの方に以下追加と書かれているところを足してあげます。
from blueprint import blueprint # 追加
app = func.FunctionApp()
app.register_functions(blueprint) # 追加
すると、追加したHTTP Triggerも表示されるようになりました。
データを登録するHTTP Trigger
データを登録するコード(一括も可)
Blueprintを使う方法でかきました。
import azure.functions as func
import logging
from azure.cosmos import CosmosClient
import os
blueprint = func.Blueprint()
COSMOS_DATABASE_NAME = ""
COSMOS_CONTAINER_NAME = ""
cosmos_client = CosmosClient.from_connection_string(os.getenv("COSMOS_CONNECTION"))
@blueprint.route(route="data/upload_json", methods=["POST"], auth_level=func.AuthLevel.ANONYMOUS)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
container = cosmos_client.get_database_client(COSMOS_DATABASE_NAME).get_container_client(COSMOS_CONTAINER_NAME)
items = req.get_json()
for item in items:
container.upsert_item(item)
return func.HttpResponse(f"{len(items)} data uploaded.", status_code=200)
Postmanを使って試してみる
HTTP TriggerのURLをPostmanから叩いてみます。
19件登録しました。
Cosmos DBにデータが登録され、そこからインデックスにもデータが追加されました
おわりに
データ追加がかなり便利になりました。
普段pythonでFunctionsを使わないので、Bulueprint機能なるものがあるという学びを得ることができました。