التعليمات البرمجية واختبار وظائف Azure محليًا

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

توفر هذه المقالة روابط إلى بيئات تطوير معينة للغة المفضلة لديك. كما يوفر بعض الإرشادات المشتركة للتطوير المحلي، مثل العمل مع ملف local.settings.json.

بيئات التطويرالمحلية

تعتمد الطريقة التي تطور بها الوظائف على الكمبيوتر المحلي على تفضيلات اللغة والأدوات. تدعم البيئات في الجدول التالي التنمية المحلية:

البيئة اللغات ‏‏الوصف
Visual Studio Code C# (قيد المعالجة)
C# (عملية عامل معزولة)
جافا سكريبت
بوويرشيل
Python
يضيف ملحق Azure Functions ل VS Code دعم الوظائف إلى VS Code. يتطلب الأدوات الأساسية. يدعم التطوير على Linux وMacOS وWindows عند استخدام الإصدار 2.x من Core Tools. لمعرفة المزيد، راجع إنشاء أول وظيفة باستخدام Visual Studio Code.
موجه الأوامر أو المحطة الطرفية C# (قيد المعالجة)
C# (عملية عامل معزولة)
جافا سكريبت
بوويرشيل
Python
توفر Azure Functions Core Tools وقت التشغيل الأساسي والقوالب لإنشاء الوظائف، والتي تمكن التطوير المحلي. يدعم الإصدار 2.x التطوير على Linux وMacOS وWindows. تعتمد كافة البيئات على "أدوات أساسية" لوقت تشغيل الوظائف المحلية.
Visual Studio C# (قيد المعالجة)
C# (عملية عامل معزولة)
يتم تضمين أدوات Azure Functions في حمل عمل تطوير Azure ل Visual Studio، بدءا من Visual Studio 2019. يتيح لك تجميع الوظائف في مكتبة فئات ونشر .dll إلى Azure. يتضمن الأدوات الأساسية للاختبار المحلي. لمعرفة المزيد، راجع تطوير وظائف Azure باستخدام Visual Studio.
Maven (مختلف) Java يدعم النموذج الأصلي لـ Maven الأدوات الأساسية لتمكين تطوير وظائف Java. يدعم الإصدار 2.x التطوير على Linux وMacOS وWindows. لمعرفة المزيد، راجع إنشاء دالتك الأولى باستخدام Java وMaven. كما يدعم التطوير باستخدام Eclipse وIntelliJ IDEA.

إشعار

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

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

ملفات المشاريع المحلية

يحتوي دليل مشروع Functions على الملفات التالية في المجلد الجذر للمشروع، بغض النظر عن اللغة:

اسم الملف ‏‏الوصف
host.json لمعرفة المزيد، راجع ⁧⁩⁧مرجع host.json.
local.settings.json الإعدادات تستخدمها الأدوات الأساسية عند التشغيل محليًا، بما في ذلك إعدادات التطبيق. لمعرفة المزيد، راجع ملف الإعدادات المحلية.
.gitignore يمنع نشر local.settings.js على الملف بطريق الخطأ إلى مستودع Git. لمعرفة المزيد، راجع ملف الإعدادات المحلية.
.vscode\extensions.json إعدادات الملف المستخدم عند فتح مجلد المشروع في Visual Studio Code.

تعتمد الملفات الأخرى في المشروع على لغتك ووظائف معينة. لمزيد من المعلومات، راجع دليل المطور للغتك.

ملف الإعدادات المحلية

يخزن الملف local.settings.json إعدادات التطبيق وإعداداته المستخدمة من قبل أدوات التطوير المحلية. يتم استخدام الإعدادات الموجودة في الملف local.settings.json فقط عند تشغيل المشروع محليًا. عند نشر مشروعك إلى Azure، تأكد أيضا من إضافة أي إعدادات مطلوبة إلى إعدادات التطبيق لتطبيق الوظائف.

هام

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

ملف الإعدادات المحلية له هذه البنية:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>",
    "AzureWebJobs.HttpExample.Disabled": "true"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": false
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

يتم اعتماد هذه الإعدادات عند تشغيل المشاريع محليًا:

