共用方式為


使用 Databricks 資產包管理 Databricks 應用程式

Databricks Apps 可讓您在 Databricks 平臺上建立安全的數據和 AI 應用程式,讓您可以輕鬆地與用戶共用。 您可以使用 Databricks 資產套件組合來管理應用程式的部署。 如需應用程式和套件組合的詳細資訊,請參閱 Databricks Apps什麼是 Databricks 資產套件組合?

本文會逐步引導您在本機開發 Databricks 應用程式,然後使用 Databricks 資產套件組合來設定套件組合來管理應用程式部署至 Databricks 工作區。

小提示

若要使用 Streamlit 應用程式初始化範例套件組合,請使用 streamlit-app 套件組合範本搭配 bundle init 命令:

databricks bundle init https://github.com/databricks/bundle-examples --template-dir contrib/templates/streamlit-app

需求

在本機建立應用程式

首先,建立 Databricks 應用程式。 應用程式是使用熱門架構在 Python 中開發,例如 Dash 或 Gradio。 您可以從頭開始在本機建置 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 調試程式,然後選取 [ 執行>開始 偵錯],然後選取 [ 遠端附加]。

    Proxy 會在埠 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

其他資源