Terraform CDK Databricks 提供者
注意
本文涵蓋 Terraform 的雲端開發工具包 (CDKTF),Databricks 既未提供也不支援。 若要連絡提供者,請參閱 Terraform Community。
本文說明如何使用 Python 以及 Terraform CDK Databricks 提供者 和 適用於 Terraform 的雲端開發工具包 (CDKTF) 。 CDKTF 是第三方基礎結構即程式代碼 (IaC) 平臺,可讓您使用熟悉的程式設計語言、工具和工程實務來建立、部署及管理 Azure Databricks 資源。 雖然本文說明如何使用 Python,但 CDKTF 支援其他語言,例如 TypeScript、Java、C# 和 Go。
Terraform CDK Databricks 提供者是以 Databricks Terraform 提供者為基礎。 如需詳細資訊,請參閱 Terraform Cloud。 CDKTF 是以 AWS 雲端開發工具套件 (AWS CDK) 為基礎。
需求
您必須擁有 Azure Databricks 工作區,因為本文會將資源部署至現有的工作區。
在本機開發計算機上,您必須安裝下列專案:
Terraform 1.1 版或更高版本。 若要檢查是否已安裝 Terraform,以及檢查已安裝的版本,請從終端機或使用 PowerShell 執行 命令
terraform -v
。 如果您尚未安裝 Terraform,請安裝它。terraform -v
Node.js 16.13 版或更高版本,以及 npm。 若要檢查您是否Node.js並
npm
安裝,以及檢查已安裝的版本,請執行 命令node -v
和npm -v
。 最新版本的 Node.js已經包含npm
。 如果您尚未安裝Node.js且已安裝節點版本管理員,請使用節點版本管理員安裝 Node.js 和npm
npm。node -v npm -v
CDKTF CLI。 若要檢查是否已安裝 CDKTF CLI,以及檢查已安裝的版本,請執行 命令
cdktf --version
。 如果您尚未安裝CDKTF CLI,請使用 npm 安裝CDKTF CLI。cdktf --version
提示
您也可以使用 Homebrew 在 macOS 上安裝 CDKTF CLI。 請參閱 安裝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
當系統提示您輸入項目名稱時,按 Enter 鍵接受 的預設項目名稱
cdktf-demo
。當系統提示您輸入 專案描述時,按 Enter 鍵接受預設專案描述。
如果出現 [您要從現有的 Terraform 項目開始] 的提示,請輸入
N
,然後按 Enter。如果系統提示您是否要將當機報告傳送給CDKTF小組,請輸入 ,然後按 Enter
n
鍵。
CDKTF 會在您的 cdktf-demo
目錄中建立下列檔案和子目錄:
.gitignore
,這是如果您想要將此專案推送至遠端 Git 存放庫,Git 會忽略的檔案和目錄清單。cdktf.json
,其中包含CDKTF專案的組態設定。 如需組態設定的詳細資訊,請參閱 組態檔 。help
,其中包含一些後續步驟的相關信息,可讓您使用CDKTF專案。main-test.py
,其中包含您可以為CDKTF專案撰寫的支援單元測試。 如需單元測試的詳細資訊,請參閱 單元測試 。main.py
,其中包含您為CDKTF專案撰寫的 Python 程式代碼。Pipfile
和Pipfile.lock
,其會管理CDKTF專案的程式代碼相依性。
步驟 2:定義資源
在此步驟中,您會使用 Terraform CDK Databricks 提供者來定義筆記本,以及執行該筆記本的作業。
安裝專案相依性:使用
pipenv
,將 Terraform CDK Databricks 提供者安裝到 CDKTF 專案中,以產生 Azure Databricks 資源。 若要這樣做,請執行下列命令:pipenv install cdktf-cdktf-provider-databricks
以下列程式代碼取代檔案的內容
main.py
。 此程式代碼會向 Azure Databricks 工作區驗證 CDKTF,然後產生筆記本以及執行筆記本的作業。 若要檢視此程式代碼的語法檔,請參閱 Python 的 Terraform CDK Databricks 提供者建構參考。#!/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()
在與
main.py
相同的目錄中建立名為vars.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 工作區、定義的筆記本和作業部署至該筆記本。
為您的CDKTF項目產生對等的 Terraform 程式代碼。 若要這麼做,請執行
cdktf synth
命令。cdktf synth
進行變更之前,您可以檢閱擱置中的資源變更。 執行下列步驟:
cdktf diff
執行
cdktf deploy
命令來部署筆記本和作業。cdktf deploy
出現核准提示時,請按 Enter 鍵。 Terraform 會建立筆記本和作業,並將其部署至您的工作區。
步驟 4:與資源互動
在此步驟中,您會在 Azure Databricks 工作區中執行作業,以執行指定的筆記本。
- 若要檢視作業將在工作區中執行的筆記本,請複製命令輸出
cdk deploy
中顯示的 Notebook URL 連結,並將它貼到網頁瀏覽器的網址列中。 - 若要檢視在工作區中執行筆記本的工作,請複製命令輸出
cdk deploy
中顯示的作業 URL 連結,並將它貼到網頁瀏覽器的網址列中。 - 若要執行作業,請按下作業頁面上的 [ 立即 執行] 按鈕。
(選擇性)步驟 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 程式代碼無法執行。重新產生與CDKTF專案相等的Terraform程式代碼。 若要這樣做,請執行下列命令:
cdktf synth
進行變更之前,您可以檢閱擱置中的資源變更。 執行下列步驟:
cdktf diff
執行
cdktf deploy
命令來部署筆記本變更。cdktf deploy
出現核准提示時,請按 Enter 鍵。 Terraform 會變更筆記本的內容。
若要檢視作業將在工作區中執行的已變更筆記本,請重新整理您稍早開啟的筆記本,或複製命令輸出
cdk deploy
中顯示的 Notebook URL 連結,並將其貼到網頁瀏覽器的網址列中。若要檢視在工作區中執行已變更筆記本的作業,請重新整理您稍早開啟的作業,或複製命令輸出
cdk deploy
中顯示的作業 URL 連結,並將其貼到網頁瀏覽器的網址列中。若要執行作業,請按下作業頁面上的 [ 立即 執行] 按鈕。
步驟 6:清除
在此步驟中,您會使用CDKTF CLI從 Azure Databricks 工作區移除筆記本和作業。
執行
cdktf destroy
命令,以從工作區移除資源:cdktf destroy
出現核准提示時,請按 Enter 鍵。 Terraform 會從工作區中移除資源。
測試
您可以在部署CDKTF專案之前先測試它。 請參閱 CDKTF檔中的單元測試 。
針對以 Python 為基礎的 CDKTF 專案,您可以使用 Python 測試架構 pytest 以及 cdktf
套件的 Testing
類別來撰寫和執行測試。 下列名為 test_main.py
的範例檔案會測試本文先前 main.py
檔案中的CDKTF程式代碼。 第一個測試會檢查項目的筆記本是否包含筆記本內容的預期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"
}
)
更多資源
- TypeScript、Python、Java、C# 和 Go 的 Terraform CDK Databricks 提供者建構參考
- 啟用CDKTF應用程式的記錄