تحديد هوية تشغيل لسير عمل Databricks Asset Bundles

توضح هذه المقالة كيفية استخدام run_as الإعداد لتحديد الهوية التي يجب استخدامها عند تشغيل مهام سير عمل Databricks Asset Bundles.

run_as يمكن تكوين الإعداد كخرائط ذات مستوى أعلى لتطبيقه على الموارد، أو ضمن target تعيين توزيع في ملف تكوين مجموعة. يمكن تعيينه إلى user_name أو service_principal_name.

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

  • إذا كانت الهوية المستخدمة لنشر حزمة هي نفس الهوية التي تم تكوينها في إعداد المجموعة run_as ، فلا توجد قيود. يتم دعم جميع موارد المجموعة.
  • إذا كانت الهوية المستخدمة لنشر مجموعة مختلفة عن الهوية التي تم تكوينها في إعداد المجموعة run_as ، يتم دعم مجموعة فرعية فقط من موارد المجموعة. البنية الأساسية لبرنامج ربط العمليات التجارية ونقاط نهاية خدمة النموذج غير مدعومة.

تعيين هوية تشغيل مجموعة

لتعيين هوية التشغيل لموارد المجموعة، حدد run_as كخرائط ذات مستوى أعلى كما هو موضح في المثال التالي:

bundle:
  name: "run_as"

# This is the identity that will be used when "databricks bundle run my_test_job" is executed.
run_as:
  service_principal_name: "5cf3z04b-a73c-4x46-9f3d-52da7999069e"

resources:
  jobs:
    my_test_job _1:
      name: Test job 1
      tasks:
        - task_key: "task_1"
          new_cluster:
            num_workers: 1
            spark_version: 13.2.x-snapshot-scala2.12
            node_type_id: i3.xlarge
            runtime_engine: PHOTON
          notebook_task:
            notebook_path: "./test.py"
    my_test_job_2:
      name: Test job 2
      run_as:
        service_principal_name: "69511ed2-zb27-444c-9863-4bc8ff497637"
      tasks:
        - task_key: "task_2"
          notebook_task:
            notebook_path: "./test.py"

هام

run_as الإعداد غير مدعوم للبنية الأساسية لبرنامج ربط العمليات التجارية أو نقاط نهاية خدمة النموذج. يحدث خطأ إذا تم تعريف هذه الموارد في مجموعة حيث run_as تم تكوينها أيضا.

تعيين هويات التوزيع المستهدفة

من أفضل الممارسات تكوين هويات التشغيل للتشغيل المرحلي وتوزيع هدف الإنتاج. بالإضافة إلى ذلك، يعد تعيين run_as هوية إلى كيان خدمة لأهداف الإنتاج الطريقة الأكثر أمانا لتشغيل سير عمل الإنتاج كما هو:

  • يضمن أن سير العمل قد تم نشره بواسطة نفس كيان الخدمة أو من قبل شخص له أذونات CAN_USE على كيان الخدمة نفسه.
  • فصل الإذن لتشغيل سير عمل الإنتاج عن الهوية التي أنشأت الحزمة أو نشرتها.
  • يسمح للمستخدمين بتكوين وتعيين كيان خدمة للإنتاج بأذونات أقل من الهوية المستخدمة لنشر مجموعة الإنتاج.

في ملف التكوين المثال databricks.yml التالي، تم تكوين ثلاثة أوضاع هدف: التطوير والتقسيم المرحلي والإنتاج. يتم تكوين وضع التطوير للتشغيل كمستخدم فردي، ويتم تكوين أوضاع التشغيل المرحلي والإنتاج للتشغيل باستخدام أساسيين مختلفين للخدمة. تكون أساسيات الخدمة دائما في شكل معرف تطبيق، والذي يمكن استرداده من صفحة كيان الخدمة في إعدادات مسؤول مساحة العمل.

bundle:
  name: my_targeted_bundle

run_as:
  service_principal_name: "5cf3z04b-a73c-4x46-9f3d-52da7999069e"

targets:
  # Development deployment settings, set as the default
  development:
    mode: development
    default: true
    workspace:
      host: https://my-host.cloud.databricks.com
    run_as:
      user_name: someone@example.com

  # Staging deployment settings
  staging:
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/staging-workspace/.bundle/${bundle.name}/${bundle.target}
    run_as:
      service_principal_name: "69511ed2-zb27-444c-9863-4bc8ff497637"

  # Production deployment settings
  production:
    mode: production
    workspace:
      host: https://my-host.cloud.databricks.com
      root_path: /Shared/production-workspace/.bundle/${bundle.name}/${bundle.target}
    run_as:
      service_principal_name: "68ed9cd5-8923-4851-x0c1-c7536c67ff99"

resources:
  jobs:
    my_test_job:
      name: Test job
      tasks:
        - task_key: "task"
          new_cluster:
            num_workers: 1
            spark_version: 13.3.x-cpu-ml-scala2.12
            node_type_id: i3.xlarge
            runtime_engine: STANDARD
          notebook_task:
            notebook_path: "./test.py"