توزيع Zip لوظائف Azure

توضح هذه المقالة كيفية توزيع ملفات مشروع التطبيق الدالة إلى Azure من ملف .zip (مضغوط). ستتعلم كيفية توزيع دفعة، سواء باستخدام Azure CLI أو باستخدام واجهات برمجة التطبيقات REST. تستخدم أدوات Azure الدالات الأساسية أيضًا واجهات برمجة التطبيقات للتوزيع هذه عند توزيع مشروع محلي إلى Azure.

يعد توزيع Zip أيضًا طريقة سهلة لتشغيل وظائفك من حزمة النشر. لمعرفة المزيد، راجع تشغيل وظائفك من ملف حزمة في Azure.

تحتوي دالات Azure على مجموعة كاملة من خيارات التوزيع والتكامل المستمرة التي توفرها خدمة Azure App. للحصول على مزيدٍ من المعلومات، راجع التوزيع المستمر في Azure Functions.

لتسريع التطوير، قد تجد أنه من الأسهل نشر ملفات مشروع تطبيق الوظائف مباشرة من ملف .zip. تأخذ واجهة برمجة التطبيقات لتوزيع .zip محتويات ملف .zip وتنتزع المحتويات إلى wwwroot مجلد تطبيق الوظائف. يستخدم .zip توزيع الملفات نفس خدمة Kudu التي تقوم بصلاحيات عمليات التوزيع المستمر المستندة إلى التكامل، بما في ذلك:

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

لمزيدٍ من المعلومات، راجع ⁧⁩⁧مرجع التوزيع zip ⁩⁧.

هام

عند استخدام توزيع .zip، يتم حذف أي ملفات من توزيع موجود غير موجود في ملف .zip من تطبيق الدالة.

متطلبات توزيع ملف .zip

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

يجب أن يتضمن الأرشيف ملف host.json في جذر المجلد المستخرج. ينشئ مكدس اللغة المحدد لتطبيق الوظائف متطلبات إضافية:

هام

بالنسبة للغات التي تنشئ إخراجا مجمعا للتوزيع، تأكد من ضغط محتويات مجلد الإخراج الذي تخطط لنشره وليس مجلد المشروع بأكمله. عندما تستخرج الدالات محتويات أرشيف zip، host.json يجب أن يكون الملف موجودا في جذر الحزمة.

تستخرج عملية نشر zip ملفات ومجلدات أرشيف zip في wwwroot الدليل. إذا قمت بتضمين الدليل الأصل عند إنشاء الأرشيف، فلن يعثر النظام على الملفات التي يتوقع أن يراها في wwwroot.

توزيع باستخدام Azure CLI

يمكنك استخدام Azure CLI لتشغيل توزيع دفعة. توزيع ملف .zip هذا إلى تطبيق الدالة باستخدام أمر تكوين مصدر توزيع functionapp az. لاستخدام هذا الأمر، يجب استخدام الإصدار 2.0.21 من Azure CLI أو إصدار أحدث. لمعرفة إصدار Azure CLI الذي تستخدمه، استخدم az --version الأمر.

في الأمر التالي، استبدل <zip_file_path> العنصر النائب بالمسار إلى موقع ملف .zip. وكذلك استبدل <app_name> باسم تطبيق فريد للوظيفة الخاصة بك واستبدل <resource_group> باسم مجموعة الموارد الخاصة بك.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

يقوم هذا الأمر بتوزيع ملفات المشروع من الملف المضغوط .zip الذي تم تنزيله إلى تطبيق الوظائف في Azure. ثم يقوم بإعادة تشغيل التطبيق. لعرض قائمة عمليات التوزيع لتطبيق الوظائف هذا، ينبغي استخدام واجهات برمجة التطبيقات REST.

عند استخدام Azure CLI على الكمبيوتر المحلي، <zip_file_path> يكون المسار إلى ملف .zip على الكمبيوتر الخاص بك. يمكنك أيضًا تشغيل Azure CLI في Azure Cloud Shell. عند استخدام Cloud Shell، يجب عليك أولاً تحميل ملف التوزيع .zip إلى حساب ملفات Azure المقترن بـCloud Shell. في هذه الحالة، <zip_file_path> هو موقع التخزين الذي يستخدمه حساب Cloud Shell. لمزيدٍ من المعلومات، اطلع على ملفات المتابعة في Azure Cloud Shell.

توزيع ملف ZIP باستخدام واجهات برمجة تطبيقات REST

يمكنك استخدام واجهات برمجة تطبيقات REST لخدمة التوزيع لتوزيع ملف .zip إلى تطبيقك في Azure. للنشر، أرسل طلب POST إلى https://<app_name>.scm.azurewebsites.net/api/zipdeploy. يجب أن يحتوي طلب POST على ملف .zip في نص الرسالة. يتم توفير بيانات اعتماد النشر لتطبيقك في الطلب باستخدام مصادقة HTTP الأساسية. لمزيد من المعلومات، راجع مرجع توزيع الدفع بتنسيق zip.

