Databricks アセット バンドル プロジェクト テンプレート
Databricks アセット バンドルでは、ジョブ、パイプライン、ノートブックなどの Databricks リソースをソース ファイルとして記述し、これらのソース ファイルと共にメタデータを含め、インフラストラクチャやその他のリソースをプロビジョニングし、プロジェクトのエンドツーエンドの定義を提供できます。これらはすべて単一の配置可能なプロジェクトとしてパッケージ化されています。 「Databricks アセット バンドルとは」をご覧ください。
バンドル テンプレートを使用すると、ユーザーは、フォルダー構造、ビルド ステップとタスク、テスト、およびデプロイ パイプライン全体で共通する DevOps Infrastructure-as-Code (IaC) 属性を確立することで、一貫性のある反復可能な方法でバンドルを作成できます。
たとえば、インストール時に時間のかかるコンパイル手順でカスタム パッケージを必要とする Databricks ジョブを定期的に実行する場合、カスタム コンテナー環境を指定するバンドル テンプレートを作成することで、開発ループを高速化できます。
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-python |
Databricks で Python を使うためのテンプレート。 このテンプレートは、ジョブと DLT パイプラインを含むバンドルを作成します。 default-python を参照してください。 |
default-sql |
Databricks で SQL を使うためのテンプレート。 このテンプレートには、SQL ウェアハウスで SQL クエリを実行するジョブを定義する構成ファイルが含まれています。 default-sql を参照してください。 |
dbt-sql |
ローカル開発用に dbt-core を利用し、デプロイ用にバンドルを使うテンプレート。 このテンプレートには、dbt タスクを含むジョブを定義する構成と、デプロイされる dbt ジョブの dbt プロファイルを定義する構成ファイルが含まれています。 dbt-sql を参照してください。 |
mlops-stacks |
新しい MLOps スタック プロジェクトを開始するための高度なフル スタック テンプレート。 mlops-stacks と、「MLOps スタック用の Databricks アセット バンドル」をご覧ください。. |
カスタム バンドル テンプレート
バンドル テンプレートでは Go パッケージ テンプレート構文が使用されます。この構文により、作成できるカスタム バンドル テンプレートに柔軟性が提供されます。 Go パッケージ テンプレートのドキュメントを参照してください。
テンプレート プロジェクトの構造
バンドル テンプレート プロジェクトには少なくとも次のものが必要です。
- バンドル プロジェクト名の 1 つのユーザー プロンプト プロパティを定義するプロジェクト ルートの
databricks_template_schema.json
ファイル。 テンプレート スキーマ 参照してください。 - テンプレートで作成されるバンドルの構成が定義されている、
databricks.yml.tmpl
フォルダーのtemplate
ファイル。databricks.yml.tmpl
ファイルで追加の*.yml.tmpl
構成テンプレートが参照されている場合は、include
のマッピングでそれらの場所を指定します。 YML 構成テンプレート を参照してください。
さらに、バンドル テンプレート プロジェクト template
フォルダーのフォルダー構造とインクルード ファイルは、テンプレートで作成されたバンドルによってミラー化されます。 たとえば、テンプレートで、src
フォルダー内の単純なノートブックと、resources
フォルダー内のノートブックを実行するジョブ定義を含むバンドルを生成する場合は、次のようにテンプレート プロジェクトを整理します。
basic-bundle-template
├── databricks_template_schema.json
└── template
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
テンプレート スキーマ
カスタム バンドル テンプレート プロジェクトには、プロジェクト ルートにhttps://json-schema.org/specification.htmldatabricks_template_schema.json
[JSON ファイル]( が含まれている必要があります。 このファイルは、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 |
bundle init コマンドの一部として --config-file を持つ値がユーザーによって提供されない場合、またはコマンド ラインで値の入力を求められた場合に使用する既定値。 |
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> のプロンプトはスキップされます。 |
welcome_message |
ユーザーに入力を求める前に出力する最初のメッセージ。 |
success_message |
テンプレートが正常に初期化された後に出力するメッセージ。 |
min_databricks_cli_version |
このテンプレートが要求する Databricks CLI の最小 semver バージョン。 CLI のバージョンがこのバージョンより小さい場合、databricks bundle init は失敗します。 |
version |
将来の使用のために予約されています。 スキーマのバージョン。 これは、スキーマが現在の CLI バージョンと互換性があるかどうかを判断するために使用されます。 |
YML 構成テンプレート
カスタム バンドル テンプレートには、バンドル プロジェクト databricks.yml
の作成に使用されるバンドル テンプレート プロジェクトの template
フォルダーに、databricks.yml.tmpl
ファイルが含まれている必要があります。 このテンプレート ファイルに基本的な構成テンプレート YAML を設定します。
次のdatabricks.ymlおよび関連付けられている *_job.yml の構成テンプレートの例では、バンドル名と 2 つのターゲット環境を確立し、このテンプレートを使用して作成されたバンドルに対して、バンドル内でノートブックを実行するジョブを定義します。 これらの構成テンプレートでは、バンドルの置換とバンドル テンプレート ヘルパーを利用します。 バンドルの置換 およびバンドル テンプレート ヘルパーを参照してください。
# databricks.yml
# This is the configuration for the Databricks Asset 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 -}}
# {{.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 Databricks Asset 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
ファイルが含まれるそのフォルダーを参照できます。
次のステップ
- Databricks によって作成され、保守管理されている追加のテンプレートを参照します。 GitHub のバンドル サンプル リポジトリをご覧ください。
- Databricks アセット バンドル テンプレートで MLOps スタックを使うには、「MLOps スタック用の Databricks アセット バンドル」を参照してください。
- Go パッケージのテンプレートについて詳しくは、こちらをご覧ください。 Go パッケージ テンプレートのドキュメントを参照してください。