التشغيل السريع: إنشاء دالة C# في Azure من سطر الأوامر
في هذه المقالة، يمكنك استخدام أدوات سطر الأوامر لإنشاء دالة C# تستجيب لطلبات HTTP. بعد اختبار التعليمات البرمجية محليًّا، يمكنك نشرها إلى بيئة بدون خادم من دالات Azure.
تدعم هذه المقالة إنشاء كلا النوعين من دالات C# المدمجة:
| نموذج التنفيذ | الوصف |
|---|---|
| قيد التنفيذ | تعمل تعليمة دالتك البرمجية في نفس العملية مثل عملية مضيف الدالات. يدعم كلا من .NET Core 3.1 و .NET 6.0. لمعرفة المزيد، راجع تطوير دالات مكتبة الفئة C# باستخدام وظائف Azure. |
| عملية معزولة | تعمل تعليمة دالتك البرمجية في عملية عامل .NET منفصلة. يدعم كل من .NET 5.0 و .NET 6.0. لمعرفة المزيد، راجع تطوير وظائف عملية معزولة في C#. |
يُنشئ هذا المقال دالة يتم تشغيلها عبرHTTP وتعمل على .NET 6.0. يوجد أيضًا إصدار مستند إلى Visual Studio Code من هذه المقالة.
يتطلب إكمال هذه البداية السريعة تكلفة بسيطة تبلغ بضعة سنتات أمريكية أو أقل في حساب Azure الخاص بك.
تكوين البيئة المحلية الخاصة بك
قبل أن تبدأ، يجب أن يكون لديك ما يلي:
الإصدار 4.x من Azure Functions Core Tools.
إحدى الأدوات التالية لإنشاء موارد Azure:
Azure CLIversion2.4 أو أحدث.
The Azure Az PowerShell module الإصدار 5.9.0 أو الإصدار الأحدث.
تحتاج أيضًا إلى حساب Azure مع اشتراك مفعل. أنشئ حسابًا مجانًا.
فحص المتطلبات المسبقة
تحقق من المتطلبات الأساسية الخاصة بك، والتي تعتمد على ما إذا كنت تستخدم Azure CLI أو Azure PowerShell لإنشاء موارد Azure:
في نافذة طرفية أو أوامر، قم بتشغيل
func --versionللتحقق من أن أدوات Azure Functions Core Tools هي الإصدار 4.x.التشغيل
dotnet --list-sdksللتحقق من تثبيت الإصدارات المطلوبة.قم بالتشغيل
az --versionللتحقق من أن إصدار Azure CLI هو 2.4 أو الأحدث.قم بتشغيل
az login لتسجيل الدخول إلى Azure، والتحقق من اشتراك نشط.
إنشاء مشروع دالة محلي
في Azure Functions، يعد مشروع الدوال حاوية لدالة فردية واحدة أو أكثر يستجيب كل منها لمشغل معين. تشترك جميع الدوال في المشروع في نفس التكوينات المحلية والاستضافة. في هذا القسم، تقوم بإنشاء مشروع دوال يحتوي على دالة واحدة.
شغّل
func initالأمر، كما يلي، لإنشاء مشروع وظائف في مجلد يسمى LocalFunctionProj مع وقت التشغيل المحدد:func init LocalFunctionProj --dotnetانتقل إلى مجلد المشروع:
cd LocalFunctionProjيحتوي هذا المجلد على ملفات متنوعة للمشروع، بما في ذلك ملفات التكوينات المسماة local.settings.json و host.json. نظرًا لأن local.settings.json يمكن أن يحتوي على بيانات سرية تم تنزيلها من Azure، يتم استبعاد الملف من التحكم بالمصدر افتراضيًا في ملف gitignore..
إضافة دالة إلى المشروع باستخدام الأمر التالي حيث
--nameالوسيطة هي الاسم الفريد لدالتك (HttpExample)--templateوالوسيطة تحدد مشغل الدالة (HTTP).func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"func newإنشاء ملف التعليمات البرمجية httpExample.cs.
(اختياري) فحص محتويات الملف
إذا رغبت في ذلك، يمكنك التخطي إلى تشغيل الوظيفة محليًّا وفحص محتويات الملف لاحقًا.
HttpExample.cs
تعتمد التعليمات البرمجية الدالة التي تم إنشاؤها من القالب على نوع المشروع C# المدمجة.
يحتوي HttpExample.cs على Runطريقة تتلقى بيانات الطلب في المتغيرreq وهي HttpRequest الملحقة بـ HttpTriggerAttribute، والتي تحدد سلوك المشغل.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace LocalFunctionProj
{
public static class HttpExample
{
[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
}
}
كائن الإرجاع هو ActionResult الذي يعرض رسالة استجابة إما OkObjectResult (200) أو BadRequestObjectResult (400).
راجع مشغلات دالات Azure ومفاهيم الربطلمعرفة المزيد.
تشغيل الدالة محليًا
قم بتشغيل الدالة عن طريق بدء تشغيل مضيف وقت تشغيل دوال Azure المحلي من المجلد LocalFunctionProj:
func startفي نهاية الإخراج، يجب أن تظهر الأسطر التالية:
... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...ملاحظة
إذا لم يظهر HttpExample كما هو موضح أعلاه، فمن المحتمل أن تكون قد بدأت المضيف من خارج المجلد الجذر للمشروع. في هذه الحالة، استخدم Ctrl+C لإيقاف المضيف، انتقل إلى المجلد الجذر للمشروع، وتشغيل الأمر السابق مرة أخرى.
نسخ URL الدالة
HttpExampleمن هذا الإخراج إلى مستعرض:إلى URL الدالة، إلحاق سلسلة
?name=<YOUR_NAME>الاستعلام، مما يجعل URL الكامل مثلhttp://localhost:7071/api/HttpExample?name=Functions. يجب أن يعرض المتصفح رسالة استجابة تعكس قيمة سلسلة الاستعلام الخاصة بك. تُظهر المحطة الطرفية التي بدأت فيها مشروعك أيضًا إخراج السجل أثناء تقديم الطلبات.عند الانتهاء من ذلك، استخدم Ctrl+C واختر
yإيقاف مضيف الوظائف.
إنشاء موارد Azure الداعمة للدالة
قبل أن تتمكن من نشر التعليمات البرمجية للدالة الخاصة بك إلى Azure، تحتاج إلى إنشاء ثلاثة موارد:
- مجموعة الموارد، وهي حاوية منطقية للموارد ذات الصلة.
- حساب تخزين، والذي يستخدم للحفاظ على حالة دالاتك والمعلومات الأخرى المتعلقة بها.
- تطبيق الدالة، الذي يوفر البيئة لتنفيذ رمز الدالة. يقوم تطبيق الدالة بالتعيين إلى مشروع الدالة المحلي الخاص بك ويسمح لك بتجميع الدالات الخاصة بك كوحدة منطقية لتيسير إدارة الموارد، ونشرها، ومشاركتها.
استخدم الأوامر التالية لإنشاء هذه العناصر. كل من Azure CLI وPowerShell معتمد.
إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:
az loginيقوم الأمر تسجيل الدخول إلى az بتسجيل الدخول إلى حساب Azure الخاص بك.
إنشاء مجموعة موارد تسمى
AzureFunctionsQuickstart-rgفي المنطقة التي اخترتها:az group create --name AzureFunctionsQuickstart-rg --location <REGION>ينشئ الأمر az group create مجموعة موارد. في الأمر أعلاه، استبدل
<REGION>بمنطقة قريبة منك، باستخدام رمز منطقة متاح يتم إرجاعه من الأمر az account list-locations.إنشاء حساب تخزين للأغراض العامة في مجموعة الموارد والمنطقة الخاصة بك:
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRSيقوم الأمر az storage account createبإنشاء حساب التخزين.
في المثال السابق، استبدل
<STORAGE_NAME>باسم مناسب لك وفريد في تخزين Azure. يجب أن تحتوي الأسماء على ثلاثة إلى 24 حرفا من الأرقام والأحرف الصغيرة فقط. يحددStandard_LRSحساب للأغراض العامة، والذي تدعمه الدالات.
أنشئ تطبيق الوظيفة في Azure:
az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet --functions-version 3 --name <APP_NAME> --storage-account <STORAGE_NAME>ينشئ الأمر az functionapp create تطبيق الوظيفة في Azure.
ملاحظة
ينشئ هذا الأمر تطبيق دالة باستخدام الإصدار 3.x من وقت تشغيل Azure Functions. يقوم الأمر
func azure functionapp publishالذي ستقوم بتشغيله لاحقاً بتحديث التطبيق إلى الإصدار 4.x.في المثال السابق، استبدل
<STORAGE_NAME> باسم الحساب الذي استخدمته في الخطوة السابقة، واستبدل <APP_NAME> باسم فريد عالمي يناسبك. يعد <APP_NAME> أيضًا نطاق DNS الافتراضي لتطبيق الوظائف.ينشئ هذا الأمر تطبيقًا وظيفيًا يتم تشغيله في وقت تشغيل لغتك المحددة ضمن خطة استهلاك Azure Functions، وهي مجانية لمقدار الاستخدام الذي تتحمله هنا. يوفر الأمر أيضًا مثيل Azure Application Insights المرتبط في نفس resourceGroup، والتي يمكنك من خلالها مراقبة تطبيق الدالة، وسجلات العرض. لمزيد من المعلومات، راجع مراقبة Azure Functions. لا يتحمل المثيل أي تكاليف حتى تقوم بتنشيطه.
انشر مشروع الوظيفة في Azure
بعد إنشاء تطبيق الدالة في Azure بنجاح، تُصبح الآن جاهز لتوزيع مشروع الدوال المحلي لديك عن طريق استخدام الأمر func azure functionapp publish.
استبدل، في المثال التالي<APP_NAME> باسم التطبيق الخاص بك.
func azure functionapp publish <APP_NAME>
يظهر الأمر نشر نتائج مشابهة للإخراج التالي (اقتطاعها للبساطة):
...
Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.
...
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
HttpExample - [httpTrigger]
Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
استدعاء الدالة على Azure
لأن الدالة تستخدم مشغل HTTP وتدعم طلبات GET، يمكنك استدعاء ذلك عن طريق إجراء طلب HTTP إلى URL الخاص به. من الأسهل القيام بذلك في المتصفح.
نسخ URL Invoke الكاملة المعروضة في نتيجة أمر النشر في شريط عناوين المتصفح، مع إرفاق معلمة الاستعلام?name=Functions. عند الانتقال إلى عنوان URL هذا، يجب أن يعرض المستعرض إخراجًا مماثلًا لما كان عليه عند تشغيل الوظيفة محليًّا.
قم بتشغيل الأمر التالي لعرض السجلات الجارية في الوقت الحقيقي تقريباً:
func azure functionapp logstream <APP_NAME>
في نافذة طرفية منفصلة أو في المتصفح، اضغط على وظيفة التحكم عن بعد مرة أخرى. سيُعرض سجلاً مطولاً لتنفيذ الوظيفة في Azure في المحطة الطرفية.
تنظيف الموارد
إذا تابعت إلى الخطوة التالية، وأضفت ربط ناتج قائمة انتظار Azure Storage، فاحتفظ بجميع مواردك في مكانها، حيث ستبني على ما قمت به بالفعل.
وإلا، استخدم الأمر التالي لحذف مجموعة الموارد وكافة الموارد المضمنة لتجنب تكبد المزيد من التكاليف.
az group delete --name AzureFunctionsQuickstart-rg