Databricks Terraform-szolgáltató

A HashiCorp Terraform egy népszerű nyílt forráskód eszköz, amellyel biztonságos és kiszámítható felhőinfrastruktúra jön létre több felhőszolgáltató között. A Databricks Terraform-szolgáltatóval rugalmas, hatékony eszközzel kezelheti Azure Databricks-munkaterületeit és a hozzá tartozó felhőinfrastruktúra adatait. A Databricks Terraform-szolgáltató célja az összes Databricks REST API támogatása, amely támogatja az adatplatformok üzembe helyezésének és kezelésének legbonyolultabb aspektusainak automatizálását. A Databricks ügyfelei a Databricks Terraform szolgáltatót használják fürtök és feladatok üzembe helyezésére és kezelésére, valamint az adathozzáférés konfigurálására. Az Azure Provider használatával hozhat létre Azure Databricks-munkaterületeket.

Első lépések

Ebben a szakaszban követelményeket telepít és konfigurál a Terraform és a Databricks Terraform-szolgáltató helyi fejlesztői gépen való használatához. Ezután konfigurálja a Terraform-hitelesítést. Ezt a szakaszt követve ez a cikk egy mintakonfigurációt tartalmaz, amellyel kísérletezhet egy Azure Databricks-jegyzetfüzet, -fürt és egy feladat kiépítésével, amellyel a jegyzetfüzetet egy meglévő Azure Databricks-munkaterületen futtathatja a fürtön.

Követelmények

  1. Rendelkeznie kell a Terraform parancssori felületével. Lásd: Terraform letöltése a Terraform webhelyén.

  2. Terraform-projektnek kell lennie. A terminálban hozzon létre egy üres könyvtárat, majd váltson rá. (A Terraform-konfigurációs fájlok mindegyikének a saját könyvtárában kell lennie, amelyet Terraform-projektnek nevezünk.) Például: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    Terraform-konfigurációk belefoglalása a projekthez egy vagy több konfigurációs fájlba a Terraform-projektben. A konfigurációs fájl szintaxisával kapcsolatos információkért tekintse meg a Terraform nyelvi dokumentációját a Terraform webhelyén.

  3. A Terraform-projekthez hozzá kell adnia egy függőséget a Databricks Terraform-szolgáltatóhoz. Adja hozzá a következőket a Terraform-projekt egyik konfigurációs fájljához:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. A Terraform-projekt hitelesítését konfigurálnia kell. Lásd a Hitelesítést a Databricks Terraform szolgáltató dokumentációjában.

Mintakonfiguráció

Ez a szakasz egy mintakonfigurációt biztosít, amellyel kísérletezhet egy Azure Databricks-jegyzetfüzet, egy fürt és egy feladat üzembe helyezéséhez a fürtön, egy meglévő Azure Databricks-munkaterületen. Feltételezi, hogy már beállította a követelményeket, valamint létrehozott egy Terraform-projektet, és terraform-hitelesítéssel konfigurálta a projektet az előző szakaszban leírtak szerint.

  1. Hozzon létre egy fájlt me.tf a Terraform-projektben, és adja hozzá a következő kódot. Ez a fájl információt kap az aktuális felhasználóról (Önről):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. Hozzon létre egy másik nevű fájlt notebook.tf, és adja hozzá a következő kódot. Ez a fájl a jegyzetfüzetet jelöli.

    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. Hozzon létre egy másik nevű fájlt notebook.auto.tfvars, és adja hozzá a következő kódot. Ez a fájl határozza meg a jegyzetfüzet tulajdonságait.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. Hozzon létre egy másik nevű fájlt notebook-getting-started.py, és adja hozzá a következő kódot. Ez a fájl a jegyzetfüzet tartalmát jelöli.

    display(spark.range(10))
    
  5. Hozzon létre egy másik nevű fájlt cluster.tf, és adja hozzá a következő kódot. Ez a fájl a fürtöt jelöli.

    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. Hozzon létre egy másik nevű fájlt cluster.auto.tfvars, és adja hozzá a következő kódot. Ez a fájl határozza meg a fürt tulajdonságait.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. Hozzon létre egy másik nevű fájlt job.tf, és adja hozzá a következő kódot. Ez a fájl azt a feladatot jelöli, amely a fürtön futtatja a jegyzetfüzetet.

    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. Hozzon létre egy másik nevű fájlt job.auto.tfvars, és adja hozzá a következő kódot. Ez a fájl határozza meg a feladatok tulajdonságait.

    job_name = "My Job"
    task_key = "my_task"
    
  9. Futtassa az terraform plan parancsot. Ha hiba történt, javítsa ki őket, majd futtassa újra a parancsot.

  10. Futtassa az terraform apply parancsot.

  11. Ellenőrizze, hogy a jegyzetfüzet, a fürt és a feladat létre lett-e hozva: a terraform apply parancs kimenetében keresse meg a parancs URL-címét notebook_url, cluster_urlés job_urllépjen hozzájuk.

  12. Futtassa a feladatot: a Feladatok lapon kattintson a Futtatás most gombra. A feladat befejezése után ellenőrizze az e-mail-postaládáját.

  13. Ha végzett ezzel a mintával, futtassa terraform destroya jegyzetfüzetet, a fürtöt és a feladatot az Azure Databricks-munkaterületről.

    Feljegyzés

    A , terraform applyés terraform destroy parancsokkal kapcsolatos további információkért tekintse meg a terraform planTerraform parancssori felületének dokumentációját a Terraform dokumentációjában.

  14. Ellenőrizze, hogy törölték-e a jegyzetfüzetet, a fürtöt és a feladatot: frissítse a jegyzetfüzet, a fürt és a Feladatok lapokat mindegyikre, és megjelenítsen egy üzenetet, amely szerint az erőforrás nem található.

