指定 Databricks 资产捆绑包工作流的运行标识
本文介绍如何使用 run_as
设置来指定运行 Databricks 资产捆绑包工作流时要使用的标识。
可以将 run_as
设置配置为应用于资源的顶级映射,也可以将其配置为捆绑包配置文件中的 target
部署映射。 可以将其设置为 user_name
或 service_principal_name
。
此设置提供了将用于部署捆绑作业或管道的标识,与要运行的作业或管道工作流使用的标识分开的功能。 这提高了捆绑包开发和管理的灵活性,同时还允许为部署和运行建立保护机制。 具体而言:
- 如果用于部署捆绑包的标识与捆绑包的
run_as
设置中配置的标识相同,则没有任何限制。 支持所有捆绑包资源。 - 如果用于部署捆绑包的标识与捆绑包的
run_as
设置中配置的标识不同,则仅支持一部分捆绑包资源。 不支持管道和模型服务终结点。
设置捆绑包运行标识
若要设置捆绑包资源的运行标识,请将 run_as
指定为顶级映射,如以下示例所示:
bundle:
name: "run_as"
# This is the identity that will be used when "databricks bundle run my_test_job" is executed.
run_as:
service_principal_name: "5cf3z04b-a73c-4x46-9f3d-52da7999069e"
resources:
jobs:
my_test_job _1:
name: Test job 1
tasks:
- task_key: "task_1"
new_cluster:
num_workers: 1
spark_version: 13.2.x-snapshot-scala2.12
node_type_id: i3.xlarge
runtime_engine: PHOTON
notebook_task:
notebook_path: "./test.py"
my_test_job_2:
name: Test job 2
run_as:
service_principal_name: "69511ed2-zb27-444c-9863-4bc8ff497637"
tasks:
- task_key: "task_2"
notebook_task:
notebook_path: "./test.py"
重要
管道或模型服务终结点不支持 run_as
设置。 如果在定义这些资源的捆绑包中还配置了 run_as
,则会发生错误。
设置目标部署标识
最佳做法是为暂存和生产目标部署配置运行标识。 此外,为生产目标的服务主体设置 run_as
标识是运行生产工作流的最安全方法,因为:
- 确保工作流由同一服务主体部署,或者由对服务主体本身具有 CAN_USE 权限的人员部署。
- 将运行生产工作流的权限与创建或部署了捆绑包的标识分离。
- 允许用户使用比用于部署生产捆绑包的标识更少的权限来配置和设置生产服务主体。
在以下示例 databricks.yml
配置文件中,配置了三种目标模式:开发、暂存和生产。 开发模式配置为以个人用户身份运行,暂存和生产模式配置为使用两个不同的服务主体运行。 服务主体始终采用应用程序 ID 的形式,可以从工作区管理员设置中的“服务主体”页面检索。
bundle:
name: my_targeted_bundle
run_as:
service_principal_name: "5cf3z04b-a73c-4x46-9f3d-52da7999069e"
targets:
# Development deployment settings, set as the default
development:
mode: development
default: true
workspace:
host: https://my-host.cloud.databricks.com
run_as:
user_name: someone@example.com
# Staging deployment settings
staging:
workspace:
host: https://my-host.cloud.databricks.com
root_path: /Shared/staging-workspace/.bundle/${bundle.name}/${bundle.target}
run_as:
service_principal_name: "69511ed2-zb27-444c-9863-4bc8ff497637"
# Production deployment settings
production:
mode: production
workspace:
host: https://my-host.cloud.databricks.com
root_path: /Shared/production-workspace/.bundle/${bundle.name}/${bundle.target}
run_as:
service_principal_name: "68ed9cd5-8923-4851-x0c1-c7536c67ff99"
resources:
jobs:
my_test_job:
name: Test job
tasks:
- task_key: "task"
new_cluster:
num_workers: 1
spark_version: 13.3.x-cpu-ml-scala2.12
node_type_id: i3.xlarge
runtime_engine: STANDARD
notebook_task:
notebook_path: "./test.py"