Databricks Apps を使用すると、ユーザーと簡単に共有できる Databricks プラットフォーム上にセキュリティで保護されたデータと AI アプリケーションを作成できます。 Databricks アセット バンドルを使用して、アプリのデプロイを管理できます。 アプリとバンドルの詳細については、「 Databricks アプリ 」と「 Databricks アセット バンドルとは」を参照してください。
この記事では、Databricks アプリをローカルで開発した後、Databricks アセット バンドルを使用して Databricks ワークスペースへのアプリのデプロイを管理するようにバンドルを構成する手順について説明します。
ヒント
Streamlit アプリでバンドルの例を初期化するには、 bundle init コマンドで streamlit-app バンドル テンプレートを使用します。
databricks bundle init https://github.com/databricks/bundle-examples --template-dir contrib/templates/streamlit-app
要求事項
- Databricks ワークスペースとローカル開発環境は、Databricks Apps の要件を満たしている必要があります。 Databricks Apps ワークスペースと開発環境を設定するを参照してください。
- Databricks CLI バージョン 0.250.0 以降。 お使いのインストールされている Databricks CLI のバージョンをチェックするには、
databricks -vコマンドを実行します。 Databricks CLI をインストールするには、「Databricks CLI のインストールまたは更新」を参照してください。
アプリをローカルに作成する
まず、Databricks アプリを作成します。 アプリは、Dash や Gradio などの一般的なフレームワークを使用して Python で開発されています。 Databricks アプリを最初からローカルにビルドし、Databricks ワークスペースに作成してから、ローカル コンピューターにファイルを同期するか、GitHub から Databricks サンプル アプリを取得できます。
アプリを最初からビルドするには:
ワークスペースにアプリを作成し、ローカルで同期するには:
「Databricks Apps の概要」の手順に従って、UI でアプリを作成します。
アプリのローカル ディレクトリを作成し、それに
cdします。mkdir hello-world-app cd hello-world-appアプリ ファイルをローカルで同期します。 ワークスペース UI のアプリ のインストール ページから
databricks workspace export-dirコマンドをコピーし、コマンド ラインで実行できます。 例えば次が挙げられます。databricks workspace export-dir /Workspace/Users/someone@example.com/databricks_apps/hello-world_2025_05_09-17_43/hello-world-app .これにより、ワークスペース ディレクトリ内のアプリ ファイルがローカル コンピューター上の
hello-world-appディレクトリにダウンロードされます。
GitHub から Databricks サンプル アプリを取得するには:
Databricks アプリ テンプレートの GitHub リポジトリを複製します。
git clone https://github.com/databricks/app-templates単純なアプリ プロジェクトとしてサンプル アプリのいずれかを選択します。
既存のアプリを既存のバンドルに追加する
ワークスペースに Databricks アプリがあり、アプリを追加する既存のバンドルがある場合は、 databricks bundle generate app コマンドを使用できます。 このコマンドは、アプリの構成ファイルを生成し、アプリのすべてのソース コード ファイルをダウンロードし、これらをバンドルに追加します。 例えば次が挙げられます。
databricks bundle generate app --existing-app-name hello-world-app
バンドルでアプリ構成を生成したら、 databricks bundle bind コマンドを使用して、アプリをワークスペースに保持し、バンドルを同期します。
databricks bundle generateとdatabricks bundle bindの詳細については、コマンド グループbundle参照してください。
アプリをローカルで開発およびデバッグする
次に、アプリをローカルで開発し続けます。
databricks apps run-local コマンドを使用して、アプリを起動してデバッグします。 このコマンドは、アプリ自体に要求をプロキシするために使用されるアプリ プロキシを起動し、必要な Databricks アプリ関連のヘッダーを挿入します。
すべての依存関係をインストールし、仮想環境を準備し、アプリとデバッガーを起動するには、
run-localオプションと--prepare-environmentオプションを指定して--debugコマンドを使用します。databricks apps run-local --prepare-environment --debugこのコマンドでは、
uvを使用して仮想環境を準備します。デバッガーはdebugpyに基づいています。http://localhost:8001に移動してアプリを表示します。ブレークポイントを設定してアプリをデバッグします。 Visual Studio Code で Python デバッガーをインストールし、[実行]、[>リモートアタッチ] の順に選択します。
プロキシはポート 5678 で開始されますが、
--portオプションを使用して構成できます。
ワークスペースにアプリをデプロイする
アプリをワークスペースにデプロイする準備ができたら、アプリを作成するバンドル構成を追加してから、バンドルをデプロイします。
アプリ プロジェクトのルートにファイル
databricks.ymlを作成します。 Databricks CLI は、ルートにdatabricks.ymlファイルを含むフォルダーをバンドルとして認識します。これにより、 databricks バンドル コマンドが有効になります。次の YAML をコピーして
databricks.ymlファイルに貼り付けます。プレースホルダー ワークスペースとユーザー名の値は、実際の値に置き換えてください。bundle: name: hello_world_bundle resources: apps: hello_world_app: name: 'hello-world-app' source_code_path: . # This assumes the app source code is at the root of the project. description: 'A Databricks app' targets: dev: mode: development default: true workspace: host: https://myworkspace.cloud.databricks.com prod: mode: production workspace: host: https://myworkspace.cloud.databricks.com root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target} permissions: - user_name: someone@example.com level: CAN_MANAGE検証してから、バンドルをデプロイします。 既定では、ワークスペースの
devターゲットにアプリとバンドルが作成されます。databricks bundle validate databricks bundle deployバンドルをデプロイしても、アプリはコンピューティングに自動的にデプロイされません。 アプリをデプロイするには、UI (Databricks ワークスペースのアプリのページから) または Databricks CLI (
databricks apps deploy) を使用します。 Databricks アプリのデプロイを参照してください。bundle summaryコマンドを使用して、デプロイされたアプリに関する情報を取得します。databricks bundle summaryName: hello_world_bundle Target: dev Workspace: Host: https://myworkspace.cloud.databricks.com User: someone@example.com Path: /Workspace/Users/someone@example.com/.bundle/hello_world_bundle/dev Resources: Apps: hello_world_app: Name: hello-world-app URL: https://myworkspace.cloud.databricks.com/apps/hello-world-app?o=8498204313176880
開発、テスト、反復処理
引き続きローカルでアプリに変更を加え、バンドルを再デプロイしてワークスペース内のアプリを更新します。 テスト中に、Azure Databricks ワークスペース内の他のユーザーに対してアプリの使用アクセス許可を構成できます。これは、 アクセス許可を指定することで行うことができます。
resources:
apps:
hello_world_app:
name: 'hello-world-app'
source_code_path: . # This assumes the app source code is at the root of the project.
description: 'A Databricks app'
permissions:
- level: CAN_USE
group_name: users
ワークスペースでアプリを開始するには、コマンドでアプリのリソース キーを指定して、バンドルでアプリを実行します。
databricks bundle run hello_world_app
運用環境にデプロイする
Databricks では、運用環境での認証にサービス プリンシパルを使用することをお勧めします。 運用環境でアプリを使用できるようにする準備ができたら、サービス プリンシパルを使用するようにバンドル構成を更新してから、ターゲットの運用ワークスペースにバンドルをデプロイします。 サービス プリンシパルの詳細については、「 CI/CD のサービス プリンシパル」を参照してください。
サービス プリンシパルを使用するようにバンドルを変更する
運用環境にデプロイする前に、サービス プリンシパルにアクセス許可を付与する 許可 をバンドルで構成します。 許可は、アプリの作成時またはバンドルの実行時に構成できます。
バンドルのデプロイ時にアプリが作成されたときにサービス プリンシパルのアクセス許可を付与するには、バンドルの databricks.yml を変更してアプリの許可を定義します。 バンドルの置換を使用して、サービス プリンシパルを割り当てます。
bundle:
name: hello_world_bundle
resources:
apps:
hello_world_app:
name: 'hello-world-app'
source_code_path: . # This assumes the app source code is at the root of the project.
description: 'A Databricks app'
schemas:
my_schema:
name: my_schema
grants:
# highlight-next-line
- principal: '${resources.apps.hello_world_app.service_principal_client_id}'
privileges:
- CREATE_TABLE
catalog_name: main
targets:
dev:
mode: development
default: true
workspace:
host: https://myworkspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://myworkspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE
または、バンドルの実行時に許可を構成するジョブをバンドルで定義します。
セルに次の内容を含む
grant_notebook.ipynbというノートブックを追加します。<schema-name>を管理者ユーザー名に置き換えます。app_service_principal = dbutils.widgets.get("app_service_principal") spark.sql(f"GRANT ALL PRIVILEGES ON SCHEMA <schema-name> TO `{app_service_principal}`")サービス プリンシパルにアクセス許可を付与するノートブックを実行するジョブをバンドルの
databricks.ymlで定義します。 バンドルの置換を使用して、サービス プリンシパルの値を割り当てます。bundle: name: hello_world_bundle resources: apps: hello_world_app: name: 'hello-world-app' source_code_path: . # This assumes the app source code is at the root of the project. description: 'A Databricks app' jobs: grant_job: name: 'grant-job' parameters: - name: app_service_principal # highlight-next-line default: '${resources.apps.hello_world_app.service_principal_client_id}' tasks: - task_key: setup_grants notebook_task: notebook_path: ./grant_notebook.ipynb targets: dev: mode: development default: true workspace: host: https://myworkspace.cloud.databricks.com prod: mode: production workspace: host: https://myworkspace.cloud.databricks.com root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target} permissions: - user_name: someone@example.com level: CAN_MANAGE
更新されたバンドルをデプロイする
次に、バンドルを運用ワークスペースにデプロイし、アプリを実行します。
databricks bundle deploy -t prod
databricks bundle run grant_job -t prod # (Optional) Run this if the grant is configured with a job
databricks bundle run hello_world_app -t prod