次の方法で共有


Databricks アセット バンドルを使用して Databricks アプリを管理する

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 アプリを作成します。 アプリは、Dash や Gradio などの一般的なフレームワークを使用して Python で開発されています。 Databricks アプリを最初からローカルにビルドし、Databricks ワークスペースに作成してから、ローカル コンピューターにファイルを同期するか、GitHub から Databricks サンプル アプリを取得できます。

  • アプリを最初からビルドするには:

    1. フレームワークのクイック スタート チュートリアルに従います。

    2. app.yaml ファイルをプロジェクトのルートに追加して、メインの Python アプリを実行する方法を定義します。 例えば次が挙げられます。

      Streamlit アプリの場合:

      command: ['streamlit', 'run', 'app.py']
      

      または、Dash アプリの場合:

      command: ['python', 'app.py']
      
  • ワークスペースにアプリを作成し、ローカルで同期するには:

    1. 「Databricks Apps の概要」の手順に従って、UI でアプリを作成します。

    2. アプリのローカル ディレクトリを作成し、それに cd します。

      mkdir hello-world-app
      cd hello-world-app
      
    3. アプリ ファイルをローカルで同期します。 ワークスペース 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 サンプル アプリを取得するには:

    1. Databricks アプリ テンプレートの GitHub リポジトリを複製します。

      git clone https://github.com/databricks/app-templates
      
    2. 単純なアプリ プロジェクトとしてサンプル アプリのいずれかを選択します。

既存のアプリを既存のバンドルに追加する

ワークスペースに Databricks アプリがあり、アプリを追加する既存のバンドルがある場合は、 databricks bundle generate app コマンドを使用できます。 このコマンドは、アプリの構成ファイルを生成し、アプリのすべてのソース コード ファイルをダウンロードし、これらをバンドルに追加します。 例えば次が挙げられます。

databricks bundle generate app --existing-app-name hello-world-app

バンドルでアプリ構成を生成したら、 databricks bundle bind コマンドを使用して、アプリをワークスペースに保持し、バンドルを同期します。

databricks bundle generatedatabricks bundle bindの詳細については、コマンド グループbundle参照してください。

アプリをローカルで開発およびデバッグする

次に、アプリをローカルで開発し続けます。 databricks apps run-local コマンドを使用して、アプリを起動してデバッグします。 このコマンドは、アプリ自体に要求をプロキシするために使用されるアプリ プロキシを起動し、必要な Databricks アプリ関連のヘッダーを挿入します。

  1. すべての依存関係をインストールし、仮想環境を準備し、アプリとデバッガーを起動するには、run-localオプションと--prepare-environment オプションを指定して --debug コマンドを使用します。

    databricks apps run-local --prepare-environment --debug
    

    このコマンドでは、 uv を使用して仮想環境を準備します。デバッガーは debugpyに基づいています。

  2. http://localhost:8001に移動してアプリを表示します。

  3. ブレークポイントを設定してアプリをデバッグします。 Visual Studio Code で Python デバッガーをインストールし、[実行]、[>リモートアタッチ] の順に選択します。

    プロキシはポート 5678 で開始されますが、 --port オプションを使用して構成できます。

ワークスペースにアプリをデプロイする

アプリをワークスペースにデプロイする準備ができたら、アプリを作成するバンドル構成を追加してから、バンドルをデプロイします。

  1. アプリ プロジェクトのルートにファイル databricks.yml を作成します。 Databricks CLI は、ルートに databricks.yml ファイルを含むフォルダーをバンドルとして認識します。これにより、 databricks バンドル コマンドが有効になります。

  2. 次の 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
    
  3. 検証してから、バンドルをデプロイします。 既定では、ワークスペースの dev ターゲットにアプリとバンドルが作成されます。

    databricks bundle validate
    databricks bundle deploy
    
  4. バンドルをデプロイしても、アプリはコンピューティングに自動的にデプロイされません。 アプリをデプロイするには、UI (Databricks ワークスペースのアプリのページから) または Databricks CLI (databricks apps deploy) を使用します。 Databricks アプリのデプロイを参照してください。

  5. bundle summary コマンドを使用して、デプロイされたアプリに関する情報を取得します。

    databricks bundle summary
    
    Name: 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

または、バンドルの実行時に許可を構成するジョブをバンドルで定義します。

  1. セルに次の内容を含む 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}`")
    
  2. サービス プリンシパルにアクセス許可を付与するノートブックを実行するジョブをバンドルの 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

その他のリソース