Поставщик Terraform для Databricks

HashiCorp Terraform — это популярное средство с открытым кодом, позволяющее создавать безопасную и предсказуемую облачную инфраструктуру в средах различных поставщиков облачных служб. Поставщик Terraform для Databricks можно использовать для управления рабочими областями Azure Databricks и связанной облачной инфраструктурой с помощью гибкого и мощного средства. Цель поставщика Terraform для Databricks — поддержка всех REST API Databricks, обеспечивающих автоматизацию самых сложных аспектов, касающихся развертывания платформ данных и управления ими. Клиенты Databricks используют поставщик Databricks Terraform для развертывания кластеров и заданий и управления ими, а также для настройки доступа к данным. Поставщик Azure используется для подготовки рабочих областей Azure Databricks.

Начало работы

В этом разделе описано, как установить и настроить требования к использованию Terraform и поставщика Databricks Terraform на локальном компьютере разработки. Затем вы настроите проверку подлинности Terraform. В этой статье приведен пример конфигурации , с помощью который можно поэкспериментировать с подготовкой записной книжки Azure Databricks, кластера и задания для запуска записной книжки в кластере в существующей рабочей области Azure Databricks.

Требования

  1. У вас должен быть интерфейс командной строки Terraform. Дополнительные сведения см. в статье, посвященной скачиванию Terraform на веб-сайте Terraform.

  2. У вас должен быть проект Terraform. В окне терминала создайте пустой каталог и перейдите в него. (Каждый отдельный набор файлов конфигурации Terraform должен находиться в собственном каталоге, который называется проектом Terraform.) Например: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Включите конфигурации Terraform для проекта в один или несколько файлов конфигурации в проекте Terraform. Сведения о синтаксисе файла конфигурации см . в документации по языку Terraform на веб-сайте Terraform.

  3. Необходимо добавить в проект Terraform зависимость поставщика Databricks Terraform. Добавьте следующее в один из файлов конфигурации в проекте Terraform:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. Необходимо настроить проверку подлинности для проекта Terraform. См. сведения о проверке подлинности в документации по поставщику Databricks Terraform.

Пример конфигурации

В этом разделе приведен пример конфигурации, с помощью который можно поэкспериментировать с подготовкой записной книжки Azure Databricks, кластера и задания для запуска записной книжки в кластере в существующей рабочей области Azure Databricks. Предполагается, что вы уже настроили требования, а также создали проект Terraform и настроили проект с проверкой подлинности Terraform, как описано в предыдущем разделе.

  1. Создайте файл с именем me.tf в проекте Terraform и добавьте следующий код. Этот файл получает сведения о текущем пользователе (вы):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Создайте другой файл с именем 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
    }
    
  3. Создайте другой файл с именем notebook.auto.tfvarsи добавьте следующий код. Этот файл указывает свойства записной книжки.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Создайте другой файл с именем notebook-getting-started.pyи добавьте следующий код. Этот файл представляет содержимое записной книжки.

    display(spark.range(10))
    
  5. Создайте другой файл с именем 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
    }
    
  6. Создайте другой файл с именем cluster.auto.tfvarsи добавьте следующий код. Этот файл указывает свойства кластера.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Создайте другой файл с именем 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
    }
    
  8. Создайте другой файл с именем job.auto.tfvarsи добавьте следующий код. Этот файл задает свойства заданий.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Запустите terraform plan. Если возникают ошибки, исправьте их, а затем снова выполните команду.

  10. Запустите terraform apply.

  11. Убедитесь, что записная книжка, кластер и задание созданы: в выходных данных terraform apply команды найдите URL-адреса для notebook_url, cluster_urlа затем job_urlперейдите к ним.

  12. Запустите задание: на странице "Задания " нажмите кнопку "Выполнить сейчас". После завершения задания проверьте свою электронную почту.

  13. После завершения работы с этим примером удалите записную книжку, кластер и задание из рабочей области Azure Databricks, выполнив команду terraform destroy.

    Примечание.

    Дополнительные сведения о terraform planкомандах terraform destroy terraform applyи командах см. в документации по ИНТЕРФЕЙСу командной строки Terraform в документации Terraform.

  14. Убедитесь, что записная книжка, кластер и задание были удалены: обновите страницы записных книжек, кластеров и заданий , чтобы отобразить сообщение о том, что ресурс не найден.

