Berbagi bundel serta file bundel

Organisasi sering mempertahankan banyak bundel, dan dalam skenario CI/CD yang lebih canggih ini, bundel ini berbagi konfigurasi dan file umum. Misalnya, bundel dapat berbagi pustaka yang disimpan di lokasi bersama, atau pengaturan dan variabel komputasi dapat ditentukan dalam file konfigurasi di lokasi bersama.

Artikel ini menyediakan informasi tentang cara mengonfigurasi dua bundel untuk menggunakan konfigurasi dan file di folder bersama. Contoh bundel bersama lengkap ada di repositori GitHub bundel-contoh.

Untuk praktik terbaik tambahan terkait CI/CD dan pengembangan, lihat Alur kerja CI/CD di Databricks dan Praktik terbaik pengembang di Databricks.

Struktur repositori

Praktik umum dan rekomendasi Databricks adalah menyimpan sumber untuk banyak bundel dalam satu repositori dengan folder bersama.

Contoh struktur repositori dengan lebih dari satu bundel mungkin:

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

Konfigurasi untuk berbagi file

Untuk menyertakan file kode di luar bundel, tentukan file tersebut paths di kunci pemetaan sinkronisasi.

Misalnya, diberikan shared folder di repositori (pada tingkat yang sama dengan folder bundel) yang berisi:

  • shared_library.py file kode dengan konten:

    def multiply(a: int, b: int) -> int:
      return a * b
    
  • a variables.yml dengan isi:

    variables:
      cluster_id:
        default: 1234-567890-abcde123
    

Kemudian konfigurasi bundel yang menggunakan file kode bersama dan variabel bundel yang ditentukan dalam konfigurasi bersama adalah:

# 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 :re[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)

Validasi sebuah bundel

Penting untuk selalu memvalidasi konfigurasi bundel Anda, dan terutama jika bundel Anda berbagi file dan konfigurasi. databricks bundle validate Perintah memastikan bahwa variabel, file, dan jalur yang ditentukan dalam bundel Anda ada dan diwariskan dan dikonfigurasi dengan benar, serta menghasilkan informasi tentang masalah sehingga Anda dapat memperbaikinya sebelum menyebarkannya. Lihat databricks bundle validate.

Jalankan perintah berikut untuk setiap bundel sebelum menyebarkan:

databricks bundle validate

Izin untuk bundel bersama

Dalam organisasi, bundel sering dikembangkan, disebarkan, dan dijalankan oleh individu yang berbeda dengan berbagai tanggung jawab dan tingkat izin. Semua pengguna mungkin harus dapat melihat bundel, beberapa harus dapat menyebarkan perubahan bundel dan menjalankan sumber daya di ruang kerja pengembangan target, sejumlah kecil perlu dapat menyebarkan perubahan bundel dan menjalankan sumber daya di lingkungan produksi, dan perwakilan layanan yang digunakan dalam alur kerja otomatis harus dapat menjalankan sumber daya dalam bundel. Untuk memastikan bundel bersama Anda dapat dikelola secara efektif oleh semua pengguna di organisasi Anda, tetapkan izin tingkat atas serta izin target produksi. Untuk informasi tentang izin tingkat atas, yang menerapkan izin ke semua sumber daya dalam bundel, lihat izin.

Petunjuk / Saran

Bundel Otomasi Deklaratif di ruang kerja memungkinkan kolaborasi yang mudah pada paket. Lihat Berkolaborasi pada bundel di ruang kerja.

Sebagai contoh, databricks.yml untuk sebuah bundel yang dibagikan mungkin:

# 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