Delen via


Een uitvoeringsidentiteit opgeven voor een Databricks Asset Bundles-werkstroom

In dit artikel wordt beschreven hoe u de run_as instelling gebruikt om de identiteit op te geven die moet worden gebruikt bij het uitvoeren van Databricks Asset Bundles-werkstromen.

De run_as instelling kan worden geconfigureerd als een toewijzing op het hoogste niveau om toe te passen op resources of binnen een target implementatietoewijzing in een bundelconfiguratiebestand. Deze kan worden ingesteld op een user_name of een service_principal_name.

Deze instelling biedt de mogelijkheid om de identiteit te scheiden die wordt gebruikt om een bundeltaak of pijplijn te implementeren van de identiteit die wordt gebruikt door de taak of pijplijnwerkstroom die moet worden uitgevoerd. Dit verhoogt de flexibiliteit van bundelontwikkeling en -beheer, terwijl er ook kaders voor implementaties en uitvoeringen tot stand kunnen worden gebracht. Met name:

  • Als de identiteit die wordt gebruikt voor het implementeren van een bundel dezelfde is als de identiteit die is geconfigureerd in de instelling van run_as de bundel, zijn er geen beperkingen. Alle bundelbronnen worden ondersteund.
  • Als de identiteit die wordt gebruikt voor het implementeren van een bundel verschilt van de identiteit die is geconfigureerd in de instelling van de bundel run_as , wordt alleen een subset van bundelbronnen ondersteund. Pijplijnen en modellen die eindpunten leveren, worden niet ondersteund.

Een bundeluitvoeringsidentiteit instellen

Als u de uitvoeringsidentiteit van bundelbronnen wilt instellen, geeft u run_as op als een toewijzing op het hoogste niveau, zoals wordt weergegeven in het volgende voorbeeld:

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"

Belangrijk

De run_as instelling wordt niet ondersteund voor pijplijnen of modellen die eindpunten leveren. Er treedt een fout op als deze resources zijn gedefinieerd in een bundel waar run_as ook wordt geconfigureerd.

Doelimplementatie-identiteiten instellen

Het is raadzaam om uitvoeringsidentiteiten te configureren voor faserings- en productiedoelimplementaties. Daarnaast is het instellen van een run_as identiteit voor een service-principal voor productiedoelen de veiligste manier om een productiewerkstroom uit te voeren:

  • Zorgt ervoor dat de werkstroom is geïmplementeerd door dezelfde service-principal of door iemand met CAN_USE machtigingen voor de service-principal zelf.
  • Koppelt de machtiging voor het uitvoeren van de productiewerkstroom los van de identiteit die de bundel heeft gemaakt of geïmplementeerd.
  • Hiermee kunnen gebruikers een service-principal configureren en instellen voor productie met minder machtigingen dan de identiteit die wordt gebruikt om de productiebundel te implementeren.

In het volgende voorbeeldconfiguratiebestand databricks.yml zijn drie doelmodi geconfigureerd: ontwikkeling, fasering en productie. De ontwikkelingsmodus is geconfigureerd voor uitvoering als afzonderlijke gebruiker en de faserings- en productiemodi worden geconfigureerd voor uitvoering met behulp van twee verschillende service-principals. Service-principals hebben altijd de vorm van een toepassings-id, die kan worden opgehaald van de pagina van een service-principal in de beheerinstellingen van uw werkruimte.

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"