Databricks 자산 번들 프로젝트 템플릿
Databricks 자산 번들은 작업, 파이프라인 및 Notebook과 같은 Databricks 리소스를 원본 파일로 설명하고, 이러한 원본 파일과 함께 메타데이터를 포함하여 인프라 및 기타 리소스를 프로비전하고, 프로젝트의 엔드투엔드 정의를 제공할 수 있으며, 모두 배포 가능한 단일 프로젝트로 패키지됩니다. Databricks 자산 번들에 대해 알아보세요.을 참조하세요.
번들 템플릿을 사용하면 사용자가 배포 파이프라인에서 공통적인 폴더 구조, 빌드 단계 및 작업, 테스트 및 기타 DevOps IaC(Infrastructure-as-code) 특성을 설정하여 일관되고 반복 가능한 방식으로 번들을 만들 수 있습니다.
예를 들어 설치 시 시간이 많이 걸리는 컴파일 단계를 사용하여 사용자 지정 패키지가 필요한 Databricks 작업을 정기적으로 실행하는 경우 사용자 지정 컨테이너 환경을 지정하는 번들 템플릿을 만들어 개발 루프 속도를 높일 수 있습니다.
Databricks는 기본 번들 템플릿 집합을 제공하지만 사용자 지정 번들 템플릿을 만들 수도 있습니다. 그런 다음 사용자는 기본 템플릿 또는 사용자 지정 템플릿을 지정하는 번들 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 Stacks 프로젝트를 시작하기 위한 고급 전체 스택 템플릿입니다. MLOps 스택에 대한 mlops-stacks 및 Databricks 자산 번들을 참조하세요. |
사용자 지정 번들 템플릿
번들 템플릿은 만들 수 있는 사용자 지정 번들 템플릿에 유연성을 제공하는 Go 패키지 템플릿 구문을 사용합니다. Go 패키지 템플릿 설명서를 참조하세요.
템플릿 프로젝트 구조
최소한 번들 템플릿 프로젝트에는 다음이 있어야 합니다.
- 번들 프로젝트 이름에 대한 하나의 사용자 프롬프트 속성을 정의하는 프로젝트 루트의
databricks_template_schema.json
파일입니다. 템플릿 스키마참조하세요. -
databricks.yml.tmpl
파일은 템플릿으로 만든 번들의 구성을 정의하는template
폴더에 위치합니다.databricks.yml.tmpl
파일이 추가*.yml.tmpl
구성 템플릿을 참조하는 경우include
매핑에서 이러한 템플릿의 위치를 지정합니다. 구성 템플릿참조하세요.
또한 번들 템플릿 프로젝트 template
폴더의 폴더 구조 및 포함된 파일은 템플릿으로 만든 번들에 의해 미러링됩니다. 예를 들어, 템플릿이 src
폴더에 간단한 노트북과 resources
폴더에서 노트북을 실행하는 작업 정의를 사용하여 번들을 생성하도록 하려면, 다음과 같이 템플릿 프로젝트를 구성하십시오.
basic-bundle-template
├── databricks_template_schema.json
└── template
└── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── simple_notebook.ipynb
팁
이 번들 템플릿의 프로젝트 폴더 이름 및 작업 정의 파일 이름은 템플릿 변수를 사용합니다. 템플릿 도우미 및 변수에 대한 자세한 내용은 템플릿 도우미 및 변수참조하세요.
템플릿 스키마
사용자 지정 번들 템플릿 프로젝트에는 프로젝트 루트의 databricks_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는 번들 프로젝트의 이름인 하나 이상의 입력 변수를 정의하는 것이 좋습니다. |
properties.<variable_name> |
입력 변수의 이름입니다. |
properties.<variable_name>.default |
사용자가 --config-file 명령어의 일부로 bundle init 값을 제공하지 않거나 명령줄에서 입력해 달라는 요청을 받을 때 사용할 기본값입니다. |
properties.<variable_name>.description |
입력 변수와 연결된 사용자 프롬프트 메시지입니다. |
properties.<variable_name>.enum |
속성에 사용할 수 있는 값 목록(예: "enum": ["azure", "aws", "gcp"] .) 이 필드가 정의되면 Databricks CLI는 명령줄의 목록에 값을 표시하여 사용자에게 값을 선택하라는 메시지를 표시합니다. |
properties.<variable_name>.order |
입력 속성의 상대 순서를 정의하는 정수입니다. 이렇게 하면 명령줄에 이러한 입력 변수에 대한 프롬프트가 표시되는 순서가 제어됩니다. |
properties.<variable_name>.pattern |
사용자 입력의 유효성을 검사하는 데 사용할 regexp 패턴입니다(예: "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의 최소 셈버 버전입니다. CLI 버전이 이 버전보다 작으면 databricks bundle init 실패합니다. |
version |
향후 사용을 위해 예약됨. 스키마의 버전입니다. 스키마가 현재 CLI 버전과 호환되는지 확인하는 데 사용됩니다. |
구성 템플릿
사용자 지정 번들 템플릿은 번들 프로젝트 databricks.yml
구성 파일을 만드는 데 사용되는 번들 템플릿 프로젝트의 template
폴더에 databricks.yml.tmpl
파일을 포함해야 합니다. 리소스에 대한 구성 파일의 템플릿은 resources
폴더에 만들 수 있습니다. 이러한 템플릿 파일을 구성 템플릿 YAML로 채웁다.
databricks.yml 및 연결된 *_job.yml 대한 다음 간단한 구성 템플릿 예제에서는 번들 이름과 두 개의 대상 환경을 설정하고 이 템플릿을 사용하여 만든 번들에 대해 번들에서 Notebook을 실행하는 작업을 정의합니다. 이러한 구성 템플릿은 번들 대체과 번들 템플릿 도우미를 활용합니다.
template/{{.project_name}}/databricks.yml.tmpl
:
# 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 -}}
template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl
:
# {{.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 바이트) 유니버설 고유 IDentifier인 UUID를 반환합니다. 이 ID는 템플릿 실행 기간 동안 안정적이며 템플릿 작성자가 databricks.yml bundle.uuid 필드를 채우는 데 사용할 수 있습니다. |
{{bundle_uuid}} |
번들에 대한 고유 ID입니다. 이 함수의 여러 호출은 동일한 UUID를 반환합니다. |
{{pair}} |
키 값 쌍입니다.
map 도우미와 함께 템플릿 내에서 사용할 맵을 생성하는 데 사용됩니다. |
{{map}} |
쌍 목록을 지도 개체로 변환합니다. 이는 라이브러리 디렉터리에 정의된 템플릿에 여러 개체를 전달하는 데 유용합니다. 템플릿을 호출하기 위한 Go 텍스트 템플릿 구문은 단일 인수만 지정할 수 있으므로 이 함수를 사용하여 이러한 제한을 해결할 수 있습니다. 예를 들어, 다음 줄에서 {{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> }} |
템플릿 엔진이 입력 글롭 패턴과 일치하는 모든 파일 및 디렉터리의 생성을 건너뛰게 합니다. 예제는 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 패키지 템플릿 설명서를 참조하세요.