メインコンテンツまでスキップ

Databricks Asset Bundles ワークフローの実行 ID を指定する

この記事では、 run_as 設定を使用して、Databricks Asset Bundles ワークフローを実行するときに使用する ID を指定する方法について説明します。

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

この設定により、バンドル ジョブまたはパイプラインのデプロイに使用される ID を、ジョブまたはパイプライン ワークフローの実行に使用される ID から分離できます。 これにより、バンドルの開発と管理の柔軟性が向上すると同時に、デプロイメントと実行のためのガードレールを確立できます。 特に、以下の点に注意してください。

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

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

バンドル・リソースの実行 ID を設定するには、次の例に示すように、 run_as を最上位マッピングとして指定します。

YAML
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'
important

run_as設定は、パイプラインまたはモデルサービングエンドポイントではサポートされていません。これらのリソースが、 run_as も構成されているバンドルで定義されている場合は、エラーが発生します。

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

ベストプラクティスは、ステージングおよび本番運用ターゲットデプロイメントの実行 ID を設定することです。 また、本番運用 targets の run_as ID を サービスプリンシパル に設定することは、次のような理由から、本番運用ワークフローを実行する最も安全な方法です。

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

設定ファイル databricks.yml 次の例では、開発、ステージング、本番運用の 3 つのターゲットモードが設定されています。 開発モードは個々のユーザーとして実行するように設定され、ステージングモードと本番運用モードは 2 つの異なるサービスプリンシパルを使用して実行するように構成されています。 サービスプリンシパル は常にアプリケーション ID の形式であり、ワークスペース管理者設定サービスプリンシパル のページから取得できます。

YAML
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'