Setting up your development environment for Databr... - Databricks Community - 122111の翻訳です。
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
この記事はソリューションアーキテクトPascal VogelとシニアソリューションエンジニアAnton Vlasovによって書かれています。
Databricks Appsは、Databricksデータインテリジェンスプラットフォームにおけるセキュアなデータ、AIアプリケーションの構築を容易にします。素晴らしいアプリを構築するには、開発者はパワフルなプラットフォーム以上のものを必要とします - かれらは優れた開発者体験を必要とします。
あなたがノートブックベースの開発から来ているのであれば、モダンなアプリケーション開発者が当然と思う迅速なフィードバックループ、堅牢なデバッグツール、シームレスなデプロイメントを経験していないかもしれません。
この記事では、Databricksプラットフォームのパワーとお好きなローカル統合開発環境(IDE)を用いることによる生産性の両方によって、Databricks Appsの素晴らしい開発者体験のセットアップに関する独自の見解に基づくガイドを提供します。
開発のアンチパターンを理解する
あなたが、PythonベースのWebアプリケーションの開発が初めてであり、Databricksでのデータパイプライン、データサイエンスの実装により慣れ親しんでいるのであれば、DatabricksノートブックやワークスペースファイルのUI、ローカルIDEからDatabricks Connectを使用してアプリを開発し始めたいと思うかもしれません。
しかし、これらのアプローチはアプリの開発に適さないいくつかの欠点があります:
❌ ライブのフィードバックループなし: 変更が動作することを確認するには毎度アプリを再度デプロイする必要があります。
❌ 構文ハイライト、コードのリンティング、型チェック、ユニットテストの限定的なサポート。
❌ Databricks Appsの環境にマッチするようにするための面倒な依存管理。
代わりに、Databricks Appsのアプリケーション開発のベストプラクティスの活用を検討しましょう。
あなたの好きなIDEでローカルに開発
Databricks Appsの構築の際に自損区なフィードバックを得るには、あなたのローカルマシンで開発しましょう。
Databricks Appsの開発にはサービス小ユーのツールは不要なので、Visual Studio Code、PyCharmなどのお好きなIDEで問題なく動作します。CursorやWindsurfのようなAIアシストIDEもDatabricks Appsでは優れた選択肢となります。
Dash、Streamlit、Flaskのような多くのPythonアプリケーションフレームワークの機能はライブでリフレッシュされます。
Streamlitの場合、runOnSave設定オプションをtrueに設定するか、アプリケーションUIで"Always rerun"を有効化するようにしましょう。DashとFlaskは直ぐにライブのリフレッシュが行われます。
オプションとして、拡張機能を用いてIDE開発体験を改善することができます。
Databricks extension for Visual Studio Codeによって、アプリを含むDatabricksプロジェクトにCI/CDのベストプラクティスを適用できるようにするDatabricks Asset Bundles (DABs)の定義、デプロイ、実行が容易となります。さらにこの拡張機能によって、容易にアプリをデプロイできるようにローカルマシンからDatabricksワークスペースファイルにファイルを同期することができます。
開発過程でライブのDatabricksリソースに接続
ほとんどのDatabricks AppsはSQLウェアハウス、モデルサービングエンドポイント、ジョブのようなその他のDatabricksリソースを活用します。アプリをローカルで開発する際には、開発環境のワークスペースで実行されているライブのDatabricksリソースに直接接続することをお勧めします。
こうすることで、モックアップのリソースでは再現が困難な場合のあるライブのAPI定義、レート制限、そのほかの設定に対して常に開発を行うことができます。
OAuth user-to-machine (U2M)認証を用いることで、ローカルで動作しているあなたのアプリは、あなたのパーソナルのDatabricks資格情報を用いてDatabricksリソースにライブでやり取りを行うことができます。
Databricks CLIをインストールして、OAuth U2M認証フローを起動するには以下のコマンドを実行します:
databricks auth login --host <workspace-url> --profile DEFAULT
Databricksのドキュメントでより詳細なセットアップ手順を確認することができます。
このアプローチを活用することで2つのメリットが得られます:
- Databrickパーソナルアクセストークン (PAT)のような長期の資格情報に依存する必要がありません。
- あなたのアプリは、ローカルで実行する際とDatabricks Appsにデプロイされた際にDatabricksリソースとやり取りを行う際に同じコードを使うことできます。
注意
Databricks Appsを開発、デプロイする文脈においては、パーソナルアクセストークンを使う必要のあるシチュエーションは存在しません。常にOAuthが推奨の認証手段となります。
Databricks SQLコネクターを使用する以下のサンプルコードを考えてみましょう。
from databricks import sql
from databricks.sdk.core import Config
cfg = Config()
conn = sql.connect(
server_hostname=cfg.host,
http_path="<your-warehouse-http-path>",
credentials_provider=lambda: cfg.authenticate,
)
query = f"SELECT * FROM main.sandbox.sales_customers LIMIT 1000"
with conn.cursor() as cursor:
cursor.execute(query)
df = cursor.fetchall_arrow().to_pandas()
print(df.head())
conn.close()
このコードは、OAuth U2M認証を用いて認証されるとアプリがローカルで動作しますし、Databricks Appsのサービスプリンシパルの資格情報を用いても動作し、コードの変更は不要です。
同じメカニズムはDatabricks SDKにも適用されます:
import streamlit as st
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import ChatMessage, ChatMessageRole
# Uses "default" Databricks CLI profile when running locally, but service principal credentials when deployed to Databricks Apps
w = WorkspaceClient()
response = w.serving_endpoints.query(
name="databricks-llama-4-maverick",
messages = [
ChatMessage(
role=ChatMessageRole.SYSTEM,
content="You are a helpful assistant."
),
ChatMessage(
role=ChatMessageRole.USER,
content="What is Databricks?",
),
]
)
st.json(response.as_dict())
環境のセットアップと依存関係の管理
Databricksワークスペースでは、あなたのDatabricksアプリは特定のPythonバージョン(現在は3.11.12)と一連のPythonパッケージが事前インストールされたサーバレスコンピュート環境にデプロイされます。Databricks Appsドキュメントの事前インストールのPythonライブラリで事前インストールされるパッケージの詳細なリストを確認することができます。
ローカルで開発する際には、Python仮想環境を作成し、アプリケーションが必要とするすべてのパッケージをインストールしましょう。
仮想環境と依存関係の管理にはuvを使うことをお勧めします。
Databricksアプリをデプロイする際、サービスはあなたのアプリケーションのルートディレクトリにあるrequirements.txt
ファイルを検索し、そこにリストされているすべてのパッケージをインストールします。追加のパッケージをインストールしたり、事前インストールされているパッケージのバージョンを調整するためにrequirements.txt
を使うことができます。詳細はDatabricksアプリの依存関係の管理をご覧ください。
つまり、デプロイするアプリを準備する際には、requirements.txt
ファイルにすべての依存関係のリストをエクスポートします。uvを用いた例は:
uv export --no-annotate --no-hashes --format requirements-txt > requirements.txt
インストールされたパッケージ、Pythonのバージョン、アクティブな環境変数を確認するにはDatabricks Apps UIのEnvironmentタブにアクセスしてください。
run-localコマンドでローカルのアプリ開発をシンプルに
Databricks CLIでは、依存管理、デバッグ、HTTPヘッダーのシミュレーションをシンプルにし、Databricks Appsサービスと同じ設定(app.yaml
とrequirements.txt
)を用いて環境変数をインジェクションするrun-localコマンドが提供されています。
このコマンドは、以下に対応することでローカルの開発環境をオーケストレートします:
設定管理: このコマンドは、アプリの起動方法と設定されている環境変数を特定するために、あなたのapp.yaml
ファイルを読みこいます。--entrypoint
フラグを用いることで別の設定ファイル(デバッグのシナリオにおけるapp-debug.yml
など)を指定することもできます。
HTTPヘッダーのシミュレーション: あなたのアプリがデプロイされた際に通常受け取るDatabricks固有のヘッダー(X-*
のプレフィクス)をインジェクトしながらリクエストをあなたのアプリにフォワードするために、軽量のプロキシーがローカルで稼働します。これには、あなたの認証コンテキストを含むX-Forwarded-User
とX-Forwarded-Email
が含まれます。
プロセス管理と認証: このコマンドは、app.yaml
ファイルで定義されている起動コマンドを実行し、自動で認証セットアップに対応し、ローカルとライブのDatabricks環境間でコードの変更なしに、あなたのパーソナルの資格情報を用いて、あなたのローカルのアプリがシームレスにライブのDatabricksリソース(SQLウェアハウスやモデルサービングエンドポイントなど)に接続できるようにします。
あなたのアプリケーションのルートディレクトリでコマンドを実行します:
databricks apps run-local
ローカルで実行する際にカスタムのエントリーポイントを指定するには:
databricks apps run-local --entry-point app-debug.yaml
Databricksアプリをデプロイする際には、app.yamlファイルで定義されているすべての環境変数がDatabricks Apps環境にインジェクトされます。同様に、run-ocalコマンドはローカルで実行される際にあなたのapp.yaml
のすべての環境変数を自動で抽出します。
お使いのapp.yaml
の環境変数を上書きしたり、追加の環境変数をインジェクトするには:
databricks apps run-local --env DB_HOST=localhost
利用できるrun-localのオプションについて詳細を知りたいのであれば以下のコマンドを実行しましょう:
da[uv](https://docs.astral.sh/uv/)tabricks apps run-local --h
run-localは内部ではuvとdebugpyを使っています。
Databricks Appsのデプロイ
開発過程で、テストするためにライブの開発ワークスペースにアプリをデプロイしたくなるかもしれません。
アプリケーションをデプロイするには、Databricks AppsサービスはDatabricksワークスペースファイルのフォルダからアプリケーションコードを取得します。
ワークスペースファイルフォルダにローカルのアプリケーションコードをコピーするうには、Databricks CLIの以下のコマンドを実行することができます:
databricks sync . /Workspace/Users/user@example.com/my-app
Databricksワークスペースとローカルのディレクトリの同期を継続的に維持するには--sync
オプションを追加します。このsyncコマンドは.gitignore
ファイルがある場合には、そのファイルに基づいてファイルを除外します。詳細はsync コマンドをご覧ください。
ファイルがアップロードされたら、アプリのリソースを作成し、アプリをデプロイします:
# Run once to create the app compute resource
databricks apps create my-app
# Run for each deployment
databricks apps deploy my-app --source-code-path /Workspace/Users/user@example.com/my-app
あるいは、databricks bundle deploy
やdatabricks bundle run
コマンドを用いて、ローカルマシンから異なるDatabricks環境にアプリをデプロイするために、Databricks Asset Bundles (DABs)を使うこともできます。
詳細な手順に関しては、Databricks アセットバンドルを使用した Databricks アプリの管理をご覧ください。
DABsを用いたDatabricks Appsの完全なCI/CDパイプラインのセットアップに関しては、Automate your Databricks Apps deployments with GitHub Actions and Databricks Asset Bundlesをご覧ください。
まとめ
素晴らしいDatabricks Appsの構築は、素晴らしい開発者体験からスタートします。お好きなIDEでローカルに開発し、ライブのリソースに接続するためにOAuth U2M認証を用い、databricks apps run-local,のようなツールを活用することで、モダンな開発が要求する迅速なフィードバックループやシームレスなデプロイメントを達成することができます。
このセットアップによってあなたは最も重要なことにフォーカスすることができます - Databricksプラットフォーム上におけるパワフルなデータとAIアプリケーションの構築です。