Connect Azure Functions to Azure Storage using Visual Studio Code

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

في هذا المقال، تتعلم كيفية استخدام Visual Studio Code لربط Azure Storage بالوظيفة التي أنشأتها في مقالة البداية السريعة السابقة. ربط الإخراج الذي تضيفه لهذه الدالة يكتب البيانات من طلب HTTP إلى رسالة في Azure Queue storage queue.

معظم الروابط تتطلب سلسلة connection string مخزنة تستخدمها Functions للوصول إلى خدمة access. لتسهيل الأمر، تستخدم حساب storage الذي أنشأته باستخدام تطبيق الوظيفة الخاص بك. تم تخزين الاتصال بهذا الحساب بالفعل في إعداد تطبيق مسمى.AzureWebJobsStorage

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

قبل أن تبدأ، يجب أن تتوفر لديك المتطلبات التالية:

  • ثبت إضافة Azure Storage ل Visual Studio Code.

  • ثبت Azure Storage Explorer. Storage Explorer هو أداة ستستخدمها لفحص رسائل الطابور التي تولدها عملية ربط الإخراج الخاصة بك. يدعم Storage Explorer على أنظمة التشغيل المبنية على macOS وWindows وLinux.

  • قم بتثبيت أدوات CLI الأساسية .NET .

تفترض هذه المقالة أنك قد سجلت الدخول بالفعل لاشتراكك في Azure من Visual Studio Code. يمكنك تسجيل الدخول عن طريق تشغيل Azure: Sign In من لوحة الأوامر.

تنزيل إعدادات تطبيق الوظيفة

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

  1. اضغط F1 لفتح لوحة الأوامر، ثم ابحث عن الأمر Azure Functions: Download Remote Settings... ونفذه.

  2. اختر تطبيق الدالة الذي أنشأته في المقالة السابقة. حدد Yes to all للكتابة فوق الإعدادات المحلية الموجودة.

    هام

    لأن ملف local.settings.jsonيحتوي على أسرار، فلن يتم نشره مطلقًا، وسيتم استبعاده من عنصر التحكم بالمصادر.

  3. انسخ القيمة AzureWebJobsStorage، وهي المفتاح لقيمة حساب storage connection string. يمكنك استخدام هذا الاتصال للتحقق من أن ربط الإخراج يعمل كما هو متوقع.

تسجيل ملحقات الربط

لأنك تستخدم Queue storage output binding، يجب أن يكون لديك إضافة Storage bindings مثبتة قبل تشغيل project.

تم تكوين project الخاص بك ليستخدم <حزم >التوسيط، التي تقوم تلقائيا بتثبيت مجموعة محددة مسبقا من حزم الإضافات.

حزم الامتدادات مفعلة بالفعل في ملف host.json في جذر project، والذي يجب أن يبدو كالمثال التالي:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)"
  }
}

الآن، يمكنك إضافة ملف storage output binding إلى project الخاص بك.

تم تكوين project الخاص بك ليستخدم <حزم >التوسيط، التي تقوم تلقائيا بتثبيت مجموعة محددة مسبقا من حزم الإضافات.

حزم الامتدادات مفعلة بالفعل في ملف host.json في جذر project، والذي يجب أن يبدو كالمثال التالي:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

الآن، يمكنك إضافة ملف storage output binding إلى project الخاص بك.

باستثناء HTTP والمشغلات الموقتة، يتم تنفيذ الارتباطات كحزم ملحقة. شغل الأمر التالي dotnet add package في نافذة الطرفية لإضافة حزمة Storage إلى project الخاص بك.

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues --prerelease

الآن، يمكنك إضافة ملف storage output binding إلى project الخاص بك.

إضافة ربط المخرجات

للكتابة إلى صف انتظار Azure Storage:

  • إضافة خاصية extraOutputs إلى تكوين الربط

    {
        methods: ['GET', 'POST'],
        extraOutputs: [sendToQueue], // add output binding to HTTP trigger
        authLevel: 'function',
        handler: () => {}
    }
    
  • إضافة دالة output.storageQueue فوق app.http الاستدعاء

    const sendToQueue = output.storageQueue({
      queueName: 'outqueue',
      connection: 'AzureWebJobsStorage',
    });
    

