0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

完走賞のQiitanぬいぐるみをお迎えするためにUnityでゲーム作ってみるAdvent Calendar 2023

Day 22

Azure OpenAI Service ワークショップに参加したので復習してみる(データを一括登録するHTTP Trigger)

Posted at

はじめに

前回Azure Open AIによって、ベクター化したデータもインデックスに登録できるようになりました。

前回の記事

この記事でやること

下の図の赤枠のところです。
Cosmos DBにデータを登録するFunctionsを作成します。

今回のFunctionsが完成すると、HTTP Triggerを使ってCosmos DBにデータの登録ができ、そこから前回までに実装したCosmos DB Triggerによってインデックスにデータの登録までができるようになります。

image.png

関数を追加する

現在のフォルダに関数を追加しようとしたところ、3通りの方法があったのでメモです。(試したのは2通り)

Visual Studio CodeのAzure拡張機能から、Fuctions追加ボタンをクリックします。
image.png

追加しようとるすと、追加方法が3通りでてきました。
そのうち上の2つを試しました。
image.png

Add httpTrigger function to an existing fileの場合

今のファイル(function_app.py)にHTTP Triggerのソースコードが追加されました。
image.png

デバックすると、関数が2つあることがわかります。

image.png

Create New Blueprint fileの場合

blueprint.pyファイルが新たに作成され、そちらのファイルにHTTP Triggerがありました。
blueprint機能というものがあり、この機能を使うと1関数につき1ファイルという感じでファイルを分けられるようです。

image.png

blueprintに関する参考記事👇

function_app.pyの方に以下追加と書かれているところを足してあげます。

function_app.py
from blueprint import blueprint # 追加

app = func.FunctionApp()

app.register_functions(blueprint) # 追加

すると、追加したHTTP Triggerも表示されるようになりました。

image.png

データを登録する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件登録しました。

image.png

Cosmos DBにデータが登録され、そこからインデックスにもデータが追加されました

image.png

おわりに

データ追加がかなり便利になりました。
普段pythonでFunctionsを使わないので、Bulueprint機能なるものがあるという学びを得ることができました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?