Partage de bundles et de fichiers de bundle
Les organisations gèrent souvent de nombreux bundles, et dans ces scénarios CI/CD plus avancés, ces bundles partagent une configuration et des fichiers communs. Par exemple, les bundles pourraient partager des bibliothèques stockées dans un emplacement partagé, ou les paramètres et variables de compute pourraient être définis dans un fichier de configuration dans un emplacement partagé.
Cet article fournit des informations sur la configuration de deux bundles pour utiliser la configuration et les fichiers dans un dossier partagé. Des exemples complets de bundles partagés se trouvent dans le repository GitHub bundle-examples.
Pour des informations supplémentaires sur les meilleures pratiques CI/CD et de développement, consultez les workflows CI/CD sur Databricks et les meilleures pratiques de développement sur Databricks.
Structure du repository
Une pratique courante et la recommandation de Databricks est de stocker la source de nombreux bundles dans un seul repository avec un dossier partagé.
Une structure de repository exemple avec plus d'un bundle pourrait être :
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
Configuration pour le partage de fichiers
Pour inclure des fichiers de code en dehors d'un bundle, spécifiez-les dans la clé paths du mappage de synchronisation.
Par exemple, étant donné un dossier shared dans un repository (au même niveau que les dossiers de bundle) qui contient :
-
un fichier de code
shared_library.pyavec le contenu :Pythondef multiply(a: int, b: int) -> int:
return a * b -
un
variables.ymlavec le contenu :YAMLvariables:
cluster_id:
default: 1234-567890-abcde123
Alors, une configuration de bundle qui utilise le fichier de code partagé et la variable de bundle définie dans la configuration partagée serait la suivante :
# 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)
Validation du bundle
Il est important de toujours valider votre configuration de bundle, surtout si vos bundles partagent des fichiers et une configuration. La commande databricks bundle validate garantit que les variables, les fichiers et les chemins d'accès spécifiés dans votre bundle existent et sont correctement hérités et configurés, et fournit des informations sur les problèmes afin que vous puissiez les corriger avant le déploiement. Consultez databricks bundle validate.
Exécutez la commande suivante pour chaque bundle avant le déploiement :
databricks bundle validate
Autorisations pour les offres groupées partagées
Au sein d'une organisation, les bundles sont souvent développés, déployés et exécutés par différentes personnes ayant des responsabilités et des niveaux d'autorisation variés. Tous les utilisateurs peuvent avoir besoin de pouvoir consulter les bundles, certains doivent pouvoir déployer les modifications de bundle et exécuter les ressources dans l'espace de travail de développement cible, quelques-uns seulement doivent pouvoir déployer les modifications de bundle et exécuter les ressources en production, et les workflows automatisés qui utilisent un Service Principal doivent pouvoir exécuter les ressources d'un bundle. Pour vous assurer que vos bundles partagés peuvent être gérés efficacement par tous les utilisateurs de votre organisation, définissez les autorisations de niveau supérieur ainsi que les autorisations cibles de production. Pour des informations sur les autorisations de niveau supérieur, qui s'appliquent à toutes les ressources d'un bundle, consultez les autorisations.
Declarative Automation Bundles dans le Workspace permet une collaboration facile sur les bundles. Voir Collaborer sur des bundles dans le Workspace.
Par exemple, le databricks.yml pour un bundle partagé pourrait être :
# 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