للكتابة إلى صف انتظار Azure Storage:

  • إضافة خاصية extraOutputs إلى تكوين الربط

    {
        methods: ['GET', 'POST'],
        extraOutputs: [sendToQueue], // add output binding to HTTP trigger
        authLevel: 'function',
        handler: () => {}
    }
    
  • إضافة دالة output.storageQueue فوق app.http الاستدعاء

    const sendToQueue: StorageQueueOutput = output.storageQueue({
      queueName: 'outqueue',
      connection: 'AzureWebJobsStorage',
    });
    

في Functions، يتطلب كل نوع من أنواع الربط و directionو فريدا.typename تعتمد الطريقة التي تحدد بها هذه السمات على اللغة الخاصة بتطبيق الوظائف.

يتم تعريف سمات الربط في ملف function.json لدالة معينة. اعتمادًا على نوع الربط، قد تكون ثمة حاجة إلى الخصائص الإضافية. يصف تكوين إخراج queue الحقول المطلوبة لربط قائمة Azure Storage. يسهل الملحق إضافة روابط إلى ملف function.json .

لإنشاء ربط، انقر بزر الماوس الأيمن (Ctrl+click على macOS) فوقfunction.json الملف في مجلد HttpTrigger واختر Add binding.... اتبع المطالبات لتعريف خصائص الربط التالية للربط الجديد:

المطالبة قيمة ‏‏الوصف
تحديد اتجاه الربط out يعد الربط هو ربط الإخراج.
حدد الربط بالاتجاه... Azure Queue Storage الربط هو ربط Azure Storage queue.
الاسم المستخدم لتعريف هذا الربط في تعليمتك البرمجية msg الاسم الذي يحدد معلمة الربط المشار إليها في التعليمة البرمجية الخاصة بك.
قائمة الانتظار التي سيتم إرسال الرسالة إليها outqueue اسم قائمة الانتظار التي يكتب الربط إليها. عندما لا يكون اسم قائمة الانتظار موجودا، يقوم الربط بإنشائه عند الاستخدام الأول.
حدد setting من "local.setting.json" AzureWebJobsStorage اسم إعداد التطبيق الذي يحتوي على connection string لحساب Storage. إعداد AzureWebJobsStorage يحتوي على connection string الحساب Storage الذي أنشأته باستخدام تطبيق الوظيفة.

تتم إضافة ربط إلى bindings الصفيف في function.json، والذي يجب أن يبدو كما يلي:

      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

يتم تعريف سمات الربط عن طريق تزيين التعليمات البرمجية لدالة معينة في ملف function_app.py . تستخدم ديكور queue_output لإضافة ملف إخراج Azure Queue storage.

باستخدام الديكور queue_output، يكون اتجاه الربط ضمنيا 'خارجا' والنوع هو Azure Storage الطابور. أضف الديكور التالي إلى رمز الوظيفة الخاص بك في function_app.py:

@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")

في هذا الكود، يحدد arg_name معامل الربط المشار إليه في الكود، queue_name هو اسم الطابور الذي يكتب عليه الربط، وconnection هو اسم إعداد التطبيق الذي يحتوي على connection string لحساب Storage. في البداية السريعة تستخدم نفس حساب storage المستخدم في تطبيق الوظائف، وهو موجود في إعداد AzureWebJobsStorage. queue_name عندما لا يكون موجودا، يقوم الربط بإنشائه عند الاستخدام الأول.

في project C#، تعرف الروابط كسمات ربط على طريقة الدالة. تعتمد التعريفات المحددة على ما إذا كان تطبيقك يعمل قيد المعالجة (مكتبة فئة C#) أو في عملية عامل معزولة.

افتح ملف HttpExample.cs project وأضف الفئة التالية MultiResponse:

