Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
HashiCorp Terraform — это популярное средство с открытым кодом для создания безопасной и прогнозируемой облачной инфраструктуры для нескольких поставщиков облачных служб. Вы можете использовать поставщик Databricks Terraform для управления рабочими областями Azure Databricks и связанной облачной инфраструктурой с помощью гибкого и мощного инструмента. Цель поставщика Terraform для Databricks — поддержка всех REST API Databricks, обеспечивающих автоматизацию самых сложных аспектов, касающихся развертывания платформ данных и управления ими. Клиенты Databricks используют поставщик Databricks Terraform для развертывания кластеров и заданий и управления ими, а также для настройки доступа к данным. Поставщик Azure используется для подготовки рабочих областей Azure Databricks.
Начало работы
В этом разделе описано, как установить и настроить требования к использованию Terraform и поставщика Databricks Terraform на локальном компьютере разработки. Затем вы настроите проверку подлинности Terraform. Следующая секция содержит пример конфигурации, с помощью которого можно поэкспериментировать с подготовкой записной книжки Azure Databricks, кластера и задания для запуска записной книжки в кластере в существующей рабочей области Azure Databricks.
Требования
У вас должен быть интерфейс командной строки Terraform. См. статью "Скачать Terraform " на веб-сайте Terraform.
У вас должен быть проект Terraform. В окне терминала создайте пустой каталог и перейдите в него. (Каждый отдельный набор файлов конфигурации Terraform должен находиться в собственном каталоге, который называется проектом Terraform .) Например,
mkdir terraform_demo && cd terraform_demo
.mkdir terraform_demo && cd terraform_demo
Включите конфигурации Terraform для проекта в один или несколько файлов конфигурации в проекте Terraform. Сведения о синтаксисе файла конфигурации см. в документации по языку Terraform на веб-сайте Terraform.
Необходимо добавить в проект Terraform зависимость поставщика Databricks Terraform. Добавьте следующее в один из файлов конфигурации в проекте Terraform:
terraform { required_providers { databricks = { source = "databricks/databricks" } } }
Необходимо настроить проверку подлинности для проекта Terraform. См. сведения о проверке подлинности в документации по поставщику Databricks Terraform.
Пример конфигурации
В этом разделе приведен пример конфигурации, с помощью который можно поэкспериментировать с подготовкой записной книжки Azure Databricks, кластера и задания для запуска записной книжки в кластере в существующей рабочей области Azure Databricks. Предполагается, что вы уже настроили требования, а также создали проект Terraform и настроили проект с проверкой подлинности Terraform, как описано в предыдущем разделе.
Создайте файл с именем
me.tf
в проекте Terraform и добавьте следующий код. Этот файл получает сведения о текущем пользователе (вы):# Retrieve information about the current user. data "databricks_current_user" "me" {}
Создайте другой файл с именем
notebook.tf
и добавьте следующий код. Этот файл представляет записную книжку.variable "notebook_subdirectory" { description = "A name for the subdirectory to store the notebook." type = string default = "Terraform" } variable "notebook_filename" { description = "The notebook's filename." type = string } variable "notebook_language" { description = "The language of the notebook." type = string } resource "databricks_notebook" "this" { path = "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" language = var.notebook_language source = "./${var.notebook_filename}" } output "notebook_url" { value = databricks_notebook.this.url }
Создайте другой файл с именем
notebook.auto.tfvars
и добавьте следующий код. Этот файл указывает свойства записной книжки.notebook_subdirectory = "Terraform" notebook_filename = "notebook-getting-started.py" notebook_language = "PYTHON"
Создайте другой файл с именем
notebook-getting-started.py
и добавьте следующий код. Этот файл представляет содержимое записной книжки.display(spark.range(10))
Создайте другой файл с именем
cluster.tf
и добавьте следующий код. Этот файл представляет кластер.variable "cluster_name" { description = "A name for the cluster." type = string default = "My Cluster" } variable "cluster_autotermination_minutes" { description = "How many minutes before automatically terminating due to inactivity." type = number default = 60 } variable "cluster_num_workers" { description = "The number of workers." type = number default = 1 } # Create the cluster with the "smallest" amount # of resources allowed. data "databricks_node_type" "smallest" { local_disk = true } # Use the latest Databricks Runtime # Long Term Support (LTS) version. data "databricks_spark_version" "latest_lts" { long_term_support = true } resource "databricks_cluster" "this" { cluster_name = var.cluster_name node_type_id = data.databricks_node_type.smallest.id spark_version = data.databricks_spark_version.latest_lts.id autotermination_minutes = var.cluster_autotermination_minutes num_workers = var.cluster_num_workers } output "cluster_url" { value = databricks_cluster.this.url }
Создайте другой файл с именем
cluster.auto.tfvars
и добавьте следующий код. Этот файл указывает свойства кластера.cluster_name = "My Cluster" cluster_autotermination_minutes = 60 cluster_num_workers = 1
Создайте другой файл с именем
job.tf
и добавьте следующий код. Этот файл представляет собой задание, которое запускает записную книжку в кластере.variable "job_name" { description = "A name for the job." type = string default = "My Job" } variable "task_key" { description = "A name for the task." type = string default = "my_task" } resource "databricks_job" "this" { name = var.job_name task { task_key = var.task_key existing_cluster_id = databricks_cluster.this.cluster_id notebook_task { notebook_path = databricks_notebook.this.path } } email_notifications { on_success = [ data.databricks_current_user.me.user_name ] on_failure = [ data.databricks_current_user.me.user_name ] } } output "job_url" { value = databricks_job.this.url }
Создайте другой файл с именем
job.auto.tfvars
и добавьте следующий код. Этот файл задает свойства заданий.job_name = "My Job" task_key = "my_task"
Запустите
terraform plan
. Если возникают ошибки, исправьте их, а затем снова выполните команду.Запустите
terraform apply
.Убедитесь, что записная книжка, кластер и задание созданы: в выходных данных команды
terraform apply
найдите URL-адреса дляnotebook_url
,cluster_url
иjob_url
, и перейдите к ним.Запустите задание: на странице "Задания " нажмите кнопку "Выполнить сейчас". После завершения задания проверьте свою электронную почту.
После завершения работы с этим примером удалите записную книжку, кластер и задание из рабочей области Azure Databricks, выполнив команду
terraform destroy
.Примечание.
Дополнительные сведения о командах
terraform plan
,terraform apply
иterraform destroy
см. в разделе документации по интерфейсу командной строки Terraform.Убедитесь, что записная книжка, кластер и задание были удалены: обновите страницы записной книжки, кластера и работ, чтобы каждая отобразила сообщение, что ресурс не может быть найден.
Тестирование
Проверьте конфигурации Terraform до или после их развертывания. Перед развертыванием ресурсов можно выполнять тесты, аналогичные модульному тестированию. Вы также можете выполнять тесты, аналогичные тестированию интеграции после развертывания ресурсов. См. тесты в документации Terraform.
Выполните тесты, аналогичные тестам интеграции для примера конфигурации этой статьи, выполнив следующий процесс:
Создайте файл с именем
cluster.tftest.hcl
и добавьте следующий код. Этот файл проверяет, имеет ли развернутый кластер ожидаемое имя кластера.# Filename: cluster.tftest.hcl run "cluster_name_test" { command = apply assert { condition = databricks_cluster.this.cluster_name == var.cluster_name error_message = "Cluster name did not match expected name" } }
Создайте файл с именем
job.tftest.hcl
и добавьте следующий код. Этот файл проверяет, имеет ли развернутый задание ожидаемое имя задания.run "job_name_test" { command = apply assert { condition = databricks_job.this.name == var.job_name error_message = "Job name did not match expected name" } }
Создайте файл с именем
notebook.tftest.hcl
и добавьте следующий код. Этот файл проверяет, имеет ли развернутая записная книжка ожидаемый путь к рабочей области.run "notebook_path_test" { command = apply assert { condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}" error_message = "Notebook path did not match expected path" } }
Запустите
terraform test
. Terraform развертывает каждый ресурс в рабочей области Azure Databricks, запускает каждый связанный тест и сообщает о результатах теста, а затем удаляет развернутый ресурс.
Выполните тесты, аналогичные модульным тестам, в примере конфигурации этой статьи с помощью следующего процесса:
- Измените строку
command = apply
наcommand = plan
в каждом из предыдущих тестов, а затем выполнитеterraform test
. Terraform запускает каждый связанный тест и сообщает о результатах теста, но не развертывает ресурсы. - Имитация провайдера Databricks Terraform, который позволяет запускать
terraform test
без развертывания ресурсов и без необходимости использования учетных данных для аутентификации. См. макеты в документации Terraform. Чтобы запустить пробные тесты, можно добавить строкуmock_provider "databricks" {}
в свои тесты и удалить строкуcommand = apply
илиcommand = plan
, например:
# Filename: cluster.tftest.hcl
mock_provider "databricks" {}
run "cluster_mock_name_test" {
assert {
condition = databricks_cluster.this.cluster_name == var.cluster_name
error_message = "Cluster name did not match expected name"
}
}
# Filename: job.tftest.hcl
mock_provider "databricks" {}
run "job_mock_name_test" {
assert {
condition = databricks_job.this.name == var.job_name
error_message = "Job name did not match expected name"
}
}
# Filename: notebook.tftest.hcl
mock_provider "databricks" {}
run "notebook_mock_path_test" {
assert {
condition = databricks_notebook.this.path == "${data.databricks_current_user.me.home}/${var.notebook_subdirectory}/${var.notebook_filename}"
error_message = "Notebook path did not match expected path"
}
}
Следующие шаги
- Управление ресурсами рабочей области
- Создание кластера, записной книжки и задания
- Автоматизация настройки каталога Unity
- Управление доступом к таблицам SQL Databricks
- Создание примера панели мониторинга
Дополнительные ресурсы
- Документация по поставщику Databricks на веб-сайте реестра Terraform
- Документация Terraform на веб-сайте Terraform
- Примеры Terraform из Github-репозитория Databricks