Compartir a través de


Especificación de una identidad de ejecución para un flujo de trabajo de agrupaciones de recursos de Databricks

En este artículo se describe cómo usar la configuración run_as para especificar la identidad que se va a usar al ejecutar flujos de trabajo de Databricks Asset Bundles.

El ajuste run_as puede configurarse como una asignación de nivel superior para aplicar a los recursos, o dentro de una asignación de implementación de target en un archivo de configuración de agrupaciones. Se puede establecer en user_name o en service_principal_name.

Esta configuración proporciona la capacidad de separar la identidad usada para implementar un trabajo de agrupación o una canalización del que usa el flujo de trabajo o canalización para ejecutarse. Esto aumenta la flexibilidad de desarrollo y administración de agrupaciones, al tiempo que permite establecer límites de protección para implementaciones y ejecuciones. En concreto:

  • Si la identidad que se usa para implementar una agrupación es la misma que la identidad configurada en la configuración de la agrupación run_as, no hay restricciones. Se admiten todos los recursos de agrupación.
  • Si la identidad utilizada para desplegar un paquete es diferente de la identidad configurada en el ajuste X del paquete run_as, sólo se admite un subconjunto de recursos del paquete. No se admiten canalizaciones ni puntos de conexión de servicio de modelos.

Establecimiento de una identidad de ejecución de agrupación

Para establecer la identidad de ejecución de los recursos de agrupación, especifique run_as como una asignación de nivel superior, como se muestra en el siguiente ejemplo:

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"

Importante

La configuración run_as no se admite para canalizaciones ni para los puntos de conexión de servicio del modelo. Se produce un error si estos recursos se definen en una agrupación donde run_as también está configurada.

Establecimiento de identidades de implementación de destino

Se recomienda configurar identidades de ejecución para implementaciones de destino de ensayo y producción. Además, establecer una identidad run_as en una entidad de servicio para destinos de producción es la forma más segura de ejecutar un flujo de trabajo de producción a medida que:

  • Garantiza que el flujo de trabajo se implementó mediante la misma entidad de servicio o por alguien con permisos de CAN_USE en la propia entidad de servicio.
  • Desacopla el permiso para ejecutar el flujo de trabajo de producción desde la identidad que creó o implementó la agrupación.
  • Permite a los usuarios configurar y establecer una entidad de servicio para producción con menos permisos que la identidad usada para implementar la agrupación de producción.

En el siguiente archivo de configuración de ejemplo databricks.yml, se han configurado tres modos de destino: desarrollo, almacenamiento provisional y producción. El modo de desarrollo está configurado para ejecutarse como usuario individual y los modos de ensayo y producción se configuran para ejecutarse mediante dos entidades de servicio diferentes. Las entidades de servicio siempre están en forma de un identificador de aplicación, que se puede recuperar de una página de entidad de servicio en la configuración de administrador del área de trabajo.

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"