Настройка декларативных пакетов автоматизации

В этой статье описывается синтаксис файлов конфигурации пакета, определяющих декларативные пакеты автоматизации (ранее известные как пакеты ресурсов Databricks). См. сведения о декларативных пакетах автоматизации?

Сведения о создании и работе с пакетами см. в статье "Разработка декларативных пакетов автоматизации".

Справочник по конфигурации пакета см. в справочнике по конфигурации.

databricks.yml

Пакет должен содержать один (и только один) файл конфигурации с именем databricks.yml в корне папки проекта пакета. databricks.yml — это основной файл конфигурации, определяющий пакет, но он может ссылаться на другие файлы конфигурации, такие как файлы конфигурации ресурсов, в сопоставлении include . Конфигурация пакета выражается в YAML. Дополнительные сведения о YAML см. в официальной спецификации YAML.

Самый простой databricks.yml определяет имя пакета, которое является обязательным сопоставлением верхнего уровня и целевым развертыванием.

bundle:
  name: my_bundle

targets:
  dev:
    default: true

Дополнительные сведения обо всех сопоставлениях верхнего уровня см. в справочнике по конфигурации.

Совет

Поддержка Python для декларативных пакетов автоматизации позволяет определять ресурсы в Python. См. раздел "Конфигурация пакета" в Python.

Спецификация

Следующая спецификация YAML предоставляет ключи конфигурации верхнего уровня для декларативных пакетов автоматизации. Полный справочник по конфигурации см. в справочнике по конфигурации и ресурсах пакетов декларативной автоматизации.

# This is the default bundle configuration if not otherwise overridden in
# the "targets" top-level mapping.
bundle: # Required.
  name: string # Required.
  databricks_cli_version: string
  cluster_id: string
  deployment: Map
  git:
    origin_url: string
    branch: string

# This is the identity to use to run the bundle
run_as:
  - user_name: <user-name>
  - service_principal_name: <service-principal-name>

# These are any additional configuration files to include.
include:
  - '<some-file-or-path-glob-to-include>'
  - '<another-file-or-path-glob-to-include>'

# These are any scripts that can be run.
scripts:
  <some-unique-script-name>:
    content: string

# These are any additional files or paths to include or exclude.
sync:
  include:
    - '<some-file-or-path-glob-to-include>'
    - '<another-file-or-path-glob-to-include>'
  exclude:
    - '<some-file-or-path-glob-to-exclude>'
    - '<another-file-or-path-glob-to-exclude>'
  paths:
    - '<some-file-or-path-to-synchronize>'

# These are the default artifact settings if not otherwise overridden in
# the targets top-level mapping.
artifacts:
  <some-unique-artifact-identifier>:
    build: string
    dynamic_version: boolean
    executable: string
    files:
      - source: string
    path: string
    type: string

# These are for any custom variables for use throughout the bundle.
variables:
  <some-unique-variable-name>:
    description: string
    default: string or complex
    lookup: Map
    type: string # The only valid value is "complex" if the variable is a complex variable, otherwise do not define this key.

# These are the workspace settings if not otherwise overridden in
# the targets top-level mapping.
workspace:
  artifact_path: string
  host: string
  profile: string
  resource_path: string
  root_path: string
  state_path: string

# These are the permissions to apply to resources defined
# in the resources mapping.
permissions:
  - level: <permission-level>
    group_name: <unique-group-name>
  - level: <permission-level>
    user_name: <unique-user-name>
  - level: <permission-level>
    service_principal_name: <unique-principal-name>

# These are the resource settings if not otherwise overridden in
# the targets top-level mapping.
resources:
  alerts:
    <unique-alert-name>:
      # alert settings
  apps:
    <unique-app-name>:
      # app settings
  catalogs:
    <unique-catalog-name>:
      # catalog settings
  clusters:
    <unique-cluster-name>:
      # cluster settings
  dashboards:
    <unique-dashboard-name>:
      # dashboard settings
  database_catalogs:
    <unique-database-catalog-name>:
      # database catalog settings
  database_instances:
    <unique-database-instance-name>:
      # database instance settings
  experiments:
    <unique-experiment-name>:
      # experiment settings
  jobs:
    <unique-job-name>:
      # job settings
  model_serving_endpoints:
    <unique-model-serving-endpoint-name>:
    # model_serving_endpoint settings
  pipelines:
    <unique-pipeline-name>:
      # pipeline settings
  postgres_branches:
    <unique-postgres-branch-name>:
      # postgres branch settings
  postgres_endpoints:
    <unique-postgres-endpoint-name>:
      # postgres endpoint settings
  postgres_projects:
    <unique-postgres-project-name>:
      # postgres project settings
  quality_monitors:
    <unique-quality-monitor-name>:
    # quality monitor settings
  registered_models:
    <unique-registered-model-name>:
    # registered model settings
  schemas:
    <unique-schema-name>:
      # schema settings
  secret_scopes:
    <unique-secret-scope-name>:
      # secret scopes settings
  sql_warehouses:
    <unique-sql-warehouse-name>:
      # sql warehouse settings
  synced_database_tables:
    <unique-synced-database-table-name>:
      # synced database table settings
  volumes:
    <unique-volume-name>:
    # volumes settings

