توصيل Azure Functions بـAzure Storage باستخدام Visual Studio Code

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

في هذه المقالة، ستعرف كيفية استخدام Visual Studio Code لتوصيل Azure Stoage بالوظيفة التي أنشأتها في المقالة السابقة للتشغيل السريع. ربط الإخراج الذي تضيفه إلى هذه الدالة يكتب البيانات من طلب HTTP إلى رسالة في قائمة انتظار تخزين Azure.

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

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

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

  • قم بتثبيت ⁧⁩ملحق Azure Storage لـVisual Studio Code⁧⁩.

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

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

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

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

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

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

    هام

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

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

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

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

تم تكوين المشروع الخاص بك لاستخدام مجموعة الملحقات، والتي تقوم تلقائيًا بتثبيت مجموعة محددة مسبقًا من حزم الملحقات.

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

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

الآن، يمكنك إضافة ارتباط مخرجات التخزين إلى مشروعك.

تم تكوين المشروع الخاص بك لاستخدام مجموعة الملحقات، والتي تقوم تلقائيًا بتثبيت مجموعة محددة مسبقًا من حزم الملحقات.

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

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

الآن، يمكنك إضافة ارتباط مخرجات التخزين إلى مشروعك.

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

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

الآن، يمكنك إضافة ارتباط مخرجات التخزين إلى مشروعك.

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

للكتابة إلى قائمة انتظار Azure Storage:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

يجب أن يبدو تعريف الأسلوب 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 الارتباط للوصول إليه كسمة في توقيع الوظيفة. باستخدام ربط إخراج، لا يلزم استخدام تعليمة 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.

استبدال الفئة الحالية HttpExample بالتعليمات البرمجية التالية:

    [Function("HttpExample")]
    public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
        FunctionContext executionContext)
    {
        var logger = executionContext.GetLogger("HttpExample");
        logger.LogInformation("C# HTTP trigger function processed a request.");

        var message = "Welcome to Azure Functions!";

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString(message);

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

الآن، يمكنك استخدام المعلمة الجديدة 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/main/java، ثم افتح ملف مشروع "Function.java"، واستبدل سطر التعليمات البرمجية أسفل //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 Core للسماح لك بتشغيل هذا المشروع على كمبيوتر التطوير المحلي قبل النشر إلى Azure. إذا لم يكن لديك Core Tools مثبتة محليا بالفعل، فستتم مطالبتك بتثبيتها في المرة الأولى التي تقوم فيها بتشغيل مشروعك.

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

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

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

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

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

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

  4. عند تنفيذ الوظيفة محليًا وإرجاع استجابة، يرفع تنبيه في Visual Studio التعليمات البرمجية. تعرض المعلومات حول تنفيذ الدالة في لوحة Terminal.

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

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

  1. كما هو الحال في المقالة السابقة، اضغط F5 لبدء مشروع تطبيق الوظائف وأدوات الذاكرة الرئيسة.

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

    Screenshot of executing function from Visual Studio Code.

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

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

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

قم بتوصيل " مستكشف التخزين" بحساب Azure

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

  1. قم بتشغيل أداة مستكشف تخزين Azure، وحدد أيقونة الاتصال على اليسار، وحدد إضافة حساب.

    Screenshot of how to add an Azure account to Microsoft Azure Storage Explorer.

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

    Screenshot of the sign-in to your Azure account window.

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

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

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

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

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

    Screenshot of the queue message shown in Azure Storage Explorer.

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

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

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

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

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

  3. بعد اكتمال النشر، يمكنك مرة أخرى استخدام ميزة Execute Function Now... لتشغيل الدالة في Azure.

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

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

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

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

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

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

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

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

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

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

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

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

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