Aller au contenu principal

Créer un template de bundle personnalisé

Dans ce tutoriel, vous allez créer un Template personnalisé pour créer des Declarative Automation Bundles qui exécutent un Job avec une tâche Python sur un cluster à l'aide d'une image conteneur Docker spécifique.

Pour plus d'informations sur les Template de bundles personnalisés, consultez Template de bundles personnalisés.

Exigences

  • Installez la CLI Databricks version 0.218.0 ou supérieure. Si vous l'avez déjà installé, confirmez que la version est 0.218.0 ou supérieure en exécutant databricks -version depuis la ligne de commande.

Définir les variables d’invite utilisateur

Tout d'abord, définissez les databricks bundle init variables d'invite utilisateur. Depuis la ligne de commande :

  1. Créez un dossier vide nommé dab-container-template:

    sh
    mkdir dab-container-template
  2. À la racine du dossier, créez un fichier nommé databricks_template_schema.json:

    sh
    cd dab-container-template
    touch databricks_template_schema.json
  3. Ajoutez le JSON suivant au fichier databricks_template_schema.json pour définir une invite utilisateur pour le nom du projet de bundle :

    JSON
    {
    "properties": {
    "project_name": {
    "type": "string",
    "default": "project_name",
    "description": "Project name",
    "order": 1
    }
    }
    }

Créer la structure du dossier du bundle

Ensuite, créez un dossier template pour contenir la structure de dossiers de vos bundles générés. Les noms des sous-répertoires et des fichiers suivent la syntaxe de Template de package Go.

Ce Template crée le dossier du projet du bundle en fonction de l'invite du nom de projet :

sh
mkdir -p "template/{{.project_name}}"

Créez maintenant les sous-répertoires resources et src pour les fichiers de bundle :

sh
mkdir -p "template/{{.project_name}}/resources"
mkdir -p "template/{{.project_name}}/src"

Ajoutez des Templates de configuration YAML

Dans le dossier template/{{.project_name}}, créez un fichier nommé databricks.yml.tmpl:

sh
touch template/{{.project_name}}/databricks.yml.tmpl

Ajoutez le YAML suivant à databricks.yml.tmpl. Cet exemple utilise les assistants de Template de bundle.

YAML
# This is a bundle definition for {{.project_name}}.
# See https://docs.databricks.com/dev-tools/bundles/index.html for documentation.
bundle:
name: {{.project_name}}

include:
- resources/*.yml

targets:
# The 'dev' target, used for development purposes.
# Whenever a developer deploys using 'dev', they get their own copy.
dev:
# We use 'mode: development' to make sure everything deployed to this target gets a prefix
# like '[dev my_user_name]'. Setting this mode also disables any schedules and
# automatic triggers for jobs and enables the 'development' mode for Lakeflow pipelines.
mode: development
default: true
workspace:
host: {{workspace_host}}

# The 'prod' target, used for production deployment.
prod:
# For production deployments, there is only a single copy, so override the
# workspace.root_path default of
# /Workspace/Users/${workspace.current_user.userName}/.bundle/${bundle.target}/${bundle.name}
# to a path that is not specific to the current user. Avoid /Shared, which is writable
# by all workspace users.
#
# By making use of 'mode: production' we enable strict checks
# to make sure we have correctly configured this target.
mode: production
workspace:
host: {{workspace_host}}
root_path: /Workspace/Production/.bundle/${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
# (see Databricks documentation).
user_name: {{user_name}}

{{end -}}

Créez un autre fichier YAML nommé {{.project_name}}_job.yml.tmpl dans le dossier template/{{.project_name}}/resources. Ce nouveau fichier YAML contient la définition du Job.

sh
touch template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl

Ajoutez le YAML suivant à ce fichier pour décrire le Job Template, qui contient une tâche Python à exécuter sur un cluster de Job à l'aide d'une image de conteneur Docker spécifique. Cet exemple utilise une image de conteneur Docker de base Databricks default, mais vous pouvez spécifier votre propre image personnalisée à la place.

YAML
# The main job for {{.project_name}}
resources:
jobs:

{{.project_name}}_job:
name: {{.project_name}}_job
tasks:
- task_key: python_task
job_cluster_key: job_cluster
spark_python_task:
python_file: ../src/task.py

job_clusters:
- job_cluster_key: job_cluster
new_cluster:
docker_image:
url: databricksruntime/python:10.4-LTS
node_type_id: i3.xlarge
spark_version: 13.3.x-scala2.12

Ajouter les fichiers référencés dans votre configuration

Ensuite, créez le fichier de tâche Python référencé par le Job dans le Template :

sh
touch template/{{.project_name}}/src/task.py

Maintenant, ajoutez les éléments suivants à task.py:

Python
print(f'Spark version{spark.version}')

Vérifiez la structure du Template de bundle.

Passez en revue la structure de dossiers de votre projet de template de bundle. Cela devrait ressembler à ceci :

dab-container-template
├── databricks_template_schema.json
└── template
├── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── task.py

Tester votre Template

Enfin, testez votre template de bundle. Pour générer un bundle basé sur votre nouveau template personnalisé, utilisez la commande databricks bundle init, en spécifiant le nouvel emplacement du template. Depuis votre dossier racine des projets de bundle :

sh
databricks bundle init dab-container-template
astuce

Pour rendre votre Template personnalisé disponible aux autres utilisateurs directement dans le Workspace, stockez-le dans un repository Git et configurez un dossier de Template personnalisé. Les utilisateurs peuvent ensuite le sélectionner lorsqu'ils créent un bundle dans le workspace, sans utiliser la CLI. Voir Configurer un dossier de template personnalisé dans le workspace.

Étapes suivantes

Ressources