# These are the targets to use for deployments and workflow runs. One and only one of these
# targets can be set to "default: true".
targets:
  <some-unique-programmatic-identifier-for-this-target>:
    artifacts:
      # artifact build settings for this target
    bundle:
      # bundle settings for this target
    default: boolean
    git: Map
    mode: string
    permissions:
      # permissions for this target
    presets:
      <preset>: <value>
    resources:
      # resource settings for this target
    sync:
      # sync settings for this target
    variables:
      <defined-variable-name>: <non-default-value> # value for this target
    workspace:
      # workspace settings for this target
    run_as:
      # run_as settings for this target

Примеры

В этом разделе содержатся некоторые основные примеры, которые помогут понять, как работают пакеты и как структурировать конфигурацию.

Примечание.

Примеры конфигурации, демонстрирующие функции пакета и распространенные варианты использования пакета, см. в примерах конфигурациипакета и репозитории примеров пакетов в GitHub.

В следующем примере конфигурация пакета указывает локальный файл с именем hello.py , который находится в том же каталоге, что и файл databricks.ymlконфигурации пакета. Он запускает эту записную книжку в качестве задания с помощью удаленного кластера с указанным идентификатором кластера. URL-адрес удалённой рабочей области и учетные данные аутентификации рабочей области считываются из локального профиля конфигурации пользователя, указанного в .

bundle:
  name: hello-bundle

resources:
  jobs:
    hello-job:
      name: hello-job
      tasks:
        - task_key: hello-task
          existing_cluster_id: 1234-567890-abcde123
          notebook_task:
            notebook_path: ./hello.py

targets:
  dev:
    default: true

В следующем примере добавляется целевой объект с именемprod, использующим другой URL-адрес удаленной рабочей области и учетные данные проверки подлинности рабочей области, которые считываются из соответствующей записи файла .databrickscfg вызывающего объекта host с указанным URL-адресом рабочей области. Это задание выполняет тот же блокнот, но использует другой удаленный кластер с указанным идентификатором кластера.

Примечание.

Databricks рекомендует использовать host сопоставление вместо default сопоставления везде, где это возможно, так как это делает файлы конфигурации пакета более переносимыми. host Установка сопоставления указывает интерфейсу командной строки Databricks найти соответствующий профиль в файле .databrickscfg, а затем использовать поля этого профиля для определения используемого типа проверки подлинности Databricks. Если существует несколько профилей с host соответствующим полем, необходимо использовать --profile параметр в командах пакета, чтобы указать используемый профиль.

Обратите внимание, что не нужно объявлять сопоставление notebook_task внутри сопоставления prod, так как оно возвращается к использованию сопоставления notebook_task внутри сопоставления верхнего уровня resources, если сопоставление notebook_task не переопределяется явным образом в сопоставлении prod.

bundle:
  name: hello-bundle

resources:
  jobs:
    hello-job:
      name: hello-job
      tasks:
        - task_key: hello-task
          existing_cluster_id: 1234-567890-abcde123
          notebook_task:
            notebook_path: ./hello.py

targets:
  dev:
    default: true
  prod:
    workspace:
      host: https://<production-workspace-url>
    resources:
      jobs:
        hello-job:
          name: hello-job
          tasks:
            - task_key: hello-task
              existing_cluster_id: 2345-678901-fabcd456

Используйте следующие команды пакета для проверки, развертывания и запуска этого задания в целевом объекте dev . Дополнительные сведения о жизненном цикле пакета см. в разделе "Разработка декларативных пакетов автоматизации".

# Because the "dev" target is set to "default: true",
# you do not need to specify "-t dev":
databricks bundle validate
databricks bundle deploy
databricks bundle run hello_job

# But you can still explicitly specify it, if you want or need to:
databricks bundle validate
databricks bundle deploy -t dev
databricks bundle run -t dev hello_job

Чтобы проверить, развернуть и запустить это задание в целевом объекте, выполните следующее prod :

# You must specify "-t prod", because the "dev" target
# is already set to "default: true":
databricks bundle validate
databricks bundle deploy -t prod
databricks bundle run -t prod hello_job

Для достижения более модульной структуры и лучшего повторного использования определений и настроек в различных пакетах, разбейте конфигурацию вашего пакета на отдельные файлы:

# databricks.yml

bundle:
  name: hello-bundle

include:
  - '*.yml'
# hello-job.yml

resources:
  jobs:
    hello-job:
      name: hello-job
      tasks:
        - task_key: hello-task
          existing_cluster_id: 1234-567890-abcde123
          notebook_task:
            notebook_path: ./hello.py
# targets.yml

targets:
  dev:
    default: true
  prod:
    workspace:
      host: https://<production-workspace-url>
    resources:
      jobs:
        hello-job:
          name: hello-job
          tasks:
            - task_key: hello-task
              existing_cluster_id: 2345-678901-fabcd456

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