public class MultiResponse
{
    [QueueOutput("outqueue", Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public IActionResult HttpResponse { get; set; }
}

فئة MultiResponse تتيح لك الكتابة إلى قائمة انتظار storage باسم outqueue ورسالة نجاح HTTP. يمكن إرسال رسائل متعددة إلى قائمة الانتظار لأن السمة QueueOutput يتم تطبيقها على صفيف سلسلة.

خاصية Connection تحدد connection string الحساب storage. في هذه الحالة، يمكنك حذف Connection لأنك بالفعل تستخدم حساب storage الافتراضي.

في project جافا، تعرف الروابط بأنها تعليقات ربط على طريقة الدالة. يتم إنشاء ملف function.json تلقائيًا بناءً على هذه التعليقات التوضيحية.

تصفح إلى موقع رمز الدالة الخاص بك تحت src/main/java، وافتح ملف Function.java project، وأضف المعلمة التالية إلى تعريف طريقة run:

@QueueOutput(name = "msg", queueName = "outqueue", 
connection = "AzureWebJobsStorage") OutputBinding<String> msg,

معامل msg هو نوع OutputBinding<T>، يمثل مجموعة من السلاسل النصية التي تكتب كرسائل إلى ربط الإخراج عند اكتمال الدالة. في هذه الحالة، يكون الناتج طابور storage يسمى outqueue. يتم تحديد connection string حساب Storage بطريقة connection. بدلا من connection string نفسه، تمر بإعداد التطبيق الذي يحتوي على Storage account connection string.

يجب أن يبدو تعريف الأسلوب run الآن مثل المثال التالي:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {

إضافة التعليمات البرمجية التي تستخدم ربط المخرجات

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

أضف التعليمات البرمجية التي تستخدم كائن ربط الإخراج لإنشاء context.extraOutputs رسالة قائمة انتظار. أضف هذه التعليمة البرمجية قبل عبارة الإرجاع.

context.extraOutputs.set(sendToQueue, [msg]);

عند هذه النقطة، يمكن أن تبدو الدالة كما يلي:

const { app, output } = require('@azure/functions');

const sendToQueue = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  extraOutputs: [sendToQueue],
  handler: async (request, context) => {
    try {
      context.log(`Http function processed request for url "${request.url}"`);

      const name = request.query.get('name') || (await request.text());
      context.log(`Name: ${name}`);

      if (name) {
        const msg = `Name passed to the function ${name}`;
        context.extraOutputs.set(sendToQueue, [msg]);
        return { body: msg };
      } else {
        context.log('Missing required data');
        return { status: 404, body: 'Missing required data' };
      }
    } catch (error) {
      context.log(`Error: ${error}`);
      return { status: 500, body: 'Internal Server Error' };
    }
  },
});

أضف التعليمات البرمجية التي تستخدم كائن ربط الإخراج لإنشاء context.extraOutputs رسالة قائمة انتظار. أضف هذه التعليمة البرمجية قبل عبارة الإرجاع.

context.extraOutputs.set(sendToQueue, [msg]);

عند هذه النقطة، يمكن أن تبدو الدالة كما يلي:

import {
  app,
  output,
  HttpRequest,
  HttpResponseInit,
  InvocationContext,
  StorageQueueOutput,
} from '@azure/functions';

const sendToQueue: StorageQueueOutput = output.storageQueue({
  queueName: 'outqueue',
  connection: 'AzureWebJobsStorage',
});

export async function HttpExample(
  request: HttpRequest,
  context: InvocationContext,
): Promise<HttpResponseInit> {
  try {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text());
    context.log(`Name: ${name}`);

    if (name) {
      const msg = `Name passed to the function ${name}`;
      context.extraOutputs.set(sendToQueue, [msg]);
      return { body: msg };
    } else {
      context.log('Missing required data');
      return { status: 404, body: 'Missing required data' };
    }
  } catch (error) {
    context.log(`Error: ${error}`);
    return { status: 500, body: 'Internal Server Error' };
  }
}

app.http('HttpExample', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: HttpExample,
});

إضافة التعليمات البرمجية التي تستخدم Push-OutputBinding cmdlet لكتابة نص إلى قائمة الانتظار باستخدام ربط الإخراج msg. إضافة هذه التعليمات البرمجية قبل تعيين حالة «موافق» في عبارة if.

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

عند هذه النقطة، يجب أن تبدو دالتك كما يلي:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

if ($name) {
    # Write the $name value to the queue, 
    # which is the name passed to the function.
    $outputMsg = $name
    Push-OutputBinding -name msg -Value $outputMsg

    $status = [HttpStatusCode]::OK
    $body = "Hello $name"
}
else {
    $status = [HttpStatusCode]::BadRequest
    $body = "Please pass a name on the query string or in the request body."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = $status
    Body = $body
})

قم بتحديث HttpExample\function_app.py لمطابقة التعليمات البرمجية التالية، وأضف المعلمة msg إلى تعريف الدالة وضمن msg.set(name) العبارة if name: :

