Поделиться через


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

Примечание.

В этой статье рассматривается пакет средств разработки облака для Terraform (CDKTF), разработанный сторонним поставщиком. Чтобы связаться с поставщиком, перейдите на сайт сообщества Terraform.

В этой статье показано, как использовать Python вместе с поставщиком CDK DATAbricks Terraform и пакетом средств разработки облака для Terraform (CDKTF). CDKTF — это сторонняя платформа IaC (инфраструктура как код), которая позволяет создавать, развертывать ресурсы Azure Databricks и управлять ими с помощью знакомых языков программирования, инструментов и технических методик. Хотя в этой статье показано, как использовать Python, CDKTF поддерживает дополнительные языки, такие как TypeScript, Java, C#и Go.

В основе поставщика Databricks в пакете CDK для Terraform лежит поставщик Databricks для Terraform. Дополнительные сведения см. в разделе Terraform Cloud. CDKTF основан на пакете средств облачной разработки для AWS (AWS CDK).

Требования

У вас должна быть рабочая область Azure Databricks, так как в этой статье ресурсы развертываются в существующей рабочей области.

На вашем локальном компьютере для разработки должны быть установлены следующие компоненты:

  • Terraform версии 1.1 или более поздней. Чтобы проверить наличие установленного Terraform и его версию, выполните команду terraform -v из терминала или с помощью PowerShell. Установите Terraform, если он еще не установлен.

    terraform -v
    
  • Node.js версии 16.13 или более поздней и npm. Чтобы проверить, установлен ли Node.js и npm, а также установленные версии, выполните команды node -v и npm -v. Последние версии Node.js уже включают в себя npm. Установите Node.js и npm с помощью Node Version Manager (nvm), если у вас еще не установлены Node.js и npm.

    node -v
    npm -v
    
  • CDKTF CLI. Чтобы проверить, установлен ли CDKTF CLI, а также установленную версию, выполните команду cdktf --version. Установите CDKTF CLI с помощью npm, если он еще не установлен.

    cdktf --version
    

    Совет

    Вы также можете установить CDKTF CLI в macOS с помощью Homebrew. См. раздел об установке CDKTF.

  • Python версии 3.7 или более поздней и pipenv версии 2021.5.29 или более поздней. Чтобы проверить, установлен ли Python и pipenv, а также установленные версии, выполните команды python --version и pipenv --version. Установите Python и установите pipenv, если они еще не установлены.

    python --version
    pipenv --version
    
  • Проверка подлинности Azure Databricks, настроенная для поддерживаемого типа проверки подлинности, который требуется использовать. См. сведения о проверке подлинности в документации по поставщику Databricks Terraform.

Шаг 1. Создание проекта CDKTF

На этом шаге на локальном компьютере разработки вы настроили необходимую структуру каталогов для проекта CDKTF. Затем вы создадите проект CDKTF в этой структуре каталогов.

  1. Создайте пустой каталог для проекта CDKTF и перейдите в него. Выполните следующие команды в терминале или с помощью PowerShell:

    Unix, Linux и macOS

    mkdir cdktf-demo
    cd cdktf-demo
    

    Windows

    md cdktf-demo
    cd cdktf-demo
    
  2. Создайте проект CDKTF, выполнив следующую команду:

    cdktf init --template=python --local
    
  3. При появлении запроса на ввод имени проекта примите имя проекта по умолчанию cdktf-demo, нажав клавишу ВВОД.

  4. При появлении запроса на ввод описания проекта примите описание проекта по умолчанию , нажав клавишу ВВОД.

  5. При появлении запроса на начало работы с существующим проектом Terraform введите N и нажмите клавишу ВВОД.

  6. При появлении запроса на отправку отчетов о сбоях команде CDKTF введите n и нажмите клавишу ВВОД.

CDKTF создает следующие файлы и подкаталоги в каталоге cdktf-demo:

  • .gitignore, который представляет собой список файлов и каталогов, которые Git игнорирует, если вы хотите отправить этот проект в удаленный репозиторий Git.
  • cdktf.json с параметрами конфигурации для проекта CDKTF. Дополнительные сведения о параметрах конфигурации см. на странице с описанием файла конфигурации.
  • help со сведениями о некоторых последующих шагах для работы с проектом CDKTF.
  • main-test.py с вспомогательными модульными тестами, которые можно написать для проекта CDKTF. Дополнительные сведения о модульном тестировании см. на этой странице.
  • main.py с кодом Python, который вы написали для проекта CDKTF.
  • Pipfile и Pipfile.lock, управляющие зависимостями кода для проекта CDKTF.

