NoSQLデータベースを使用して高速APIアプリケーションを起動する方法

0 株式
0
0
0
0

導入

Pythonアプリケーションを開発する際、FastAPIは高性能ソリューションを構築するための最良の選択肢として際立っています。高速性、シンプルさ、そして非同期プログラミングのサポートを提供するため、最新かつスケーラブルなアプリケーションの開発に最適です。このチュートリアルでは、NoSQLデータベースを使用してFastAPIアプリケーションをセットアップする手順を説明します。データの保存と管理において、NoSQLデータベースは柔軟性とスケーラビリティに優れているため、多様で複雑なデータ構造を管理する必要があるアプリケーションに最適です。.

前提条件
  • sudo 権限を持つ非 root ユーザーとアクティブなファイアウォールを使用して Ubuntu を実行しているサーバー。 .
  • Linuxコマンドライン入門
  • Ubuntu ターミナルで sudo apt-get update を実行し、システムに設定されているリポジトリで利用可能なソフトウェアの最新バージョンとセキュリティ更新がシステムにあることを確認します。.

これらの手順は、Ubuntu 24.04、Ubuntu 22.04、Ubuntu 20.04 の最新リリースに適用されます。Ubuntu バージョン 18.04 以前をご利用の場合は、Ubuntu がこれらのバージョンをサポートしていないため、最新バージョンへのアップグレードをお勧めします。.

ステップ1 – マシンにPython環境をセットアップする

このチュートリアルでは、コマンドを実行するためにpython3パッケージを使用します。Ubuntuの最新バージョンにはPython 3がインストールされているため、インストールを確認するには次のコマンドを実行してください。

python3 --version

エラーが再発する場合は、次のコマンドを実行してパッケージをインストール/再インストールできます。

sudo apt-get install python3

次に、Python パッケージとその依存関係を安全にインストールするには、pip をインストールする必要があります。.

sudo apt-get install python3-pip

ステップ2 – 仮想環境を作成する

Ubuntu バージョン 24.04 未満を使用している場合は、仮想環境を作成する必要はありませんが、プロジェクトの依存関係を分離することをお勧めします。.

Python 3.11 および pip 22.3 以降では、Python ベース環境を「外部管理」としてマークする必要があることを規定した新しい PEP 668 が導入されました。つまり、仮想環境で作業していない限り、pip を使用してパッケージを正常にインストールすることはできません。.

このステップでは、プロジェクトの依存関係を分離し、異なるパッケージバージョン間の潜在的な競合を回避するための仮想環境をプロジェクト用に作成します。ターミナルで以下のコマンドを実行してください。

sudo apt-get install python3-venv

これにより、仮想環境を作成するために必要な venv パッケージがインストールされます。.

python3 -m venv fastapi-env

このコマンドは、作業ディレクトリに仮想環境 fastapi-env を作成します。この環境で作業を開始するには、有効化する必要があります。.

source fastapi-env/bin/activate

実行が成功すると、次のようにターミナルプレフィックスが表示されます。

(fastapi-env) user@machine:~$

これで、この仮想環境内で必要な依存関係のインストールを開始できます。.

ステップ3 – 必要なライブラリとパッケージをインストールする

この手順では、このチュートリアルを正常に実行するために必要ないくつかのパッケージとライブラリをインストールします。.

まず、FastAPI アプリケーションの構築に必要な fastapi と、FastAPI アプリケーションの実行に必要な uvicorn をインストールしましょう。.

pip install fastapi uvicorn

このチュートリアルでは、MongoDBをNoSQLデータベースとして使用します。FastAPIからMongoDBを操作するには、MongoDB用の非同期Pythonドライバーであるエンジンをインストールする必要があります。.

pip install motor

ステップ4 – UbuntuにMongoDBをインストールしてセットアップする

Ubuntu マシンに MongoDB をインストールするには、ターミナルで次のコマンド セットを実行します。

wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

実行が成功すると、このパラメータはechoを返します。さあ、早速実行してみましょう。

sudo apt-get update

