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 工作區和本機開發環境必須符合 Databricks Apps 的需求。 請參閱 設定 Databricks Apps 工作區和開發環境。
- Databricks CLI 0.250.0 版或更新版本。 若要檢查您已安裝的 Databricks CLI 版本,請執行命令
databricks -v。 若要安裝 Databricks CLI,請參閱安裝或更新 Databricks CLI。
在本機建立應用程式
首先,建立 Databricks 應用程式。 應用程式是使用熱門架構在 Python 中開發,例如 Dash 或 Gradio。 您可以從頭開始在本機建置 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 調試程式,然後選取 [ 執行>開始 偵錯],然後選取 [ 遠端附加]。
Proxy 會在埠 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
開發、測試、反覆
繼續在本機變更您的應用程式,然後重新部署套件組合以更新工作區中的應用程式。 若要在工作區中啟動應用程式,請在命令中指定應用程式的資源金鑰,以在套件組合中執行應用程式:
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