Tesztelés

Tesztelje a Terraform-konfigurációkat az üzembe helyezés előtt vagy után. Az erőforrások üzembe helyezése előtt az egységteszteléshez hasonló teszteket futtathat. Az erőforrások üzembe helyezése után az integrációs teszteléshez hasonló teszteket is futtathat. Lásd : Tesztek a Terraform dokumentációjában.

A jelen cikk mintakonfigurációján az integrációs tesztekhez hasonló teszteket futtathat a következő eljárással:

  1. Hozzon létre egy nevű cluster.tftest.hclfájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett fürt rendelkezik-e a várt fürtnévvel.

    # 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. Hozzon létre egy nevű job.tftest.hclfájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett feladat rendelkezik-e a várt feladatnévvel.

    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. Hozzon létre egy nevű notebook.tftest.hclfájlt, és adja hozzá a következő kódot. Ez a fájl ellenőrzi, hogy az üzembe helyezett jegyzetfüzet rendelkezik-e a várt munkaterület-elérési útlal.

    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. Futtassa az terraform test parancsot. A Terraform üzembe helyezi az egyes erőforrásokat az Azure Databricks-munkaterületen, futtatja az egyes kapcsolódó teszteket, és jelentést készít a teszt eredményéről, majd lebontja az üzembe helyezett erőforrást.

Futtassa a cikk mintakonfigurációjának egységtesztjeihez hasonló teszteket a következő eljárással:

  • Módosítsa az előző tesztek sorát command = apply a következőre command = plan, majd futtassa terraform test. A Terraform futtatja az egyes kapcsolódó teszteket, és jelentést készít a teszt eredményéről, de nem helyez üzembe erőforrásokat.
  • Használja a Databricks Terraform-szolgáltatót, amely lehetővé teszi, hogy erőforrások üzembe helyezése és hitelesítési hitelesítő adatok megkövetelése nélkül fusson terraform test . Lásd : Mocks in the Terraform documentation. A modelltesztek futtatásához az egyik módszer az, hogy hozzáadja a vonalat mock_provider "databricks" {} a tesztekhez, és eltávolítja a vonalat command = apply , vagy command = planpéldául:
# 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"
  }
}

Következő lépések

  1. Azure Databricks-munkaterület létrehozása.
  2. Azure Databricks-munkaterület munkaterületi erőforrásainak kezelése.

Hibaelhárítás

Feljegyzés

A Terraform-specifikus támogatásért tekintse meg a Legújabb Terraform-témaköröket a HashiCorp Vita webhelyén. A Databricks Terraform-szolgáltatóval kapcsolatos problémákért lásd a databrickslabs/terraform-provider-databricks GitHub-adattár problémáit.

Hiba: Nem sikerült telepíteni a szolgáltatót

Probléma: Ha nem adott be terraform.lock.hcl fájlt a verziókövetési rendszerbe, és futtatja a terraform init parancsot, a következő üzenet jelenik meg: Failed to install provider. A további kimenetek a következőhöz hasonló üzenetet tartalmazhatnak:

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"

Ok: A Terraform-konfigurációk elavult Databricks Terraform-szolgáltatókra hivatkoznak.

Solution

  1. databricks/databricks Cserélje le databrickslabs/databricks az összes .tf fájlra.

    A csere automatizálásához futtassa a következő Python-parancsot a frissíteni kívánt fájlokat tartalmazó .tf szülőmappából:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. Futtassa a következő Terraform-parancsot, majd hagyja jóvá a módosításokat, amikor a rendszer kéri:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    A parancsról további információt a Terraform dokumentációjában található Command: state replace-provider című témakörben talál.

  3. Ellenőrizze a módosításokat a következő Terraform parancs futtatásával:

    terraform init
    

Hiba: Nem sikerült lekérdezni az elérhető szolgáltatói csomagokat

Probléma: Ha nem adott be terraform.lock.hcl fájlt a verziókövetési rendszerbe, és futtatja a terraform init parancsot, a következő üzenet jelenik meg: Failed to query available provider packages.

Ok: A Terraform-konfigurációk elavult Databricks Terraform-szolgáltatókra hivatkoznak.

Megoldás: Kövesse a hiba megoldási utasításait : Nem sikerült telepíteni a szolgáltatót.

Naplózás engedélyezése

A Databricks Terraform-szolgáltató olyan naplókat ad ki, amelyeket engedélyezhet a TF_LOG környezeti változó DEBUG beállításával vagy bármely más, a Terraform által támogatott naplószinttel.

Alapértelmezés szerint a rendszer naplókat küld a rendszer.stderr Ha naplókat szeretne küldeni egy fájlba, állítsa a TF_LOG_PATH környezeti változót a célfájl elérési útjára.

Futtathatja például a következő parancsot a naplózás hibakeresési szinten való engedélyezéséhez, valamint a monokróm formátumú naplók az aktuális munkakönyvtárhoz képest elnevezett tf.log fájlba való kimenetéhez, miközben a terraform apply parancs fut:

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

A Terraform naplózásáról további információt a Terraform hibakeresésében talál.

További példák

További erőforrások