import azure.functions as func
import logging

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        msg.set(name)
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

معامل msg هو مثال على azure.functions.Out class. يكتب الأسلوب set رسالة سلسلة إلى قائمة الانتظار. في هذه الحالة، يتم name تمريرها إلى الدالة في سلسلة استعلام URL.

استبدل الطريقة الحالية Run بالرمز التالي:

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    var message = "Welcome to Azure Functions!";

    // Return a response to both HTTP trigger and storage output binding.
    return new MultiResponse()
    {
        // Write a single message.
        Messages = new string[] { message },
        HttpResponse = new OkObjectResult(message)
    };
}

الآن، يمكنك استخدام المعلمة الجديدة msg للكتابة إلى ربط الإخراج من التعليمات البرمجية للدالة. أضف السطر التالي من التعليمات البرمجية قبل استجابة النجاح لإضافة قيمة name إلى msg ربط الإخراج.

msg.setValue(name);

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

يجب أن يبدو الأسلوب الخاص بك run الآن مثل المثال التالي:

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

تحديث الاختبارات

لأن النموذج الأصلي أيضًا ينشئ مجموعة من الاختبارات، فأنت تحتاج إلى تحديث هذه الاختبارات لمعالجة msg المعلمة run الجديدة في توقيع الأسلوب.

تصفح إلى موقع رمز الاختبار الخاص بك تحت src/test/java، وافتح ملف Function.java project، واستبدل السطر من الكود تحت //Invoke بالرمز التالي.

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

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

يتكامل Visual Studio Code مع أدوات Azure Functions الأساسية ليتيح لك تشغيل هذا project على جهاز التطوير المحلي قبل النشر على Azure. إذا لم يكن لديك Core Tools مثبتا محليا، يطلب منك تثبيته في المرة الأولى التي تشغل فيها project.

  1. لاستدعاء وظيفتك، اضغط F5 لتشغيل تطبيق الوظيفة project. تعرض لوحة Terminal عملية الإخراج من Core Tools. يبدأ تطبيقك في لوحة المحطة الطرفية. يمكنك مشاهدة نقطة نهاية URL للوظيفة التي تم تشغيلها بواسطة HTTP وتعمل محليًا.

    لقطة شاشة للوظيفة المحلية Visual Studio إخراج الكود.

    إذا لم يكن لديك Core Tools مثبتة بالفعل، اختر Install لتثبيت Core Tools عند الطلب to do ذلك.
    إذا واجهت مشكلة في التشغيل على ويندوز، تأكد من أن الطرفية الافتراضية لكود Visual Studio ليست مضبوطة على WSL Bash.

  2. مع تشغيل الأدوات الأساسية، انتقل إلى منطقة Azure: الوظائف. تحت Functions، قم بالتوسع Local Project>Functions. انقر بزر الماوس الأيمن (Windows) أو Ctrl - انقر فوق الدالة (macOS) HttpExample واختر تنفيذ الدالة الآن....

    لقطة شاشة لوظيفة التنفيذ الآن من Visual Studio Code.

  3. في Enter request body اضغط Enter لإرسال رسالة الطلب هذه إلى الوظيفة الخاصة بك.

  4. عندما تنطبق الوظيفة محليا وتعيد الرد، يتم عرض إشعار في Visual Studio Code. تعرض المعلومات حول تنفيذ الدالة في لوحة Terminal.

  5. اضغط على Ctrl + C لإيقاف Core Tools وقطع اتصال مصحح الأخطاء.

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

  1. كما في المقال السابق، اضغط F5 لتشغيل تطبيق الوظائف project وأدوات النواة.

  2. مع تشغيل الأدوات الأساسية، انتقل إلى منطقة Azure: الوظائف. تحت Functions، قم بالتوسع Local Project>Functions. انقر بزر الماوس الأيمن (Ctrl-click على Mac) فوق الدالة HttpExample وحدد Execute Function Now....

    لقطة شاشة لوظيفة التنفيذ من Visual Studio Code.

  3. في Enter request body، ترى قيمة نص رسالة الطلب { "name": "Azure" }. اضغط Enter لإرسال رسالة الطلب هذه إلى الوظيفة.

  4. بعد إرجاع الاستجابة، اضغط Ctrl + C لإيقاف Core Tools.