Тестирование

Проверьте конфигурации Terraform до или после их развертывания. Перед развертыванием ресурсов можно выполнять тесты, аналогичные модульному тестированию. Вы также можете выполнять тесты, аналогичные тестированию интеграции после развертывания ресурсов. См. тесты в документации Terraform.

Выполните тесты, аналогичные тестам интеграции для примера конфигурации этой статьи, выполнив следующий процесс:

  1. Создайте файл с именем 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"
      }
    }
    
  2. Создайте файл с именем 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"
      }
    }
    
  3. Создайте файл с именем 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"
      }
    }
    
  4. Запустите 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"
  }
}

Следующие шаги

  1. Создайте рабочую область Azure Databricks.
  2. Управление ресурсами рабочей области для Azure Databricks.

Устранение неполадок

Примечание.

Чтобы получить поддержку по Terraform, изучите эти темы на веб-сайте HashiCorp Discuss. Сведения о проблемах, связанных с поставщиком Terraform для Databricks, см. в разделе Issues (Проблемы) в репозитории databrickslabs/terraform-provider-databricks на GitHub.

Ошибка. Не удалось установить поставщик

Проблема. Если вы не записали в систему управления версиями файл terraform.lock.hcl после изменения и выполняете команду terraform init, появится следующее сообщение: Failed to install provider. Дополнительные выходные данные могут содержать следующее сообщение:

Error while installing databrickslabs/databricks: v1.0.0: checksum list has no SHA-256 hash for "https://github.com/databricks/terraform-provider-databricks/releases/download/v1.0.0/terraform-provider-databricks_1.0.0_darwin_amd64.zip"

Причина. Конфигурации Terraform ссылаются на устаревшие поставщики Terraform для Databricks.

Решение.

  1. Измените databrickslabs/databricks на databricks/databricks во всех своих файлах .tf.

    Чтобы автоматизировать эти замены, выполните следующую команду Python из родительской папки, содержащей файлы .tf для обновления:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Выполните следующую команду Terraform, а затем утвердите изменения при появлении запроса:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    Сведения об этой команде см. в статье Команда state replace-provider в документации по Terraform.

  3. Проверьте изменения, выполнив следующую команду Terraform:

    terraform init
    

Ошибка. Не удалось запросить доступные пакеты поставщиков

Проблема. Если вы не записали в систему управления версиями файл terraform.lock.hcl после изменения и выполняете команду terraform init, появится следующее сообщение: Failed to query available provider packages.

Причина. Конфигурации Terraform ссылаются на устаревшие поставщики Terraform для Databricks.

Решение. Следуйте инструкциям по решению из раздела Ошибка. Не удалось установить поставщик.

Включение ведения журналов

Поставщик Databricks Terraform выводит журналы, которые можно включить, задав TF_LOG переменную среды на DEBUG любой другой уровень журнала, поддерживаемый Terraform.

По умолчанию журналы отправляются в stderr. Чтобы отправить журналы в файл, задайте TF_LOG_PATH переменную среды в целевой путь к файлу.

Например, можно выполнить следующую команду, чтобы включить ведение журнала на уровне отладки, а также выходные журналы в монохромном формате в файл с именем tf.log относительно текущего рабочего каталога, а terraform apply команда выполняется:

TF_LOG=DEBUG TF_LOG_PATH=tf.log terraform apply -no-color

Дополнительные сведения о ведении журнала Terraform см. в разделе "Отладка Terraform".

Дополнительные примеры

Дополнительные ресурсы