次の方法で共有


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_versionmodel_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 ファイルが含まれるそのフォルダーを参照できます。

次のステップ