لأنك تستخدم storage connection string، تتصل وظيفتك بحساب Azure storage عند تشغيله محليا. يتم إنشاء قائمة انتظار جديدة باسم outqueue في حسابك storage بواسطة وقت تشغيل الوظائف عند استخدام ربط الإخراج لأول مرة. ستستخدم Storage Explorer للتحقق من أن قائمة الانتظار تم إنشاؤها مع الرسالة الجديدة.

ربط Storage Explorer بحسابك

تجاوز هذا القسم إذا كنت قد قمت بالفعل بتثبيت Azure Storage Explorer وربطته بحسابك في Azure.

  1. شغل أداة Azure Storage Explorer، اختر أيقونة الاتصال على اليسار، واختر Add an account.

    لقطة شاشة لكيفية إضافة حساب Azure إلى مايكروسوفت Azure Storage Explorer.

  2. في مربع Connect، اختر أضف حساب Azure، واختر بيئة Azure، ثم اختر تسجيل الدخول... .

    لقطة شاشة لتسجيل الدخول إلى نافذة حسابك Azure.

بعد تسجيل الدخول بنجاح إلى حسابك، ترى جميع اشتراكات Azure المرتبطة بحسابك. اختر اشتراكك وحدد Open Explorer.

افحص قائمة انتظار الإخراج

  1. في Visual Studio Code، اضغط F1 لفتح لوحة الأوامر، ثم ابحث عن الأمر وتشغيله Azure Storage: Open in Storage Explorer واختر اسم حسابك storage. يفتح حساب storage الخاص بك في Azure Storage Explorer.

  2. قم بتوسيع عقدة قائمة الانتظار، ثم حدد قائمة الانتظار المسماة outqueue.

    تحتوي قائمة الانتظار على الرسالة التي تربط إخراج قائمة الانتظار التي تم إنشاؤها عند تشغيل الدالة التي تم تشغيلها بواسطة HTTP. إذا قمت باستدعاء الدالة بقيمة name الافتراضية Azure، فإن رسالة الطابور هي Name مرسلة إلى الدالة: Azure.

    لقطة شاشة لرسالة الطابور المعروضة في Azure Storage Explorer.

  3. قم بتشغيل الوظيفة مرة أخرى، وأرسل طلبًا آخر، وسترى رسالة جديدة في قائمة الانتظار.

الآن، حان الوقت لإعادة نشر تطبيق الوظائف المحدث على Azure.

إعادة نشر التطبيق المحدث والتحقق منه

  1. في Visual Studio Code، اضغط F1 لفتح لوحة الأوامر. في لوحة الأوامر، ابحث عن Azure Functions: Deploy to function app... واختره.

  2. اختر تطبيق الوظائف الذي إنشاته في المقالة الأولى. لأنك تعيد نشر project في نفس التطبيق، اختر Deploy لإلغاء التحذير حول استبدال الملفات.

  3. بعد اكتمال النشر، يمكنك مرة أخرى استخدام وظيفة تنفيذ الآن... ميزة لتفعيل الوظيفة في Azure. يقوم هذا الأمر تلقائيا باسترجاع مفتاح access للوظيفة ويستخدمه عند استدعاء نقطة نهاية مشغل HTTP.

  4. مرة أخرى، عرض الرسالة في قائمة انتظار storage للتحقق من أن ربط الإخراج يولد رسالة جديدة في الطابور.

تنظيف الموارد

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

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

  1. في Visual Studio Code، اضغط F1 لفتح لوحة الأوامر. في لوحة الأوامر، ابحث عن Azure: Open in portal واختره.

  2. اختر التطبيق الخاص بالوظائف، واضغط زر Enter. صفحة تطبيق الوظائف تفتح في Azure portal.

  3. في علامة التبويب نظرة عامة حدد الارتباط المسمى بجوار Resource group.

    لقطة شاشة تعرض تحديد مجموعة الموارد لحذفها من صفحة تطبيق الوظائف.

  4. في صفحة مجموعة الموارد، راجع قائمة الموارد المدرجة وتحقق من أنها هي التي تريد حذفها.

  5. حدد حذف مجموعة الموارد، واتبع الإرشادات.

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

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

لقد قمت بتحديث وظيفة HTTP الخاصة بك لكتابة البيانات إلى قائمة انتظار Storage. الآن يمكنك معرفة المزيد عن تطوير الوظائف باستخدام Visual Studio Code: