موفر Databricks Terraform

HashiCorp Terraform هي أداة مصدر مفتوح شائعة لإنشاء بنية أساسية سحابية آمنة ويمكن التنبؤ بها عبر العديد من موفري السحابة. يمكنك استخدام موفر Databricks Terraform لإدارة مساحات عمل Azure Databricks والبنية الأساسية السحابية المرتبطة باستخدام أداة مرنة وقوية. الهدف من موفر Databricks Terraform هو دعم جميع واجهات برمجة تطبيقات Databricks REST، ودعم أتمتة الجوانب الأكثر تعقيدا لنشر وإدارة الأنظمة الأساسية للبيانات الخاصة بك. يستخدم عملاء Databricks موفر Databricks Terraform لنشر المجموعات والوظائف وإدارتها وتكوين الوصول إلى البيانات. يمكنك استخدام موفر Azure لتوفير مساحات عمل Azure Databricks.

الشروع في العمل

في هذا القسم، يمكنك تثبيت المتطلبات وتكوينها لاستخدام Terraform وموفر Databricks Terraform على جهاز التطوير المحلي. ثم تقوم بتكوين مصادقة Terraform. بعد هذا القسم، توفر هذه المقالة نموذج تكوين يمكنك تجربته لتوفير دفتر ملاحظات Azure Databricks، نظام مجموعة، ومهمة لتشغيل دفتر الملاحظات على نظام المجموعة في مساحة عمل Azure Databricks موجودة.

المتطلبات

  1. يجب أن يكون لديك Terraform CLI. راجع تنزيل Terraform على موقع Terraform على الويب.

  2. يجب أن يكون لديك مشروع Terraform. في المحطة الطرفية الخاصة بك، قم بإنشاء دليل فارغ ثم قم بالتبديل إليه. (يجب أن تكون كل مجموعة منفصلة من ملفات تكوين Terraform في دليلها الخاص، والذي يسمى مشروع Terraform.) على سبيل المثال: mkdir terraform_demo && cd terraform_demo.

    mkdir terraform_demo && cd terraform_demo
    

    قم بتضمين تكوينات Terraform لمشروعك في ملف تكوين واحد أو أكثر في مشروع Terraform. للحصول على معلومات حول بناء جملة ملف التكوين، راجع وثائق لغة Terraform على موقع Terraform على الويب.

  3. يجب إضافة إلى مشروع Terraform الخاص بك تبعية لموفر Databricks Terraform. أضف ما يلي إلى أحد ملفات التكوين في مشروع Terraform:

    terraform {
      required_providers {
        databricks = {
          source = "databricks/databricks"
        }
      }
    }
    
  4. يجب تكوين المصادقة لمشروع Terraform الخاص بك. راجع المصادقة في وثائق موفر Databricks Terraform.

عينة التكوين

يوفر هذا القسم نموذج تكوين يمكنك تجربته لتوفير دفتر ملاحظات Azure Databricks، كتلة، ووظيفة لتشغيل دفتر الملاحظات على نظام المجموعة، في مساحة عمل Azure Databricks موجودة. يفترض أنك قمت بالفعل بإعداد المتطلبات، بالإضافة إلى إنشاء مشروع Terraform وتكوين المشروع باستخدام مصادقة Terraform كما هو موضح في القسم السابق.

  1. أنشئ ملفا باسم me.tf في مشروع Terraform، وأضف التعليمات البرمجية التالية. يحصل هذا الملف على معلومات حول المستخدم الحالي (أنت):

    # Retrieve information about the current user.
    data "databricks_current_user" "me" {}
    
  2. أنشئ ملفا آخر باسم notebook.tf، وأضف التعليمات البرمجية التالية. يمثل هذا الملف دفتر الملاحظات.

    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. أنشئ ملفا آخر باسم notebook.auto.tfvars، وأضف التعليمات البرمجية التالية. يحدد هذا الملف خصائص دفتر الملاحظات.

    notebook_subdirectory = "Terraform"
    notebook_filename     = "notebook-getting-started.py"
    notebook_language     = "PYTHON"
    
  4. أنشئ ملفا آخر باسم notebook-getting-started.py، وأضف التعليمات البرمجية التالية. يمثل هذا الملف محتويات دفتر الملاحظات.

    display(spark.range(10))
    
  5. أنشئ ملفا آخر باسم cluster.tf، وأضف التعليمات البرمجية التالية. يمثل هذا الملف نظام المجموعة.

    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. أنشئ ملفا آخر باسم cluster.auto.tfvars، وأضف التعليمات البرمجية التالية. يحدد هذا الملف خصائص نظام المجموعة.

    cluster_name                    = "My Cluster"
    cluster_autotermination_minutes = 60
    cluster_num_workers             = 1
    
  7. أنشئ ملفا آخر باسم job.tf، وأضف التعليمات البرمجية التالية. يمثل هذا الملف المهمة التي تقوم بتشغيل دفتر الملاحظات على نظام المجموعة.

    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. أنشئ ملفا آخر باسم job.auto.tfvars، وأضف التعليمات البرمجية التالية. يحدد هذا الملف خصائص الوظائف.

    job_name = "My Job"
    task_key = "my_task"
    
  9. شغّل terraform plan. إذا كانت هناك أي أخطاء، فقم بإصلاحها، ثم قم بتشغيل الأمر مرة أخرى.

  10. شغّل terraform apply.

  11. تحقق من إنشاء دفتر الملاحظات والكتلة والمهمة: في إخراج terraform apply الأمر، ابحث عن عناوين URL ل notebook_urlcluster_urlو و job_urlوانتقل إليها.

  12. تشغيل المهمة: في صفحة المهام ، انقر فوق تشغيل الآن. بعد انتهاء المهمة، تحقق من علبة الوارد للبريد الإلكتروني.

  13. عند الانتهاء من هذا النموذج، احذف دفتر الملاحظات والكتلة والمهمة من مساحة عمل Azure Databricks عن طريق تشغيل terraform destroy.

    إشعار

    لمزيد من المعلومات حول terraform planterraform applyالأوامر و وterraform destroy، راجع وثائق Terraform CLI في وثائق Terraform.

  14. تحقق من حذف دفتر الملاحظات والكتلة والمهمة: قم بتحديث صفحات دفتر الملاحظات والمجموعة والوظائف لكل منها بعرض رسالة تفيد بأنه لا يمكن العثور على المورد.

الاختبار

اختبر تكوينات Terraform قبل توزيعها أو بعدها. يمكنك تشغيل اختبارات مشابهة لاختبار الوحدة قبل توزيع الموارد. يمكنك أيضا تشغيل اختبارات مشابهة لاختبار التكامل بعد توزيع الموارد. راجع الاختبارات في وثائق Terraform.

قم بتشغيل اختبارات مشابهة لاختبارات التكامل مقابل تكوين عينة هذه المقالة باتباع هذه العملية:

  1. أنشئ ملفا باسم cluster.tftest.hcl، وأضف التعليمات البرمجية التالية. يختبر هذا الملف ما إذا كان نظام المجموعة المنشورة يحتوي على اسم نظام المجموعة المتوقع.

    # 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. أنشئ ملفا باسم job.tftest.hcl، وأضف التعليمات البرمجية التالية. يختبر هذا الملف ما إذا كانت الوظيفة المنشورة لها اسم الوظيفة المتوقع.

    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. أنشئ ملفا باسم notebook.tftest.hcl، وأضف التعليمات البرمجية التالية. يختبر هذا الملف ما إذا كان دفتر الملاحظات المنشور يحتوي على مسار مساحة العمل المتوقع.

    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. شغّل terraform test. ينشر Terraform كل مورد إلى مساحة عمل Azure Databricks، ويشغل كل اختبار ذي صلة، ويبلغ عن نتيجة الاختبار الخاصة به، ثم يمزق المورد المنشور.

