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
を指定します。
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"