次の方法で共有


Databricks アセット バンドル ワークフローの実行 ID を指定する

この記事では、run_as 設定を使用して、Databricks アセット バンドル ワークフローの実行時に使用する ID を指定する方法について説明します。

run_as の設定は、リソースに適用する最上位のマッピングとして、またはバンドル構成ファイル内の target デプロイ マッピング内で構成できます。 これは、user_name または service_principal_name に設定できます。

この設定では、バンドル ジョブまたはパイプラインのデプロイに使用される ID と、実行するジョブまたはパイプライン ワークフローで使用される ID を分離する機能が提供されます。 これにより、バンドルの開発と管理の柔軟性が向上すると同時に、デプロイと実行のためのガードレールを確立できるようになります。 特に次の点に違いがあります。

  • バンドルのデプロイに使用される ID が、バンドルの run_as の設定で構成されている ID と同じである場合、制限はありません。 すべてのバンドル リソースがサポートされます。
  • バンドルのデプロイに使用される ID が、バンドルの run_as の設定で構成されている ID と異なる場合は、バンドル リソースのサブセットのみがサポートされます。 エンドポイントを提供するパイプラインとモデルはサポートされていません。

バンドル実行 ID を設定する

バンドル リソースの実行 ID を設定するには、次の例に示すように、最上位レベルのマッピングとして 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 も構成されているバンドルでこれらのリソースが定義されている場合、エラーが発生します。

ターゲット デプロイ ID を設定する

ステージングおよび運用ターゲットのデプロイ用に実行 ID を構成することをお勧めします。 さらに、運用ターゲットのサービス プリンシパルrun_as ID を設定することは、運用ワークフローを実行する最も安全な方法です。

  • ワークフローが同じサービス プリンシパルによってデプロイされたか、サービス プリンシパル自体に対する CAN_USE アクセス許可を持つユーザーによってデプロイされたことを確認します。
  • バンドルを作成またはデプロイした ID から、運用ワークフローを実行するためのアクセス許可を切り離します。
  • ユーザーは、運用バンドルのデプロイに使用される ID よりも少ないアクセス許可で、運用のサービス プリンシパルを構成および設定できます。

次の databricks.yml 構成ファイルの例では、開発、ステージング、運用の 3 つのターゲット モードが構成されています。 開発モードは個々のユーザーとして実行するように構成され、ステージング モードと運用モードは 2 つの異なるサービス プリンシパルを使用して実行するように構成されます。 サービス プリンシパルは常にアプリケーション 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"