قم بتشغيل اختبارات مشابهة لاختبارات الوحدة مقابل تكوين عينة هذه المقالة مع العملية التالية:

  • قم بتغيير السطر command = apply في كل من الاختبارات السابقة إلى command = plan، ثم قم بتشغيل terraform test. يقوم Terraform بتشغيل كل اختبار ذي صلة والإبلاغ عن نتيجة الاختبار الخاصة به ولكنه لا ينشر أي موارد.
  • تقليد موفر Databricks Terraform، والذي يمكنك من التشغيل terraform test دون نشر الموارد وأيضا دون الحاجة إلى أي بيانات اعتماد مصادقة. راجع الصور الوهمية في وثائق Terraform. لإجراء اختبارات وهمية، يتمثل أحد النهج في إضافة السطر mock_provider "databricks" {} إلى اختباراتك وإزالة السطر command = apply أو command = plan، على سبيل المثال:
# 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"
  }
}

الخطوات التالية

  1. إنشاء مساحة عمل Azure Databricks.
  2. إدارة موارد مساحة العمل لمساحة عمل Azure Databricks.

استكشاف الأخطاء وإصلاحها

إشعار

للحصول على دعم خاص ب Terraform، راجع أحدث مواضيع Terraform على موقع HashiCorp Discuss على الويب. بالنسبة للمشكلات الخاصة بموفر Databricks Terraform، راجع المشكلات في مستودع Databrickslabs/terraform-provider-databricks GitHub.

خطأ: فشل تثبيت الموفر

المشكلة: إذا لم تقم إيداع ملف إلى نظام التحكم بالإصدار terraform.lock.hcl الخاص بك، وقمت بتشغيل terraform init الأمر، فستظهر الرسالة التالية: Failed to install provider. قد يتضمن الإخراج الإضافي رسالة مشابهة للرسالة التالية:

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"

السبب: تشير تكوينات Terraform إلى موفري Databricks Terraform القديمين.

الحل:

  1. استبدل databrickslabs/databricks ب databricks/databricks في جميع ملفاتك .tf .

    لأتمتة هذه الاستبدالات، قم بتشغيل أمر Python التالي من المجلد الأصل الذي يحتوي على الملفات .tf المراد تحديثها:

    python3 -c "$(curl -Ls https://dbricks.co/updtfns)"
    
  2. تشغيل الأمر Terraform التالي ثم الموافقة على التغييرات عند مطالبتك:

    terraform state replace-provider databrickslabs/databricks databricks/databricks
    

    للحصول على معلومات حول هذا الأمر، راجع الأمر: موفر استبدال الحالة في وثائق Terraform.

  3. تحقق من التغييرات عن طريق تشغيل الأمر Terraform التالي:

    terraform init
    

خطأ: فشل الاستعلام عن حزم الموفر المتوفرة

المشكلة: إذا لم تقم إيداع ملف إلى نظام التحكم بالإصدار terraform.lock.hcl الخاص بك، وقمت بتشغيل terraform init الأمر، فستظهر الرسالة التالية: Failed to query available provider packages.

السبب: تشير تكوينات Terraform إلى موفري Databricks Terraform القديمين.

الحل: اتبع إرشادات الحل في الخطأ: فشل تثبيت الموفر.

تمكين التسجيل

يقوم موفر Databricks Terraform بإخراج السجلات التي يمكنك تمكينها عن طريق تعيين TF_LOG متغير البيئة إلى DEBUG أو أي مستوى سجل آخر يدعمه Terraform.

بشكل افتراضي، يتم إرسال السجلات إلى stderr. لإرسال سجلات إلى ملف، قم بتعيين TF_LOG_PATH متغير البيئة إلى مسار الملف الهدف.

على سبيل المثال، يمكنك تشغيل الأمر التالي لتمكين التسجيل على مستوى تتبع الأخطاء، وإخراج السجلات بتنسيق أحادي اللون إلى ملف يسمى tf.log نسبة إلى دليل العمل الحالي، أثناء terraform apply تشغيل الأمر:

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

لمزيد من المعلومات حول تسجيل Terraform، راجع تصحيح أخطاء Terraform.

أمثلة إضافية

الموارد الإضافية