Databricksアセットバンドルテンプレート
この記事では、 Databricks CLI バージョン 0.205 以降で動作する Databricks アセット バンドル テンプレートの構文について説明します。バンドルを使用すると、Databricks ワークフローをプログラムで管理できます。 「Databricks アセット バンドルとは」を参照してください。
バンドル テンプレートを使用すると、ユーザーは、フォルダー構造、ビルド ステップとタスク、テスト、および開発環境のデプロイメント パイプライン全体に共通するその他の DevOps Infrastructure-as-Code (IaC) 属性を確立することにより、一貫性があり、繰り返し可能な方法でバンドルを作成できます。
たとえば、インストール時に時間のかかるコンパイル ステップを含むカスタム パッケージを必要とする Databricks ジョブを定期的に実行する場合、カスタム コンテナー環境をサポートするバンドル テンプレートを作成することで開発ループを高速化できます。
バンドル・テンプレートは、作成されるバンドルのディレクトリー構造を定義し、 databricks.yml.tmpl
構成ファイル・テンプレートと、ユーザー・プロンプト変数を含む databricks_template_schema.json
・ファイルが含まれます。
テンプレート に基づくバンドルの作成
このセクションでは、バンドル テンプレート (Databricks 当然バンドル テンプレートまたはカスタム バンドル テンプレート) の使用方法について説明します。
デフォルトのバンドル テンプレートを使用する
Databricks のデフォルト バンドル テンプレートを使用してバンドルを作成するには、 Databricks CLI bundle init
コマンドを使用して、使用するデフォルト テンプレートの名前を指定します。 たとえば、次のコマンドは、デフォルトの Python バンドル テンプレートを使用してバンドルを作成します。
databricks bundle init default-python
デフォルトのテンプレートを指定しない場合、 bundle init
コマンドは、選択できる使用可能なテンプレートのセットを表示します。
Databricks は、次のデフォルトのバンドル テンプレートを提供します。
テンプレート |
説明 |
---|---|
|
Databricks で Python を使用するためのテンプレート。 このテンプレートは、ジョブとDelta Live Tablesパイプラインのバンドルを作成します。 「それでもPythonを参照してください。 |
|
Databricks で SQL を使用するためのテンプレート。 このテンプレートには、SQL ウェアハウスで SQL クエリを実行するジョブを定義する構成ファイルが含まれています。 大丈夫-sql を参照してください。 |
|
ローカル開発に dbt-core を活用し、デプロイにバンドルするテンプレート。 このテンプレートには、dbt タスクを含むジョブを定義する構成と、デプロイされた dbt ジョブの dbt プロファイルを定義する構成ファイルが含まれています。 dbt-sqlを参照してください。 |
|
新しい MLOps スタック プロジェクトを開始するための高度なフルスタック テンプレート。 MLOps スタックのmlops-stacksおよびDatabricks アセット バンドルを参照してください。 |
カスタムバンドルテンプレートを使用する
Databricks のデフォルト バンドル テンプレート以外のバンドル テンプレートを使用するには、テンプレートのローカル パスまたはリモート URL をDatabricks CLI bundle init
コマンドに渡します。
たとえば、次のコマンドは、 「カスタム バンドル テンプレートのチュートリアル」で作成されたdab-container-template
テンプレートを使用します。
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
バンドルテンプレート の作成
バンドルテンプレートは、Go パッケージテンプレート構文を使用します。 Go パッケージテンプレート のドキュメントを参照してください。
バンドル・テンプレート・プロジェクトには、少なくとも次のものが必要です。
プロジェクト・ルートにある
databricks_template_schema.json
・ファイルで、バンドル・プロジェクト名に対して 1 つのユーザー・プロンプト変数を定義します。template
フォルダにあるdatabricks.yml.tmpl
ファイルで、テンプレートを使用して作成されたバンドルの設定を定義します。databricks.yml.tmpl
ファイルが追加の*.yml.tmpl
構成テンプレートを参照している場合は、include
マッピングでこれらの場所を指定します。
オプションで、テンプレートによって作成されたバンドルにミラーリングするサブフォルダとファイルを template
フォルダに追加できます。
ユーザー・プロンプト変数の定義
基本的なバンドル テンプレートを構築する最初のステップは、プロジェクト ルートにテンプレート プロジェクト フォルダーとdatabricks_template_schema.json
という名前のファイルを作成することです。 このファイルには、ユーザーがテンプレートを使用して bundle init
を使用してバンドルを作成するときに入力値を指定する変数が含まれています。 このファイルの形式は、 JSON スキーマ仕様に従っています。
mkdir basic-bundle-template
touch basic-bundle-template/databricks_template_schema.json
databricks_template_schema.json
ファイルに次の内容を追加し、ファイルを保存します。
{
"properties": {
"project_name": {
"type": "string",
"default": "basic_bundle",
"description": "What is the name of the bundle you want to create?",
"order": 1
}
},
"success_message": "\nYour bundle '{{.project_name}}' has been created."
}
このファイルの内容:
project_name
は唯一の入力変数名です。default
ユーザーがbundle init
コマンドの一部として--config-file
を使用して値を指定しなかった場合、またはコマンド プロンプトでユーザーがオーバーライドした場合の、オプションのデフォルト値です。description
ユーザーがbundle init
コマンドの一部として--config-file
を使用して値を指定しなかった場合、入力変数に関連付けられたユーザー プロンプトです。order
これは、ユーザーがbundle init
コマンドの一部として--config-file
を使用して値を指定しなかった場合に、各ユーザー プロンプトが表示されるオプションの順序です。order
を指定しない場合、ユーザー・プロンプトはスキーマにリストされている順序で表示されます。success_message
は、プロジェクトが正常に作成されたときに表示されるオプションのメッセージです。
フォルダー構造を構築する
次に、必要な template
フォルダを作成し、その中にフォルダ構造を構築します。 この構造は、このテンプレートで作成されたバンドルによってミラーリングされます。 また、これらのフォルダーに含めるファイルをすべて配置します。 この基本的なバンドル テンプレートは、ファイルをsrc
フォルダーに保存し、1 つの単純なノートブックを含みます。
mkdir -p basic-bundle-template/template/src
touch basic-bundle-template/template/src/simple_notebook.ipynb
simple_notebook.ipynb
ファイルに以下を追加します。
print("Hello World!")
構成テンプレート・ファイルへの入力
次に、必要な databricks.yml.tmpl
ファイルを template
フォルダーに作成します。
touch basic-bundle-template/template/databricks.yml.tmpl
このファイルに基本構成テンプレート YAML を入力します。 この構成テンプレートは、バンドル名、指定されたノートブック ファイルを使用する 1 つのジョブ、およびこのテンプレートを使用して作成されたバンドルの 2 つのターゲット環境を確立します。 また、バンドル置換も利用しており、これを強くお勧めします。 バンドル置換 (bundle substitutions) を参照。
# This is the configuration for the Databricks Asset Bundle {{.project_name}}.
bundle:
name: {{.project_name}}
# The main job for {{.project_name}}
resources:
jobs:
{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
targets:
# The deployment targets. See https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html
dev:
mode: development
default: true
workspace:
host: {{workspace_host}}
prod:
mode: production
workspace:
host: {{workspace_host}}
root_path: /Shared/.bundle/prod/${bundle.name}
{{- if not is_service_principal}}
run_as:
# This runs as {{user_name}} in production. Alternatively,
# a service principal could be used here using service_principal_name
user_name: {{user_name}}
{{end -}}
バンドルテンプレートをテストする
最後に、テンプレートをテストします。 新しいバンドル プロジェクト フォルダーを作成し、Databricks CLI を使用して、テンプレートを使用して新しいバンドルを初期化します。
mkdir my-test-bundle
cd my-test-bundle
databricks bundle init ../basic-bundle-template
プロンプト What is your bundle project name?
に my_test_bundle
と入力します。
テストバンドルが作成されると、スキーマファイルから成功メッセージが出力されます。 my-test-bundle
フォルダーの内容を調べると、次のように表示されます。
my-test-bundle
├── databricks.yml
└── src
└── simple_notebook.ipynb
これで、databricks.ymlファイルがカスタマイズされました。
# This is the configuration for the Databricks Asset Bundle my-test-bundle.
bundle:
name: my-test-bundle
# The main job for my-test-bundle
resources:
jobs:
my-test-bundle_job:
name: my-test-bundle_job
tasks:
- task_key: notebook_task
job_cluster_key: job_cluster
notebook_task:
notebook_path: ../src/simple_notebook.ipynb
job_clusters:
- job_cluster_key: job_cluster
new_cluster:
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12
targets:
# The 'dev' target, used for development purposes. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#development-mode)
dev:
mode: development
default: true
workspace:
host: https://my-host.cloud.databricks.com
# The 'prod' target, used for production deployment. See [_](https://docs.databricks.com/en/dev-tools/bundles/deployment-modes.html#production-mode)
prod:
mode: production
workspace:
host: https://my-host.cloud.databricks.com
root_path: /Shared/.bundle/prod/${bundle.name}
run_as:
# This runs as someone@example.com in production. Alternatively,
# a service principal could be used here using service_principal_name
user_name: someone@example.com
次のステップ
Databricks によって作成および管理される追加のテンプレートを参照します。 GitHub のバンドル サンプル リポジトリを参照してください。
Databricks アセットバンドルテンプレートで MLOps スタックを使用するには、「 MLOps スタック用の Databricks アセットバンドル」を参照してください。
Go パッケージのテンプレートの詳細については、こちらを参照してください。 Go パッケージテンプレート のドキュメントを参照してください。