للحصول على مصادقة HTTP BASIC، تحتاج إلى بيانات اعتماد نشر خدمة التطبيق. لمعرفة كيفية تعيين بيانات اعتماد النشر، راجع تعيين وإعادة تعيين بيانات الاعتماد على مستوى المستخدم.

مع cURL

يستخدم المثال التالي أداة cURL لتوزيع ملف .zip. استبدل العناصر النائبة <deployment_user>، و<zip_file_path> و<app_name>. عندما يطلب منك cURL كتابة كلمة المرور، اكتب كلمة المرور.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

يؤدي هذا الطلب إلى نشر الدفع من ملف .zip الذي تم تحميله. يمكنك مراجعة عمليات التوزيع الحالية والسابقة باستخدام نقطة النهاية https://<app_name>.scm.azurewebsites.net/api/deployments، كما هو موضح في مثال cURL التالي. مرة أخرى، استبدل <app_name> باسم التطبيق الخاص بك و<deployment_user> باسم المستخدم الخاص ببيانات اعتماد النشر الخاصة بك.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

التوزيع المضغوط غير المتزامن

أثناء التوزيع بشكل متزامن، قد تتلقى أخطاء تتعلق بمهلات الاتصال. أضف ?isAsync=true إلى عنوان URL للتوزيع بشكل غير متزامن. ستتلقى ردًا بمجرد تحميل الملف المضغوط برأس Location يشير إلى عنوان URL لحالة التوزيع القابلة للتلقيح. عند استقصاء عنوان URL المتوفر في العنوان Location، ستتلقى استجابة HTTP 202 (مقبولة) أثناء استمرار العملية واستجابة HTTP 200 (موافق) بمجرد توسيع الأرشيف واكتمال التوزيع بنجاح.

مصادقة Microsoft Entra

بديل لاستخدام مصادقة HTTP BASIC لنشر zip هو استخدام هوية Microsoft Entra. قد تكون هناك حاجة إلى هوية Microsoft Entra إذا تم تعطيل مصادقة HTTP BASIC لموقع SCM.

سيكون رمز وصول Microsoft Entra صالحا للمستخدم أو كيان الخدمة الذي يقوم بالنشر مطلوبا. يمكن استرداد رمز الوصول باستخدام الأمر az account get-access-token في Azure CLI. سيتم استخدام رمز الوصول في رأس المصادقة لطلب HTTP POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

باستخدام PowerShell

يستخدم المثال التالي Publish-AzWebapp لتحميل ملف .zip. استبدل العناصر النائبة <group-name>، و<app-name> و<zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

يؤدي هذا الطلب إلى نشر الدفع من ملف .zip الذي تم تحميله.

لمراجعة عمليات التوزيع الحالية والسابقة، قم بتشغيل الأوامر التالية. مرة أخرى، استبدل العناصر النائبة <deployment-user> و<deployment-password> و<app-name>.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

النشر باستخدام قالب ARM

يمكنك استخدام ملحق قالب ZipDeploy ARM لدفع ملف .zip إلى تطبيق الوظائف.

مثال على قالب ZipDeploy ARM

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

للنشر الأولي، يمكنك النشر مباشرة إلى فتحة الإنتاج. لمزيد من المعلومات، راجع عمليات نشر الفتحة.

تشغيل دالات من حزمة التوزيع

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

يدمج توزيع Zip مع هذه الميزة، والتي يمكنك تمكينها عن طريق تعيين إعداد تطبيق WEBSITE_RUN_FROM_PACKAGE الدالة إلى قيمة 1. لمزيدٍ من المعلومات، راجع تشغيل الدالات الخاصة بك من ملف حزمة التوزيع.

تخصيص التوزيع

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

SCM_DO_BUILD_DURING_DEPLOYMENT=true

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

تنزيل ملفات تطبيق الوظائف

إذا قمت بإنشاء وظائف باستخدام المحرر في مدخل Azure، يمكنك تنزيل مشروع تطبيق الدالة الموجود كملف .zip بإحدى الطرق التالية:

  • من مدخل Microsoft Azure:

    1. سجل الدخول في مدخل Microsoft Azure، ثم انتقل إلى تطبيق الوظائف الخاص بك.

    2. في علامة تبويب نظرة عامة، حدد تنزيل محتوى التطبيق. حدد خيارات التنزيل، ثم حدد تنزيل.

      تنزيل مشروع تطبيق الوظيفة

      ملف مضغوط .zip الذي تم تنزيله بالتنسيق الصحيح لإعادة توزيعه إلى تطبيق الوظائف باستخدام دفع التوزيع .zip. يمكن أيضًا تنزيل المدخل إضافة الملفات اللازمة لفتح التطبيق وظيفة مباشرة في Visual Studio.

  • استخدام واجهة برمجة تطبيقات REST:

    استخدم التوزيع التالي GET API لتحميل الملفات من مشروعك <function_app>:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    بما في ذلك /site/wwwroot/ يجعل من ملف مضغوط يتضمن فقط ملفات مشروع التطبيق وظيفة وليس الموقع بأكمله. إذا لم تكن قد سجلت الدخول إلى Azure، سيطلب فعل ذلك.

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

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