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?

Databricks Apps でカスタムアプリのデプロイ

Posted at

はじめに

Databricks Apps でDashやFlask, Streamlitなどテンプレートが提供されていないライブラリ(今回はFastAPI)を使用したカスタムアプリをデプロイする方法を検証します。

前段

Azure DatabricksでDatabrics Appsを検証するための環境構築

前提環境

以下Databricks Appsのシステム環境に準じます。
Databricks Apps System Environment

  • Ubuntu 22.04 LTS
  • Python 3.11
  • FastAPI 0.115.6 (Databricks Appsのデフォルトバージョンではなく、後述する手順でインストールします)

カスタムアプリのデプロイ

カスタムアプリの作成

カスタムアプリに必要なファイルは以下の通りです。

  • アプリケーションコード(今回はFastAPIで作成したapp.py)
  • requirements.txt
    • アプリケーションで使用するライブラリを記載する

今回はFlaskのサンプルで使用されていたgunicornによる起動コマンドと同等の起動をするためFastAPI, uvicornとgunicornを組み合わせた構成とします。

アプリケーションコードの作成

サンプルAPIを含むapp.pyは以下の通りです。

app.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
  • FastAPI インスタンスを作成します。これがアプリケーションの中心となり、ルーティングやリクエストの処理が行われます。
  • @app.get("/") デコレーターは、ルートエンドポイント(/)へのGETリクエストを処理するためのものです。この関数が呼び出されると、{"Hello": "World"} というJSONレスポンスを返します。
  • @app.get("/items/{item_id}") デコレーターは、パスパラメータitem_idを持つエンドポイントへのGETリクエストを処理します。オプショナルなクエリパラメータqも受け取ることができます。この関数は、受け取ったitem_idqを含むJSONオブジェクトを返します。
  • 最後のブロックでは、アプリケーションが直接実行された場合(__name__ == "__main__")、uvicornを使用してサーバーを起動します。host="0.0.0.0"はすべてのインターフェースでサーバーを利用可能にし、port=8000でリッスンします。

requirements.txtの作成

requirements.txtは以下の通りです。

requirements.txt

fastapi==0.115.6
uvicorn[standard]==0.34.0
gunicorn==23.0.0
  • uvicorn[standard]==0.34.0: Uvicornは、FastAPIが内部で使用するASGIサーバーです。非同期プログラミングをサポートし、高速なパフォーマンスを提供します。[standard]は、標準的な依存関係(例えば、Websocketsのサポート)を含むバージョンを指定します。
  • gunicorn==23.0.0: Gunicornは、PythonのWSGI HTTPサーバーで、UNIXシステム上でのデプロイに適しています。Uvicornと組み合わせて使用することで、より堅牢な本番環境を構築することができます。

ローカル動作確認

ローカルで動作確認を行います。

以下コマンドでライブラリのインストールとアプリケーションの起動を行います。

pip install -r requirements.txt
gunicorn main:app -k uvicorn.workers.UvicornWorker -w 1

正常に起動したら、curl http://localhost:8000/でアクセスしてみます。

curl http://localhost:8000/
# {"Hello": "World"}
curl http://localhost:8000/items/1?q=hoge
# {"item_id": 1, "q": "hoge}

正常にアクセスできたら、ローカルでの動作確認は完了です。

Databricks Appsへのデプロイ

Databricks Appsにカスタムアプリをデプロイするためには最低限以下の3つのファイルが必要です。

  • アプリケーションコード(今回はFastAPIで作成したapp.py)
  • requirements.txt
  • app.yaml
    • アプリケーションの設定(起動コマンド、環境変数)を記載する

デプロイ用のファイルの作成

Databricks Appsにデプロイ時の起動コマンドや環境変数を設定するためのファイルがapp.yamlです。(今回はgunicornによる起動コマンドのみ記載)

app.yamlの設定の書き方は
Databricks Apps Configuration
を参照してください。

app.yamlは以下の通りです。

app.yaml

command: [
  "gunicorn",
  "main:app",
  "-k",
  "uvicorn.workers.UvicornWorker",
  "-w",
  "4",
]
  • command: アプリケーションの起動コマンドを指定します。この例では、gunicornコマンドを使用してFastAPIアプリケーションを起動します。****

Databricks Appsへのデプロイ

Databricks Appsへのデプロイはファイルアップロードとデプロイの2ステップで行います。

ファイルアップロード

databricks sync --watch . /Workspace/Users/<username>/<app_name>

デプロイ

databricks apps deploy <app_name> --source-code-path /Workspace/Users/<username>/<app_name>

デプロイが完了したら、Databricks Appsのページから払い出されたURLにアクセスしてみます。

curl https://<app_name>-XXX.databricksapps.com/
# {"Hello": "World"}
curl https://<app_name>-XXX.databricksapps.com/items/1?q=hoge
# {"item_id": 1, "q": "hoge}

正常にアクセスできたら、デプロイは完了です。

まとめ

Databricks AppsにFastAPIを使用したカスタムアプリをデプロイする方法について説明しました。主なステップは以下の通りです:

  • アプリケーションコードの作成
  • requirements.txtの作成
  • app.yamlの作成
  • Databricksへのファイルアップロード
  • Databricks Appsへデプロイ

この手順に従うことで、Databricks AppsにFastAPIを使用したカスタムアプリをデプロイすることができます。

参考

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?