宣言型オートメーション バンドル (旧称 Databricks Asset Bundles) は、ジョブ、パイプライン、ノートブックなどの Databricks リソースをソース ファイルとして記述し、これらのソース ファイルと共にメタデータを含め、インフラストラクチャやその他のリソースをプロビジョニングし、プロジェクトのエンド ツー エンドの定義 (すべて単一のデプロイ可能なプロジェクトとしてパッケージ化) を提供できます。 「宣言型オートメーション バンドルとは」を参照してください。
バンドル テンプレートを使用すると、ユーザーは、フォルダー構造、ビルド ステップとタスク、テスト、およびデプロイ パイプライン全体で共通する DevOps Infrastructure-as-Code (IaC) 属性を確立することで、一貫性のある反復可能な方法でバンドルを作成できます。
たとえば、インストール時に時間のかかるコンパイル 手順でカスタム パッケージを必要とするジョブを定期的に実行する場合は、カスタム コンテナー環境を指定するバンドル テンプレートを作成することで、開発ループを高速化できます。
Databricks には、既定のバンドル テンプレートのセットが用意されていますが、カスタム バンドル テンプレート作成することもできます。 ユーザーは、既定のテンプレートまたはカスタム テンプレートを指定して、bundle init コマンドを使用してバンドルを初期化できます。
テンプレートを使用してバンドルを作成する
Azure Databricks バンドル テンプレートを使用してバンドルを作成するには、Databricks CLIbundle init コマンドを使用し、使用するテンプレートの名前を指定するか、ワークスペースでバンドルを作成するときに使用可能なテンプレートを選択します。
「バンドルの作成」を参照してください。
たとえば、次のコマンドは、既定の Python バンドル テンプレートを使ってバンドルを作成します。
databricks bundle init default-python
カスタム バンドル テンプレートを使用するには、テンプレートのローカル パスまたはリモート URL を Databricks CLIbundle init コマンドに渡します。
たとえば、次のコマンドでは、dab-container-templateで作成されたテンプレートを使用しています。
databricks bundle init /projects/my-custom-bundle-templates/dab-container-template
テンプレートを指定しない場合、bundle init コマンドは、選択できる一連の使用可能な既定のテンプレートと共にプロンプトを表示します。
既定のバンドル テンプレート
Azure Databricks では、次の既定のバンドル テンプレートが提供されています。
| テンプレート | 説明 |
|---|---|
default-minimal |
空のバンドルを作成するためのテンプレート。 このテンプレートには、必要なファイルのみが含まれており、サンプルコードは含まれていません。また、必要なカタログ変数も構成されています。 これにより、新しいバンドル プロジェクトをすばやく作成できます。 「default-minimal」を参照してください。 |
default-python |
Databricks で Python を使うためのテンプレート。 このテンプレートは、ジョブと ETL パイプラインを含むバンドルを作成し、 uv を必要とします。 default-python を参照してください。 |
default-scala |
Databricks で Scala を使用するためのテンプレート。 このテンプレートは、サーバーレス コンピューティングにデプロイするように構成された Scala JAR をビルドするバンドルを作成します。 default-scala を参照してください。 |
default-sql |
Databricks で SQL を使うためのテンプレート。 このテンプレートには、SQL ウェアハウスで SQL クエリを実行するジョブを定義する構成ファイルが含まれています。 default-sql を参照してください。 |
dbt-sql |
ローカル開発用に dbt-core を利用し、デプロイ用にバンドルを使うテンプレート。 このテンプレートには、dbt タスクを含むジョブを定義する構成と、デプロイされる dbt ジョブの dbt プロファイルを定義する構成ファイルが含まれています。 dbt-sql を参照してください。 |
mlops-stacks |
新しい MLOps スタック プロジェクトを開始するための高度なフル スタック テンプレート。 mlops-stacks および MLOpsスタック用の宣言型オートメーションバンドルを参照してください。 |
pydabs |
YAML の代わりにdefault-python を使用する テンプレートの変更されたバージョン。
pydabs を参照してください。 |
カスタム バンドル テンプレート
バンドル テンプレートでは Go パッケージ テンプレート構文が使用されます。この構文により、作成できるカスタム バンドル テンプレートに柔軟性が提供されます。 Go パッケージ テンプレートのドキュメントを参照してください。
テンプレート プロジェクトの構造
バンドル テンプレート プロジェクトには少なくとも次のものが必要です。
- バンドル プロジェクト名の 1 つのユーザー プロンプト プロパティを定義するプロジェクト ルートの
databricks_template_schema.jsonファイル。 テンプレート スキーマ 参照してください。 - テンプレートで作成されるバンドルの構成が定義されている、
databricks.yml.tmplフォルダーのtemplateファイル。databricks.yml.tmplファイルで追加の*.yml.tmpl構成テンプレートが参照されている場合は、includeのマッピングでそれらの場所を指定します。 構成テンプレートを参照してください。
さらに、バンドル テンプレート プロジェクト template フォルダーのフォルダー構造とインクルード ファイルは、テンプレートで作成されたバンドルによってミラー化されます。 たとえば、テンプレートで、src フォルダー内の単純なノートブックと、resources フォルダー内のノートブックを実行するジョブ定義を含むバンドルを生成する場合は、次のようにテンプレート プロジェクトを整理します。
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
ヒント
このバンドル テンプレートのプロジェクト フォルダー名とジョブ定義ファイルの名前には、テンプレート変数が使用されます。 テンプレート ヘルパーと変数の詳細については、「テンプレート ヘルパーと変数の 」を参照してください。
テンプレート スキーマ
カスタム バンドル テンプレート プロジェクトには、プロジェクト ルートに databricks_template_schema.jsonJSON ファイル が含まれている必要があります。 このファイルは、bundle init コマンドの実行時に Databricks CLI によって使用されるフィールド (プロンプト テキストなど) を定義します。
次の基本的な databricks_template_schema.json ファイルは、プロンプト メッセージと既定値を含む、バンドル プロジェクトの入力変数 project_name を定義します。 次に、メッセージ内の入力変数値を使用するバンドル プロジェクト初期化の成功メッセージを定義します。
{
"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."
}
テンプレート スキーマ フィールド
databricks_template_schema.json ファイルでは、properties フィールド内のユーザーからのバンドル初期化中に情報を収集するための入力変数と、初期化をカスタマイズするための追加フィールドの定義がサポートされています。
入力変数は、テンプレート スキーマの properties フィールドで定義されます。 各入力変数は、バンドルの初期化中にユーザーにプロンプトを表示するために必要なメタデータを定義します。 変数の値には、テンプレート変数の構文 ({{.project_name}}など) を使用してアクセスできます。
一部のフィールドの値を設定して、バンドル初期化プロセスをカスタマイズすることもできます。
サポートされているスキーマ フィールドを次の表に示します。
| スキーマフィールド | 説明 |
|---|---|
properties |
バンドル テンプレートの入力変数の定義。 Databricks では、バンドル プロジェクトの名前である入力変数を少なくとも 1 つ定義することをお勧めします。 |
properties.<variable_name> |
入力変数の名前。 |
properties.<variable_name>.default |
--config-file コマンドの一部として bundle init を持つ値がユーザーによって提供されない場合、またはコマンド ラインで値の入力を求められた場合に使用する既定値。 |
properties.<variable_name>.description |
入力変数に関連付けられているユーザー プロンプト メッセージ。 |
properties.<variable_name>.enum |
プロパティに使用できる値の一覧 ("enum": ["azure", "aws", "gcp"]など)。 このフィールドが定義されている場合、Databricks CLI はコマンド ラインのリストに値を表示して、ユーザーに値の選択を求めます。 |
properties.<variable_name>.order |
入力プロパティの相対順序を定義する整数。 これにより、これらの入力変数のプロンプトがコマンド ラインに表示される順序が制御されます。 |
properties.<variable_name>.pattern |
ユーザー入力の検証に使用する正規表現パターン ("pattern": "^[^ .\\\\/]{3,}$"など)。 サポートされている regexp 構文については、https://github.com/google/re2/wiki/Syntaxを参照してください。 |
properties.<variable_name>.pattern_match_failure_message |
ユーザーが入力した値が、指定されたパターンと一致しない場合にユーザーに表示されるメッセージ (例: Project name must be at least 3 characters long and cannot contain the following characters: \"\\\", \"/\", \" \" and \".\".")。 |
properties.<variable_name>.skip_prompt_if |
このスキーマが構成に既に存在する場合は、入力変数のプロンプトをスキップします。 その場合は、プロパティの既定値が代わりに使用されます。 例については、mlops-stacks テンプレート を参照してください。
const 比較のみがサポートされています。 |
properties.<variable_name>.skip_prompt_if.properties.<previous_variable_name>.const |
<previous_variable_name> の値が skip_prompt_ifで構成されている定数と一致する場合、<variable_name> のプロンプトはスキップされます。 |
template_dir |
テンプレート ディレクトリへのパス ( ../defaultなど)。 これにより、複数の databricks_template_schema.json ファイルが同じディレクトリを参照できるようにすることで、汎用テンプレートを使用できます。 |
welcome_message |
ユーザーに入力を求める前に出力する最初のメッセージ。 |
success_message |
テンプレートが正常に初期化された後に出力するメッセージ。 |
min_databricks_cli_version |
このテンプレートが要求する Databricks CLI の最小 semver バージョン。 CLI のバージョンがこのバージョンより小さい場合、databricks bundle init は失敗します。 |
version |
将来の使用のために予約されています。 スキーマのバージョン。 これは、スキーマが現在の CLI バージョンと互換性があるかどうかを判断するために使用されます。 |
構成テンプレート
カスタム バンドル テンプレートには、バンドル プロジェクトdatabricks.yml.tmpl構成ファイルの作成に使用されるバンドル テンプレート プロジェクトのtemplate フォルダーにdatabricks.yml ファイルが含まれている必要があります。 リソースの構成ファイルのテンプレートは、 resources フォルダーに作成できます。 これらのテンプレート ファイルに構成テンプレート YAML を設定します。
次のdatabricks.ymlおよび関連付けられている *_job.yml の構成テンプレートの簡単な例では、バンドル名と 2 つのターゲット環境を確立し、このテンプレートを使用して作成されたバンドルに対して、バンドル内でノートブックを実行するジョブを定義します。 これらの構成テンプレートでは、バンドルの 置換 と バンドル テンプレート ヘルパーを利用します。
template/{{.project_name}}/databricks.yml.tmpl:
# databricks.yml
# This is the configuration for the bundle {{.project_name}}.
bundle:
name: {{.project_name}}
include:
- resources/*.yml
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 -}}
template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl:
# {{.project_name}}_job.yml
# 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
テンプレート ヘルパーと変数
テンプレート ヘルパーは Databricks によって提供される関数で、実行時にユーザー固有の情報を取得したり、テンプレート エンジンと対話したりするためにテンプレート ファイル内で使用できます。 独自のテンプレート変数を定義することもできます。
Databricks バンドル テンプレート プロジェクトでは、次のテンプレート ヘルパーを使用できます。 Go テンプレートと変数の使用については、「Go テンプレート を参照してください。
| ヘルパー | 説明 |
|---|---|
{{url}} |
https://pkg.go.dev/net/url#Parse のエイリアス。 これにより、url.URLのすべてのメソッドを使用できます。 |
{{regexp}} |
https://pkg.go.dev/regexp#Compile のエイリアス。 これにより、regexp.Regexpのすべてのメソッドを使用できます。 |
{{random_int}} |
半開区間 (0,n) 内の負でない擬似乱数を int として返します。 |
{{uuid}} |
文字列として、RFC 4122 で定義されている 128 ビット (16 バイト) ユニバーサル一意の ID である UUID を返します。この ID は、テンプレートの実行期間中安定しており、テンプレート作成者がdatabricks.ymlの bundle.uuid フィールドを設定するために使用できます。 |
{{bundle_uuid}} |
バンドルの一意の ID。 この関数を複数回呼び出すと、同じ UUID が返されます。 |
{{pair}} |
キーと値のペア。 これは、テンプレート内で使用するマップを生成するために、map ヘルパーと共に使用されます。 |
{{map}} |
ペアのリストをマップ オブジェクトに変換します。 これは、ライブラリ ディレクトリで定義されているテンプレートに複数のオブジェクトを渡す場合に便利です。 テンプレートを呼び出すための Go テキスト テンプレート構文では 1 つの引数のみを指定できるため、この関数を使用してその制限を回避できます。 たとえば、次の行では、 {{template "my_template" (map (pair "foo" $arg1) (pair "bar" $arg2))}}、$arg1、および $arg2 は、my_template 内から .foo および .barと呼ばれます。 |
{{smallest_node_type}} |
最小のノード の種類を返します。 |
{{path_separator}} |
オペレーティング システムのパス区切り文字。 これは、Unixベースのシステムでは/、Windowsでは\です。 |
{{workspace_host}} |
ユーザーが現在認証されているワークスペース ホスト URL。 |
{{user_name}} |
テンプレートを初期化しているユーザーの完全な名前。 |
{{short_name}} |
テンプレートを初期化しているユーザーの短い名前。 |
{{default_catalog}} |
既定のワークスペース カタログを返します。 既定値がない場合、または Unity カタログが有効になっていない場合は、空の文字列が返されます。 |
{{is_service_principal}} |
現在のユーザーがサービス プリンシパルであるかどうか。 |
{{ skip <glob-pattern-relative-to-current-directory> }} |
テンプレート エンジンが、入力 glob パターンに一致するすべてのファイルとディレクトリの生成をスキップします。 例については、mlops-stacks テンプレート を参照してください。 |
カスタム テンプレート ヘルパー
独自のテンプレート ヘルパーを定義するには、テンプレート プロジェクトの library フォルダーにテンプレート ファイルを作成し、Go テンプレート構文を使用してヘルパーを定義します。 たとえば、library/variables.tmpl ファイルの次の内容は、変数の cli_version と model_nameを定義します。 このテンプレートを使用してバンドルを初期化する場合、model_name 変数の値は、テンプレート スキーマ ファイルで定義されている input_project_name フィールドを使用して構築されます。 このフィールド値の値は、プロンプトの後のユーザー入力です。
{{ define `cli_version` -}}
v0.240.0
{{- end }}
{{ define `model_name` -}}
{{ .input_project_name }}-model
{{- end }}
完全な例については、mlops-stacks テンプレート変数ファイル を参照してください。
バンドル テンプレートをテストする
最後に、テンプレートをテストしてください。 たとえば、Databricks CLI を使用して、前のセクションで定義したテンプレートを使用して新しいバンドルを初期化します。
databricks bundle init basic-bundle-template
What is your bundle project name? というプロンプトに、「my_test_bundle」と入力します。
テスト バンドルが作成されると、スキーマ ファイルからの成功メッセージが出力されます。
my_test_bundle フォルダーの内容を調べると、次のようになっているはずです。
my_test_bundle
├── databricks.yml
├── resources
│ └── my_test_bundle_job.yml
└── src
└── simple_notebook.ipynb
databricks.ymlファイルとジョブがカスタマイズされました。
# databricks.yml
# This is the configuration for the bundle my-test-bundle.
bundle:
name: my_test_bundle
include:
- resources/*.yml
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
# my_test_bundle_job.yml
# 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
カスタム テンプレートを共有する
バンドル テンプレートを他のユーザーと共有する場合は、Git でサポートされ、ユーザーがアクセスできる任意のプロバイダーとバージョン管理に保存できます。 Git URL を使用して bundle init コマンドを実行するには、databricks_template_schema.json ファイルがその Git URL を基準としたルートの場所にあることを確認してください。
ヒント
databricks_template_schema.json ファイルは、バンドルのルートを基準にして、別のフォルダーに配置できます。 その後、 bundle init コマンドの --template-dir オプションを使用して、 databricks_template_schema.json ファイルを含むそのフォルダーを参照できます。
ワークスペースでカスタム テンプレート フォルダーを構成する
Important
この機能は ベータ版です。
カスタム バンドル テンプレートは、ワークスペースでバンドルを作成するために使用できます。
バンドル テンプレートをGitHub リポジトリに格納し、それに接続するように Git フォルダーを構成します。 Git フォルダーの構成の詳細については、「 リポジトリの複製」を参照してください。
アカウントまたはワークスペース管理者として、ワークスペースの [設定] に移動します。 「ワークスペースを管理する」を参照してください。
[ 開発] をクリックします。
[ 宣言型オートメーション バンドル] で、カスタム テンプレートのフォルダーを選択します。 すべてのカスタム バンドル テンプレートは、フォルダーのルート レベルで使用できる必要があります。
アクセス許可ダイアログが表示されたら、すべてのユーザーにカスタム テンプレートのフォルダーへのアクセスを表示できるようにします。または、[アクセス権を 付与しない ] を選択して、より詳細なアクセス許可を設定します。
より詳細なアクセス許可を設定するには、任意のフォルダー内の 3 つのドットを選択し、[ 詳細の表示] をクリックします。
Git フォルダーの詳細パネルで [共有] をクリックします。
テンプレートを編集できるユーザー (CAN MANAGE) と、テンプレートを使用してバンドルを作成できるユーザー (CAN VIEW) を選択します。
アクセス許可の詳細については、「 フォルダー ACL とGit フォルダー ACL」を参照してください。
ワークスペースでバンドルを作成するときに、このフォルダー内のテンプレートをユーザーが使用できるようになりました。 「バンドルの作成」を参照してください。
次のステップ
- Databricks によって作成され、保守管理されている追加のテンプレートを参照します。 GitHub のバンドル サンプル リポジトリをご覧ください。
- 宣言型オートメーション バンドル テンプレートで MLOps スタックを使用するには、 MLOps スタックの宣言型オートメーション バンドルに関するページを参照してください。
- Go パッケージのテンプレートについて詳しくは、こちらをご覧ください。 Go パッケージ テンプレートのドキュメントを参照してください。