번들 및 파일 묶음 공유

조직은 종종 많은 번들을 유지 관리하며, 이러한 고급 CI/CD 시나리오에서는 이러한 번들이 공통 구성 및 파일을 공유합니다. 예를 들어 번들은 공유 위치에 저장된 라이브러리를 공유하거나 공유 위치의 구성 파일에 컴퓨팅 설정 및 변수를 정의할 수 있습니다.

이 문서에서는 두 번들을 공유 폴더에서 구성 및 파일을 사용할 수 있도록 설정하는 방법에 대한 정보를 제공합니다. 전체 공유 번들 예제는 번들 예제 GitHub 리포지토리에 있습니다.

추가 CI/CD 모범 사례는 Databricks에서 모범 사례 및 권장 CI/CD 워크플로를 참조하세요.

리포지토리 구조

번들이 많은 조직에서는 일반적으로 공유 폴더가 있는 하나의 저장소에 번들을 위치시킵니다. 둘 이상의 번들이 있는 리포지토리 구조의 예는 다음과 같습니다.

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가 포함된 코드 파일:

    def multiply(a: int, b: int) -> int:
      return a * b
    
  • 내용을 포함한 variables.yml :

    variables:
      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 :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)

번들 유효성 검사

번들 구성의 유효성을 항상 검사해야 하며, 특히 번들이 파일 및 구성을 공유하는 경우 특히 중요합니다. 이 databricks bundle validate 명령은 번들에 지정된 변수, 파일 및 경로가 존재하고 제대로 상속 및 구성되도록 하고 배포하기 전에 문제를 해결할 수 있도록 문제에 대한 정보를 출력합니다. databricks 번들 유효성 검사를 참조하세요.

배포하기 전에 각 번들에 대해 다음 명령을 실행합니다.

databricks bundle validate

공유 번들에 대한 사용 권한

조직 내에서 번들은 종종 다양한 책임 및 권한 수준을 가진 다른 개인이 개발, 배포 및 실행합니다. 모든 사용자는 번들을 볼 수 있어야 할 수 있고, 일부는 대상 개발 작업 영역에서 번들 변경 내용을 배포하고 리소스를 실행할 수 있어야 하고, 번들 변경 내용을 배포하고 프로덕션에서 리소스를 실행할 수 있어야 하는 몇 가지가 필요하며, 서비스 주체를 사용하는 자동화된 워크플로는 번들에서 리소스를 실행할 수 있어야 합니다. 조직의 모든 사용자가 공유 번들을 효과적으로 관리할 수 있도록 하려면 프로덕션 대상 권한뿐만 아니라 최상위 권한도 설정합니다. 번들의 모든 리소스에 사용 권한을 적용하는 최상위 권한에 대한 자세한 내용은 사용 권한을 참조하세요.

팁 (조언)

작업 영역의 선언적 자동화 번들을 사용하면 번들에 대한 공동 작업을 쉽게 수행할 수 있습니다. 작업 영역의 번들에 대한 공동 작업을 참조하세요.

예를 들어 공유 번들의 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