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

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

Связь ресурсов Terraform

Важно!

Поставщик Terraform для Databricks официально не поддерживается Databricks или Майкрософт. Он обновляется специалистами Databricks и предоставляется как есть. Соглашение об уровне обслуживания (SLA) для него отсутствует. Databricks и Майкрософт не предоставляют каких-либо гарантий. Если вы обнаружите ошибку в работе поставщика, сообщите о ней на GitHub, чтобы ее по возможности рассмотрели разработчики проекта.

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

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

Примечание

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

  1. Установите интерфейс командной строки Terraform. Дополнительные сведения см. в статье Download Terraform (Скачивание Terraform) на веб-сайте Terraform.

  2. Установите Azure CLI, а затем воспользуйтесь Azure CLI для входа в Azure, выполнив команду az login. Дополнительные сведения см. в статье Установка Azure CLI на веб-сайте Microsoft Azure и статье Azure Provider: Authenticating using the Azure CLI (Поставщик Azure: проверка подлинности с помощью Azure CLI) на веб-сайте Terraform.

    az login
    

    Совет

    Чтобы Terraform выполнялся в контексте другого пользователя, выполните команду az login еще раз. Вы можете настроить Terraform на использование подписки Azure, которая не имеет атрибута "isDefault": true в выходных данных команды az login. Для этого выполните команду az account set --subscription="<subscription ID>", заменив <subscription ID> значением свойства id нужной подписки в выходных данных команды az login.

    Для проверки подлинности в этой процедуре используется Azure CLI вместе с подпиской по умолчанию. Альтернативные способы проверки подлинности см. в статье Authenticating to Azure (Проверка подлинности в Azure) на веб-сайте Terraform.

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

    mkdir terraform_demo && cd terraform_demo
    
  4. В таком пустом каталоге создайте файл с именем main.tf. Добавьте следующее содержимое в этот файл и сохраните его:

    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
          version = ">= 2.26"
        }
    
        databricks = {
          source = "databrickslabs/databricks"
          version = "0.3.2"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "databricks" {}
    
  5. Инициализируйте рабочий каталог с файлом main.tf, выполнив команду terraform init. Дополнительные сведения см. на странице Command: init (Команда: init) на веб-сайте Terraform.

    terraform init
    

    Terraform скачает поставщики azurerm и databricks, а затем установит их в скрытом подкаталоге текущей рабочей папки с именем .terraform. Команда terraform init выводит версию установленных поставщиков. Terraform также создает файл блокировки с именем .terraform.lock.hcl, который точно указывает используемые версии поставщика, что позволяет управлять тем, когда будут обновляться поставщики, используемые для проекта.

  6. Примените изменения для достижения требуемого состояния конфигурации, выполнив команду terraform apply. Дополнительные сведения см. на странице Command: apply (Команда: apply) на веб-сайте Terraform.

    terraform apply
    

    Так как в файле main.tf еще не было указано ни одного ресурса, выходные данные будут иметь вид Apply complete! Resources: 0 added, 0 changed, 0 destroyed.. Кроме того, Terraform записывает данные в файл с именем terraform.tfstate. Чтобы создать ресурсы, перейдите в раздел Пример конфигурации и (или) Дальнейшие шаги, чтобы узнать, как задать создаваемые ресурсы, а затем повторно выполните команду terraform apply. Terraform хранит идентификаторы и свойства управляемых ресурсов в этом файле terraform.tfstate, с помощью которого он может в дальнейшем обновлять или удалять такие ресурсы.

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

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

  1. В файле main.tf, созданном в разделе Начало работы, измените поставщик databricks, чтобы он ссылался на существующую рабочую область Azure Databricks:

    provider "databricks" {
      host = var.databricks_workspace_url
    }
    
  2. Добавьте следующий код в конец файла main.tf:

    variable "databricks_workspace_url" {
      description = "The URL to the Azure Databricks workspace (must start with https://)"
      type = string
      default = "<Azure Databricks workspace URL>"
    }
    
    variable "resource_prefix" {
      description = "The prefix to use when naming the notebook and job"
      type = string
      default = "terraform-demo"
    }
    
    variable "email_notifier" {
      description = "The email address to send job status to"
      type = list(string)
      default = ["<Your email address>"]
    }
    
    // Get information about the Databricks user that is calling
    // the Databricks API (the one associated with "databricks_connection_profile").
    data "databricks_current_user" "me" {}
    
    // Create a simple, sample notebook. Store it in a subfolder within
    // the Databricks current user's folder. The notebook contains the
    // following basic Spark code in Python.
    resource "databricks_notebook" "this" {
      path     = "${data.databricks_current_user.me.home}/Terraform/${var.resource_prefix}-notebook.ipynb"
      language = "PYTHON"
      content_base64 = base64encode(<<-EOT
        # created from ${abspath(path.module)}
        display(spark.range(10))
        EOT
      )
    }
    
    // Create a job to run the sample notebook. The job will create
    // a cluster to run on. The cluster will use the smallest available
    // node type and run the latest version of Spark.
    
    // Get the smallest available node type to use for the cluster. Choose
    // only from among available node types with local storage.
    data "databricks_node_type" "smallest" {
      local_disk = true
    }
    
    // Get the latest Spark version to use for the cluster.
    data "databricks_spark_version" "latest" {}
    
    // Create the job, emailing notifiers about job success or failure.
    resource "databricks_job" "this" {
      name = "${var.resource_prefix}-job-${data.databricks_current_user.me.alphanumeric}"
      new_cluster {
        num_workers   = 1
        spark_version = data.databricks_spark_version.latest.id
        node_type_id  = data.databricks_node_type.smallest.id
      }
      notebook_task {
        notebook_path = databricks_notebook.this.path
      }
      email_notifications {
        on_success = var.email_notifier
        on_failure = var.email_notifier
      }
    }
    
    // Print the URL to the notebook.
    output "notebook_url" {
      value = databricks_notebook.this.url
    }
    
    // Print the URL to the job.
    output "job_url" {
      value = databricks_job.this.url
    }
    
  3. Замените следующие значения, а затем сохраните файл:

    • Замените <Azure Databricks workspace URL> URL-адресом рабочей области Azure Databricks.
    • Замените <Your email address> своим адресом электронной почты.
  4. Запустите terraform apply.

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

  6. Запустите задание: на странице Задания щелкните Запустить сейчас. После завершения задания проверьте свою электронную почту.

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

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

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

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

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

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

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