الإعدادات ‏‏الوصف
IsEncrypted عند تعيين هذا الإعداد إلى true، يتم تشفير جميع القيم باستخدام مفتاح جهاز محلي. يستخدم مع func settings الأوامر. القيمة الافتراضية هي false. قد ترغب في تشفير الملف المحلي.settings.json على الكمبيوتر المحلي عندما يحتوي على أسرار، مثل سلاسل اتصال الخدمة. يقوم المضيف تلقائيًا بفك تشفير الإعدادات عند تشغيله. func settings decrypt استخدم الأمر قبل محاولة قراءة الإعدادات المشفرة محليا.
Values مجموعة إعدادات التطبيق المستخدمة عند تشغيل مشروع محليًا. تتوافق أزواج قيمة المفتاح هذه (سلسلة سلسلة) مع إعدادات التطبيق في تطبيق الوظائف في Azure، مثل AzureWebJobsStorage. تحتوي العديد من المشغلات والروابط على خاصية تشير إلى إعداد تطبيق سلسلة الاتصال، مثل Connectionمشغل تخزين Blob. لهذه الخصائص، تحتاج إلى إعداد تطبيق معرف في Values الصفيف. راجع الجدول اللاحق للحصول على قائمة بالإعدادات شائعة الاستخدام.
يجب أن تكون القيم سلاسل وليس كائنات JSON أو صفائف. لا يمكن أن تتضمن أسماء الإعدادات تسطيرا مزدوجا (__) ويجب ألا تتضمن نقطتين (:). يتم حجز أحرف التسطير المزدوجة حسب وقت التشغيل، ويتم حجز النقطتين لدعم إدخال التبعية.
Host تقوم الإعدادات في هذا القسم بتخصيص عملية مضيف الوظائف عند تشغيل المشاريع محليًا. هذه الإعدادات منفصلة عن إعدادات host.json، والتي تنطبق أيضا عند تشغيل المشاريع في Azure.
LocalHttpPort تعيين المنفذ الافتراضي المستخدم عند تشغيل مضيف الوظائف المحلي (func host start و func run). --port يكون لخيار سطر الأوامر الأسبقية على هذا الإعداد. يمكنك، عند التشغيل في Visual Studio IDE على سبيل المثال، تغيير رقم المنفذ بالتنقل إلى نافذة "Project Properties -> Debug" وتحديد رقم المنفذ صراحة في أمر⁧ host start --port <your-port-number> يمكن توفيره في حقل "وسائط التطبيق".
CORS يحدد الأصول المسموح بها لمشاركة الموارد عبر المنشأ (CORS). يتم توفير الأصول كقائمة مفصولة بفاصلة بدون مسافات. قيمة البدل (*) مدعومة والتي تسمح بالطلبات من أي أصل.
CORSCredentials عند التعيين إلى true، يسمح بالطلبات withCredentials .
ConnectionStrings مجموعة. لا تستخدم هذه المجموعة لسلاسل الاتصال المستخدمة بواسطة روابط الوظيفة. يتم استخدام هذه المجموعة فقط بواسطة أطر العمل التي تحصل عادة على سلسلة الاتصال من ConnectionStrings قسم ملف التكوين، مثل Entity Framework. تتم إضافة سلاسل الاتصال في هذا الكائن إلى البيئة مع نوع الموفرSystem.Data.SqlClient. لا يتم نشر العناصر الموجودة في هذه المجموعة إلى Azure مع إعدادات التطبيق الأخرى. يجب إضافة هذه القيم بشكل صريح إلى Connection strings مجموعة إعدادات تطبيق الوظائف. إذا كنت تقوم بإنشاء في التعليمات البرمجية SqlConnection للدالة الخاصة بك، يجب تخزين قيمة سلسلة الاتصال مع اتصالاتك الأخرى في Application الإعدادات في المدخل.

يمكن تضمين إعدادات التطبيق التالية في Values الصفيف عند التشغيل محليا:

الإعدادات القيم الوصف
AzureWebJobsStorage سلسلة اتصال حساب التخزين، أو
UseDevelopmentStorage=true
يحتوي على سلسلة الاتصال لحساب تخزين Azure. مطلوب عند استخدام مشغلات أخرى غير HTTP. لمزيد من المعلومات، راجع AzureWebJobsStorage المرجع.
عندما يكون لديكAzure Emulatorمثبت محليا وتبدأ بتعيين AzureWebJobsStorage إلى UseDevelopmentStorage=true، تستخدم «الأدوات الأساسية» المحاكي. لمزيد من المعلومات، راجع محاكي التخزين المحلي.
AzureWebJobs.<FUNCTION_NAME>.Disabled true|false لتعطيل دالة عند التشغيل محليا، أضف "AzureWebJobs.<FUNCTION_NAME>.Disabled": "true" إلى المجموعة، حيث <FUNCTION_NAME> هو اسم الدالة. لمعرفة المزيد، راجع كيفية تعطيل الوظائف في Azure Functions.
FUNCTIONS_WORKER_RUNTIME dotnet
dotnet-isolated
node
java
powershell
python
يشير إلى اللغة المستهدفة من وقت تشغيل الوظائف. مطلوب للإصدار 2.x وأعلى من وقت تشغيل الوظائف. يتم إنشاء هذا الإعداد للمشروع بواسطة الأدوات الأساسية. لمعرفة المزيد، راجع FUNCTIONS_WORKER_RUNTIME المرجع.
FUNCTIONS_WORKER_RUNTIME_VERSION ~7 يشير إلى استخدام PowerShell 7 عند التشغيل محليا. إذا لم يتم التعيين، فسيتم استخدام PowerShell Core 6. يتم استخدام هذا الإعداد فقط عند التشغيل محليًا. يتم، عند التشغيل في Azure، تحديد إصدار وقت التشغيل في PowerShell بواسطة إعداد تكوين الموقع powerShellVersion، والذي يمكن تعيينه في المدخل.

مزامنة الإعدادات

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

المشغلات وعمليات الربط

عند تطوير وظائفك محليا، تحتاج إلى أخذ سلوكيات المشغل والربط في الاعتبار. بالنسبة إلى مشغلات HTTP، يمكنك ببساطة استدعاء نقطة نهاية HTTP على الكمبيوتر المحلي، باستخدام http://localhost/. بالنسبة للوظائف التي يتم تشغيلها بدون HTTP، هناك العديد من الخيارات للتشغيل محليا:

  • أسهل طريقة لاختبار الروابط أثناء التطوير المحلي هي استخدام سلسلة الاتصال التي تستهدف خدمات Azure المباشرة. يمكنك استهداف الخدمات المباشرة عن طريق إضافة إعدادات سلسلة الاتصال المناسبة Values في الصفيف في ملف local.settings.json. عند القيام بذلك، تؤثر عمليات التنفيذ المحلية أثناء الاختبار على بيانات الخدمة المباشرة. ولهذا السبب، ضع في اعتبارك إعداد خدمات منفصلة لاستخدامها أثناء التطوير والاختبار، ثم التبديل إلى خدمات مختلفة أثناء الإنتاج.
  • بالنسبة للمشغلات المستندة إلى التخزين، يمكنك استخدام محاكي تخزين محلي.
  • يمكنك تشغيل وظائف مشغل غير HTTP يدويا باستخدام نقاط نهاية المسؤول الخاصة. لمزيد من المعلومات، راجع تشغيل دالة غير مشغلة من قبل HTTP يدويا.

أثناء الاختبار المحلي، يجب تشغيل المضيف الذي توفره Core Tools (func.exe) محليا. لمزيد من المعلومات، راجع Azure Functions Core Tools.

محاكي التخزين المحلي

أثناء التطوير المحلي، يمكنك استخدام محاكي Azurite المحلي عند اختبار الوظائف مع روابط Azure Storage (Queue Storage وBlob Storage وTable Storage)، دون الحاجة إلى الاتصال بخدمات التخزين عن بعد. يتكامل Azurite مع Visual Studio Code وVisual Studio، ويمكنك أيضا تشغيله من موجه الأوامر باستخدام npm. لمزيد من المعلومات، راجع استخدام محاكي Azurite لتطوير تخزين Azure المحلي.

يخبر الإعداد التالي في Values مجموعة ملف local.settings.json مضيف الوظائف المحلي باستخدام Azurite للاتصال الافتراضي AzureWebJobsStorage :

"AzureWebJobsStorage": "UseDevelopmentStorage=true"

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

  • يجب أن يكون لديك Azurite مثبتا ومشغلا.
  • يجب عليك الاختبار باستخدام اتصال تخزين فعلي بخدمات Azure قبل النشر إلى Azure.
  • عند نشر مشروعك، لا تنشر AzureWebJobsStorage الإعداد ك UseDevelopmentStorage=true. في Azure، AzureWebJobsStorage يجب أن يكون الإعداد دائما سلسلة الاتصال لحساب التخزين المستخدم من قبل تطبيق الوظائف. لمزيد من المعلومات، انظر AzureWebJobsStorage.

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