Поделиться через


Управление приложениями Databricks с помощью пакетов ресурсов Databricks

Приложения Databricks позволяют создавать безопасные данные и приложения ИИ на платформе Databricks, которую можно легко предоставлять пользователям. Вы можете управлять развертываниями приложений с помощью пакетов ресурсов Databricks. Дополнительные сведения о приложениях и пакетах см. в разделе "Приложения Databricks " и "Что такое пакеты ресурсов 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, а затем синхронизировать файлы с локальным компьютером или получить пример приложения Databricks из GitHub.

  • Чтобы создать приложение с нуля:

    1. Следуйте краткому руководству по началу работы для платформы:

    2. Добавьте файл app.yaml в корневой каталог вашего проекта, чтобы задать параметры для запуска вашего основного Python-приложения. Рассмотрим пример.

      Для приложения Streamlit:

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

      Или для приложения Dash:

      command: ['python', 'app.py']
      
  • Чтобы создать приложение в рабочей области и синхронизировать его локально:

    1. Выполните действия, описанные в статье "Начало работы с Databricks Apps" , чтобы создать приложение в пользовательском интерфейсе.

    2. Создайте локальный каталог для приложения и перейдите в него:

      mkdir hello-world-app
      cd hello-world-app
      
    3. Синхронизация файлов приложения локально. Вы можете скопировать 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 на вашем локальном компьютере.

  • Чтобы получить пример приложения Databricks из GitHub, выполните приведенные ниже действия.

    1. Клонируйте репозиторий GitHub шаблонов приложений Databricks:

      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 generate и databricks 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 определяет папку с файлом databricks.yml в корневом каталоге как bандл, что позволяет использовать команды databricks bundle.

  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. Развертывание пакета не приводит к автоматическому развертыванию приложения на вычислительном ресурсе. Чтобы развернуть приложение, используйте пользовательский интерфейс (на странице приложения в рабочей области Databricks) или интерфейс командной строки Databricks (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
    

Разрабатывать, тестировать, итерациировать

Продолжайте вносить изменения в приложение локально, а затем повторно разверните пакет, чтобы обновить приложение в рабочей области. Чтобы запустить приложение в рабочей области, запустите приложение в пакете, указав ключ ресурса для приложения в команде:

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

Дополнительные ресурсы