Поставщик 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 в этой структуре каталогов.
Создайте пустой каталог для проекта CDKTF и перейдите в него. Выполните следующие команды в терминале или с помощью PowerShell:
Unix, Linux и macOS
mkdir cdktf-demo cd cdktf-demo
Windows
md cdktf-demo cd cdktf-demo
Создайте проект CDKTF, выполнив следующую команду:
cdktf init --template=python --local
При появлении запроса на ввод имени проекта примите имя проекта по умолчанию
cdktf-demo
, нажав клавишу ВВОД.При появлении запроса на ввод описания проекта примите описание проекта по умолчанию , нажав клавишу ВВОД.
При появлении запроса на начало работы с существующим проектом Terraform введите
N
и нажмите клавишу ВВОД.При появлении запроса на отправку отчетов о сбоях команде 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, чтобы определить записную книжку и задание для ее выполнения.
Установите зависимости проекта: с помощью
pipenv
установите провайдер Terraform CDK Databricks в проект CDKTF для генерации ресурсов Azure Databricks. Для этого выполните следующее:pipenv install cdktf-cdktf-provider-databricks
Замените содержимое
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()
Создайте файл с именем
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 определенной записной книжки и задания для ее запуска.
Создайте эквивалент кода Terraform для проекта CDKTF. Для этого выполните следующую команду
cdktf synth
.cdktf synth
Перед внесением изменений можно просмотреть ожидающие изменения ресурсов. Выполните следующее:
cdktf diff
Разверните записную книжку и задание, выполнив команду
cdktf deploy
.cdktf deploy
При появлении запроса на утверждение нажмите клавишу ВВОД. Terraform создаст и развернет записную книжку и задание в рабочей области.
Шаг 4. Взаимодействие с ресурсами
На этом шаге вы запустите задание, которое запускает указанную записную книжку, в рабочей области Azure Databricks.
- Чтобы просмотреть записную книжку, которую задание запустит в рабочей области, скопируйте ссылку URL-адрес записной книжки из выходных данных команды
cdk deploy
и вставьте ее в адресную строку веб-браузера. - Чтобы просмотреть задание, которое выполняет записную книжку в рабочей области, скопируйте ссылку URL-адрес задания из выходных данных команды
cdk deploy
и вставьте ее в адресную строку веб-браузера. - Чтобы запустить задание, нажмите кнопку Запустить на странице задания.
(Необязательно) Шаг 5. Внесение изменений в ресурс
На этом необязательном шаге вы измените код записной книжки, повторно развернете измененную записную книжку, а затем используете задание для повторного запуска измененной записной книжки.
Если вы не хотите вносить изменения в записную книжку, перейдите к Шагу 6. Очистка.
В файле измените
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.Повторно создайте эквивалент кода Terraform для проекта CDKTF. Для этого выполните следующее:
cdktf synth
Перед внесением изменений можно просмотреть ожидающие изменения ресурсов. Выполните следующее:
cdktf diff
Разверните изменения записной книжки, выполнив команду
cdktf deploy
.cdktf deploy
При появлении запроса на утверждение нажмите клавишу ВВОД. Terraform изменит содержимое записной книжки.
Чтобы просмотреть измененную записную книжку, которую задание будет выполняться в рабочей области, обнов
ите записную книжку, открываемую ранее, или скопируйте ссылку записной книжки, которая отображается в выходных данных командыи вставьте ее в адресную строку веб-браузера. Чтобы просмотреть задание, которое запускает измененную записную книжку в рабочей области, обновите задание, которое вы открыли ранее, или скопируйте ссылку задания
, которая отображается в выходных данных команды и вставьте ее в адресную строку веб-браузера. Чтобы запустить задание, нажмите кнопку Запустить на странице задания.
Шаг 6. Очистка
На этом этапе вы используете интерфейс командной строки CDKTF для удаления блокнота и задания из вашей среды Azure Databricks.
Удалите ресурсы из рабочей области, выполнив команду
cdktf destroy
:cdktf destroy
При появлении запроса на утверждение нажмите клавишу ВВОД. 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"
}
)
Дополнительные ресурсы
- Справочник по конструкциям поставщика Databricks в пакете CDK для Terraform для TypeScript, Python, Java, C# и Go
- Включение ведения журнала для приложений CDKTF