Шаг 2. Определение ресурсов

На этом шаге вы воспользуетесь поставщиком Databricks в пакете CDK для Terraform, чтобы определить записную книжку и задание для ее выполнения.

  1. Установите зависимости проекта: с помощью pipenvустановите провайдер Terraform CDK Databricks в проект CDKTF для генерации ресурсов Azure Databricks. Для этого выполните следующее:

    pipenv install cdktf-cdktf-provider-databricks
    
  2. Замените содержимое main.py файла следующим кодом. Этот код выполняет проверку подлинности CDKTF в рабочей области Azure Databricks, а затем создает записную книжку вместе с заданием для запуска записной книжки. Сведения о синтаксисе этого кода см. в справочнике по конструктору поставщика Terraform CDK Databricks для Python.

    #!/usr/bin/env python
    from constructs import Construct
    from cdktf import (
      App, TerraformStack, TerraformOutput
    )
    from cdktf_cdktf_provider_databricks import (
      data_databricks_current_user,
      job, notebook, provider
    )
    import vars
    from base64 import b64encode
    
    class MyStack(TerraformStack):
      def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)
    
        provider.DatabricksProvider(
          scope = self,
          id    = "databricksAuth"
        )
    
        current_user = data_databricks_current_user.DataDatabricksCurrentUser(
          scope     = self,
          id_       = "currentUser"
        )
    
        # Define the notebook.
        my_notebook = notebook.Notebook(
          scope          = self,
          id_            = "notebook",
          path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
          language       = "PYTHON",
          content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
        )
    
        # Define the job to run the notebook.
        my_job = job.Job(
          scope = self,
          id_ = "job",
          name = f"{vars.resource_prefix}-job",
          task = [ 
            job.JobTask(
              task_key = f"{vars.resource_prefix}-task",
              new_cluster = job.JobTaskNewCluster(
                num_workers   = vars.num_workers,
                spark_version = vars.spark_version,
                node_type_id  = vars.node_type_id
              ),
              notebook_task = job.JobTaskNotebookTask(
                notebook_path = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py"
              ),
              email_notifications = job.JobTaskEmailNotifications(
                on_success = [ current_user.user_name ],
                on_failure = [ current_user.user_name ]
              )
            )
          ]
        )
    
        # Output the notebook and job URLs.
        TerraformOutput(
          scope = self,
          id    = "Notebook URL",
          value = my_notebook.url
        )
    
        TerraformOutput(
          scope = self,
          id    = "Job URL",
          value = my_job.url
        )
    
    app = App()
    MyStack(app, "cdktf-demo")
    app.synth()
    
  3. Создайте файл с именем vars.py в том же каталоге, что main.pyи . Замените следующие значения собственными значениями, чтобы указать префикс ресурса и параметры кластера, такие как число рабочих, строк версии среды выполнения Spark, а тип узла.

    #!/usr/bin/env python
    resource_prefix = "cdktf-demo"
    num_workers     = 1
    spark_version   = "14.3.x-scala2.12"
    node_type_id    = "Standard_D3_v2"
    

Шаг 3. Развертывание ресурсов

На этом шаге вы воспользуетесь CDKTF CLI для развертывания в существующей рабочей области Azure Databricks определенной записной книжки и задания для ее запуска.

  1. Создайте эквивалент кода Terraform для проекта CDKTF. Для этого выполните следующую командуcdktf synth.

    cdktf synth
    
  2. Перед внесением изменений можно просмотреть ожидающие изменения ресурсов. Выполните следующее:

    cdktf diff
    
  3. Разверните записную книжку и задание, выполнив команду cdktf deploy.

    cdktf deploy
    
  4. При появлении запроса на утверждение нажмите клавишу ВВОД. Terraform создаст и развернет записную книжку и задание в рабочей области.

Шаг 4. Взаимодействие с ресурсами

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

  1. Чтобы просмотреть записную книжку, которую задание запустит в рабочей области, скопируйте ссылку URL-адрес записной книжки из выходных данных команды cdk deploy и вставьте ее в адресную строку веб-браузера.
  2. Чтобы просмотреть задание, которое выполняет записную книжку в рабочей области, скопируйте ссылку URL-адрес задания из выходных данных команды cdk deploy и вставьте ее в адресную строку веб-браузера.
  3. Чтобы запустить задание, нажмите кнопку Запустить на странице задания.

(Необязательно) Шаг 5. Внесение изменений в ресурс

На этом необязательном шаге вы измените код записной книжки, повторно развернете измененную записную книжку, а затем используете задание для повторного запуска измененной записной книжки.

Если вы не хотите вносить изменения в записную книжку, перейдите к Шагу 6. Очистка.

  1. В файле измените main.py объявление переменной notebook следующим образом:

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b"display(spark.range(10))").decode("UTF-8")
    )
    

    Вместо нее укажите следующую:

    my_notebook = notebook.Notebook(
      scope          = self,
      id_            = "notebook",
      path           = f"{current_user.home}/CDKTF/{vars.resource_prefix}-notebook.py",
      language       = "PYTHON",
      content_base64 = b64encode(b'''
    data = [
       { "Category": 'A', "ID": 1, "Value": 121.44 },
       { "Category": 'B', "ID": 2, "Value": 300.01 },
       { "Category": 'C', "ID": 3, "Value": 10.99 },
       { "Category": 'E', "ID": 4, "Value": 33.87}
    ]
    
    df = spark.createDataFrame(data)
    
    display(df)
    ''').decode("UTF-8")
    )
    

    Примечание.

    Убедитесь, что строки кода между тремя кавычками (''') соответствуют краю редактора кода, как показано ниже. В противном случае Terraform вставит в записную книжку дополнительные пробелы, что может привести к сбою выполнения нового кода на Python.

  2. Повторно создайте эквивалент кода Terraform для проекта CDKTF. Для этого выполните следующее:

    cdktf synth
    
  3. Перед внесением изменений можно просмотреть ожидающие изменения ресурсов. Выполните следующее:

    cdktf diff
    
  4. Разверните изменения записной книжки, выполнив команду cdktf deploy.

    cdktf deploy
    
  5. При появлении запроса на утверждение нажмите клавишу ВВОД. Terraform изменит содержимое записной книжки.

  6. Чтобы просмотреть измененную записную книжку, которую задание будет выполняться в рабочей области, обнов ите записную книжку, открываемую ранее, или скопируйте ссылку записной книжки, которая отображается в выходных данных команды и вставьте ее в адресную строку веб-браузера.

  7. Чтобы просмотреть задание, которое запускает измененную записную книжку в рабочей области, обновите задание, которое вы открыли ранее, или скопируйте ссылку задания , которая отображается в выходных данных команды и вставьте ее в адресную строку веб-браузера.

  8. Чтобы запустить задание, нажмите кнопку Запустить на странице задания.

Шаг 6. Очистка

На этом этапе вы используете интерфейс командной строки CDKTF для удаления блокнота и задания из вашей среды Azure Databricks.

  1. Удалите ресурсы из рабочей области, выполнив команду cdktf destroy:

    cdktf destroy
    
  2. При появлении запроса на утверждение нажмите клавишу ВВОД. Terraform удаляет ресурсы из рабочей области.

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

Перед развертыванием проекта CDKTF вы можете протестировать проект CDKTF. См . модульные тесты в документации ПО CDKTF.

Для проектов CDKTF на основе Python можно создавать и запускать тесты с помощью платформы тестов Python pytest вместе с классом cdktf пакета Testing . В следующем примере файла с именем test_main.py проверяется код CDKTF в предыдущем main.py файле этой статьи. Первый тест проверяет, будет ли записная книжка проекта содержать ожидаемое представление содержимого записной книжки в кодировке Base64. Второй тест проверяет, будет ли задание проекта содержать ожидаемое имя задания. Чтобы выполнить эти тесты, выполните pytest команду из корневого каталога проекта.

from cdktf import App, Testing
from cdktf_cdktf_provider_databricks import job, notebook
from main import MyStack

class TestMain:
  app = App()
  stack = MyStack(app, "cdktf-demo")
  synthesized = Testing.synth(stack)

  def test_notebook_should_have_expected_base64_content(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = notebook.Notebook.TF_RESOURCE_TYPE,
      properties = {
        "content_base64": "ZGlzcGxheShzcGFyay5yYW5nZSgxMCkp"
      }
    )

  def test_job_should_have_expected_job_name(self):
    assert Testing.to_have_resource_with_properties(
      received = self.synthesized,
      resource_type = job.Job.TF_RESOURCE_TYPE,
      properties = {
        "name": "cdktf-demo-job"
      }
    )

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