Condividi tramite


Specificare un'identità di esecuzione per un flusso di lavoro dei bundle di asset di Databricks

Questo articolo descrive come usare l'impostazione run_as per specificare l'identità da usare durante l'esecuzione dei flussi di lavoro di Databricks Asset Bundles.

L'impostazione run_as può essere configurata come mapping di primo livello da applicare alle risorse o all'interno di un target mapping di distribuzione in un file di configurazione del bundle. Può essere impostato su un user_name o su un service_principal_name.

Questa impostazione consente di separare l'identità usata per distribuire un processo o una pipeline bundle da quella usata dal flusso di lavoro del processo o della pipeline da eseguire. In questo modo si aumenta la flessibilità di sviluppo e gestione dei bundle, consentendo allo stesso tempo di stabilire protezioni per le distribuzioni e le esecuzioni. In particolare:

  • Se l'identità usata per distribuire un bundle corrisponde all'identità configurata nell'impostazione del run_as bundle non sono previste restrizioni. Tutte le risorse bundle sono supportate.
  • Se l'identità usata per distribuire un bundle è diversa dall'identità configurata nell'impostazione del run_as bundle, sono supportati solo un subset di risorse bundle. Le pipeline e i modelli che servono gli endpoint non sono supportati.

Impostare un'identità di esecuzione per il bundle

Per impostare l'identità di esecuzione delle risorse del pacchetto, specificare run_as come mapping di primo livello, come illustrato nell'esempio seguente.

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

L'impostazione run_as non è supportata per le pipeline o i modelli che servono gli endpoint. Si verifica un errore se queste risorse sono definite in un bundle in cui è configurato anche run_as.

Impostare le identità di distribuzione di destinazione

È consigliabile configurare le identità di esecuzione per le distribuzioni di staging e di destinazione di produzione. Inoltre, l'impostazione di un'identità run_as su un'entità servizio per le destinazioni di produzione è il modo più sicuro per eseguire un flusso di lavoro di produzione come segue:

  • Assicura che il flusso di lavoro sia stato distribuito dalla stessa entità servizio o da un utente con autorizzazioni CAN_USE per l'entità servizio stessa.
  • Separa l'autorizzazione per eseguire il flusso di lavoro di produzione dall'identità che ha creato o distribuito il bundle.
  • Consente agli utenti di configurare e impostare un'entità servizio per la produzione con meno autorizzazioni rispetto all'identità usata per distribuire il bundle di produzione.

Nel file di configurazione di esempio databricks.yml seguente sono state configurate tre modalità di destinazione: sviluppo, gestione temporanea e produzione. La modalità di sviluppo è configurata per l'esecuzione come singolo utente e le modalità di gestione temporanea e di produzione sono configurate per l'esecuzione usando due entità servizio diverse. Le entità servizio sono sempre sotto forma di ID applicazione, che possono essere recuperate dalla pagina di un'entità servizio nelle impostazioni di amministrazione dell'area di lavoro.

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"