これにより、MongoDB キーを設定すると、最新のアップデートが確実に取得されます。.

次に、MongoDB をインストールするために必要な openssl 依存関係をシステムにインストールする必要があります。.

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

実行時にサービスの再起動を求められます。再起動後、以下のコマンドでMongoDBをインストールしてください。

sudo apt-get install -y mongodb

MongoDB サービスを起動して有効にします。

sudo systemctl start mongod
sudo systemctl enable mongod

次のコマンドを実行すると、MongoDB サービスのステータスを確認し、接続をテストできます。

sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'

ステップ5 – FastAPIアプリケーションを作成する

次のステップは、FastAPIアプリケーションを作成することです。作業フォルダにdatabase.pyファイルを作成します。

nano database.py

空のテキストエディタが開きます。ここにデータベース接続ロジックを記述してください。.

from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
client = AsyncIOMotorClient(MONGO_DETAILS)
db = client.mydatabase
collection = db.mycollection

mydatabase コレクションにデータが既に入力されていると仮定し、アプリケーションロジックを格納する main.py を作成します。以下の FastAPI アプリケーションでは、AI 予測用の database.py パスを使用してデータベース接続が定義されています。これらのパスを使用して、入力が検証されます。.

nano main.py

テキスト エディターで、次のロジックを記述します。

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection
app = FastAPI()
# simple dataset and model
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegressions()
model.fit(x, y)
# define the Pydantic model for input validation
class InputData(BaseModel):
feature: float
# route_1 for predicting the output based on input feature
@app.post("/predict/")
async def predict(input_data: InputData):
try:
prediction = model.predict([[input_data.feature]])
return {"prediction": prediction[0]}
except Exception as ex:
raise HTTPException(status_code=400, detail=str(ex))
# route_2 to interact with MongoDB
@app.get("/items/")
async def get_item():
items = []
async for item in collection.find():
items.append(item)
return items
# route_3 to add a new item to MongoDB
@app.post("/items/")
async def create_item(item: dict):
new_item = await collection.insert_one(item)
created_item = await collection.fine_one({"_id": new_item.inserted_id})
return created_item

このプログラムが行う内容の概要は次のとおりです。

  • sklearn の線形回帰モデル: このモデルは、入力機能に基づいて出力を予測します。.
  • Pydanticモデルからの入力データ:この構造体は、予測エンドポイントの期待入力を定義します。この場合は浮動小数点数です。.
  • Pydanticモデルからの入力データ:予測エンドポイントの期待入力を定義します。この場合は浮動小数点数です。.

ステップ6 – FastAPIアプリケーションを実行する

このプログラムを正常に実行するには、プログラムで使用されるライブラリとパッケージをインストールする必要があります。.

pip install pydantic scikit-learn numpy

次のコマンドを使用してこのプログラムを実行します。

uvicorn main:app --reload

このコマンドの出力は次のようになります。

Output
INFO: Will watch for changes in these directories: ['/path/to/your/project']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [XXXXX] using statreload
INFO: Started server process [XXXXX]
INFO: Waiting for application startup.
INFO: Application startup complete.

FastAPIはSwagger UIを使用してインタラクティブなAPIドキュメントを自動生成しました。http://127.0.0.1:8000/docs にアクセスしてアクセスできます。.

curl や Postman などのツールを使用して、入力に基づいて値を予測するエンドポイントを呼び出すことができます。.

curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'

ステップ7 [オプション] – Docker Composeを使用してアプリケーションを実行する

アプリケーションをコンテナ化し、docker-compose を使用して実行できます。アプリケーションをコンテナ化すると、デプロイプロセスが簡素化され、アプリケーションのデプロイ、スケーリング、メンテナンスが容易になります。.

結果

このチュートリアルでは、MongoDB を使用して FastAPI アプリケーションを正常に起動し、入力予測を保存および取得できるシンプルな AI ベースのアプリケーションを作成する方法を学習しました。.

FastAPI と NoSQL データベースの組み合わせにより、AI を活用したアプリケーションの構築と拡張のための強力で柔軟な環境が提供されます。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない