التشغيل السريع: إنشاء دالة 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 الخاص بك.

تكوين البيئة المحلية الخاصة بك

قبل أن تبدأ، يجب أن يكون لديك ما يلي:

تحتاج أيضًا إلى حساب 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، يعد مشروع الدوال حاوية لدالة فردية واحدة أو أكثر يستجيب كل منها لمشغل معين. تشترك جميع الدوال في المشروع في نفس التكوينات المحلية والاستضافة. في هذا القسم، تقوم بإنشاء مشروع دوال يحتوي على دالة واحدة.

  1. شغّل func initالأمر، كما يلي، لإنشاء مشروع وظائف في مجلد يسمى LocalFunctionProj مع وقت التشغيل المحدد:

    func init LocalFunctionProj --dotnet
    
  2. انتقل إلى مجلد المشروع:

    cd LocalFunctionProj
    

    يحتوي هذا المجلد على ملفات متنوعة للمشروع، بما في ذلك ملفات التكوينات المسماة ⁧⁩local.settings.json⁧⁩ و⁧⁩ host.json⁧⁩. نظرًا لأن ⁧⁩local.settings.json⁧⁩ يمكن أن يحتوي على بيانات سرية تم تنزيلها من Azure، يتم استبعاد الملف من التحكم بالمصدر افتراضيًا في ملف ⁧⁩gitignore.⁧⁩.

  3. إضافة دالة إلى المشروع باستخدام الأمر التالي حيث --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 ومفاهيم الربطلمعرفة المزيد.

تشغيل الدالة محليًا

  1. قم بتشغيل الدالة عن طريق بدء تشغيل مضيف وقت تشغيل دوال 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 لإيقاف المضيف، انتقل إلى المجلد الجذر للمشروع، وتشغيل الأمر السابق مرة أخرى.

  2. نسخ URL الدالة HttpExample من هذا الإخراج إلى مستعرض:

    إلى URL الدالة، إلحاق سلسلة ?name=<YOUR_NAME> الاستعلام، مما يجعل URL الكامل مثل http://localhost:7071/api/HttpExample?name=Functions . يجب أن يعرض المتصفح رسالة استجابة تعكس قيمة سلسلة الاستعلام الخاصة بك. تُظهر المحطة الطرفية التي بدأت فيها مشروعك أيضًا إخراج السجل أثناء تقديم الطلبات.

  3. عند الانتهاء من ذلك، استخدم Ctrl+C واختر y إيقاف مضيف الوظائف.

إنشاء موارد Azure الداعمة للدالة

قبل أن تتمكن من نشر التعليمات البرمجية للدالة الخاصة بك إلى Azure، تحتاج إلى إنشاء ثلاثة موارد:

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

استخدم الأوامر التالية لإنشاء هذه العناصر. كل من Azure CLI وPowerShell معتمد.

  1. إذا لم تكن قد فعلت ذلك بالفعل، سجل الدخول إلى Azure:

    az login
    

    يقوم الأمر ⁧⁩تسجيل الدخول إلى az⁧⁩ بتسجيل الدخول إلى حساب Azure الخاص بك.

  2. إنشاء مجموعة موارد تسمى AzureFunctionsQuickstart-rg في المنطقة التي اخترتها:

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    ينشئ الأمر az group create مجموعة موارد. في الأمر أعلاه، استبدل <REGION> بمنطقة قريبة منك، باستخدام رمز منطقة متاح يتم إرجاعه من الأمر az account list-locations.

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

    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 حساب للأغراض العامة، والذي تدعمه الدالات.

  1. أنشئ تطبيق الوظيفة في 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

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