バンドルとバンドルファイルの共有
多くの場合、組織は多くのバンドルを保持しており、これらのより高度な CI/CD シナリオでは、これらのバンドルは共通の構成とファイルを共有します。たとえば、バンドルは共有の場所に保存されているライブラリを共有したり、コンピュートの設定と変数を共有の場所の構成ファイルで定義したりできます。
この記事では、共有フォルダ内の設定とファイルを使用するように 2 つのバンドルを設定する方法について説明します。 完全な共有バンドルの例は、 bundle-examples GitHub リポジトリにあります。
その他の CI/CD のベスト プラクティスについては、「 Databricks のベスト プラクティスと推奨される CI/CD ワークフロー」を参照してください。
リポジトリの構造
多くのバンドルを持つ組織では、バンドルを 1 つのリポジトリに配置して、共有フォルダを使用するのが一般的です。複数のバンドルを含むリポジトリ構造の例を次に示します。
databricks-bundle-repo/
├── shared
│   ├── variables.yml           # has variable definitions like cluster_id
│   └── shared_library.py       # has shared code used in multiple bundles
├── job_bundle
│   ├── databricks.yml          # uses ${var.cluster_id} defined in variables.yml
│   ├── resources/
│   │   └── job_bundle.job.yml
│   ├── src/
│   │   ├── notebook.ipynb
│   │   └── my_python.py        # uses ../shared/shared_library.py
│   └── README.md
├── pipeline_bundle
│   ├── databricks.yml
│   ├── resources/
│   │   ├── pipeline_bundle.job.yml      # uses ${var.cluster_id} defined in variables.yml
│   │   └── pipeline_bundle.pipeline.yml
│   ├── src/
│   │   └── my_pipeline.ipynb
│   └── README.md
ファイル共有の構成
バンドルの外部にコードファイルを含めるには、同期マッピングの paths キーで指定します。
たとえば、リポジトリ内の shared フォルダ (バンドル フォルダと同じレベル) に次のものが含まれているとします。
- 
次の内容を含む
shared_library.pyコード ファイル:Pythondef multiply(a: int, b: int) -> int:
return a * b - 
内容の
variables.yml:YAMLvariables:
cluster_id:
default: 1234-567890-abcde123 
この場合、共有コード・ファイルと、共有構成で定義されたバンドル変数を使用するバンドル構成は、次のようになります。
# databricks.yml
bundle:
  name: job_bundle
sync:
  paths:
    - ../shared
    - ./src
include:
  - resources/*.yml
  - ../shared/*.yml
targets:
  dev:
    mode: development
    default: true
    workspace:
      host: https://my-workspace.cloud.databricks.com
  prod:
    mode: production
    workspace:
      host: https://my-workspace.cloud.databricks.com
      root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
    permissions:
      - user_name: someone@example.com
        level: CAN_MANAGE
# job_bundle.yml
resources:
  jobs:
    my_python_job:
      name: my_python_job
        tasks:
          - task_key: python_task
            spark_python_task:
              python_file: src/my_python.py   # uses ../shared/shared_library.py
    my_notebook_job:
      name: my_notebook_job
        tasks:
          - task_key: notebook_task
            existing_cluster_id: ${var.cluster_id}   # defined in ../shared/variables.yml
            notebook_task:
              notebook_path: src/notebook.ipynb
# my_python.py
import os
import sys
# Traverse to the sync root path.
# Note: this requires DBR >= 14 or serverless.
shared_path = os.getcwd() + "/../../shared"
# Add the shared directory to the Python path.
sys.path.append(shared_path)
# Import a function from shared_library.py
from shared_library import multiply
# Use the function.
result = multiply(2, 3)
print(result)
バンドルの検証
バンドル構成を常に検証することが重要であり、特にバンドルがファイルと構成を共有する場合はそうです。databricks bundle validate コマンドは、バンドルで指定された変数、ファイル、およびパスが存在し、適切に継承および構成されていることを確認し、デプロイ前に修正できるように問題に関する情報を出力します。「 databricks バンドルの検証」を参照してください。
デプロイする前に、各バンドルに対して次のコマンドを実行します。
databricks bundle validate
共有バンドルの権限
組織内では、バンドルは多くの場合、さまざまな責任とアクセス許可レベルを持つさまざまな個人によって開発、デプロイ、および実行されます。すべてのユーザーがバンドルを表示できる必要がある場合もあれば、一部のユーザーがバンドルの変更をデプロイしてターゲット開発ワークスペースでリソースを実行できるようにする必要がある場合もあれば、一部のユーザーがバンドルの変更と実行リソースを本番運用にデプロイできる必要がある場合や、サービスプリンシパルを使用する自動ワークフローがバンドル内のリソースを実行できる必要がある場合もあります。 組織内のすべてのユーザーが共有バンドルを効果的に管理できるようにするには、最上位の権限と本番運用ターゲットの権限を設定します。 バンドル内のすべてのリソースにアクセス許可を適用する最上位のアクセス許可については、「 アクセス許可」を参照してください。
ワークスペースの Databricks アセット バンドルを使用すると、バンドルでのコラボレーションが容易になります。「ワークスペースでのバンドルでの共同作業」を参照してください。
たとえば、共有バンドルの databricks.yml は次のようになります。
# databricks.yml
bundle:
  name: shared_bundle
include:
  - resources/*.yml
permissions:
  - level: CAN_VIEW
    group_name: all_users
  - level: CAN_MANAGE
    group_name: data_engineering_users
  - level: CAN_RUN
    service_principal_name: 123456-abcdef
targets:
  dev:
    mode: development
    default: true
    workspace:
      host: https://my-workspace.cloud.databricks.com
  prod:
    mode: production
    workspace:
      host: https://my-workspace.cloud.databricks.com
      root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
    permissions:
      - user_name: someone@example.com
        level: CAN_MANAGE