مشغل Azure Blob storage Azure Functions

يبدأ مشغل Blob storage دالة عند الكشف عن كائن ثنائي كبير الحجم جديد أو محدث. يتم توفير محتويات الكائن الثنائي كبير الحجم ك input إلى الدالة.

تلميح

هناك عدة طرق لتنفيذ التعليمات البرمجية للدالة الخاصة بك استنادا إلى التغييرات على الكائنات الثنائية كبيرة الحجم في حاوية storage. إذا اخترت استخدام مشغل Blob storage، فهناك تطبيقان معروضان: تطبيق يستند إلى الاستقصاء (المشار إليه في هذه المقالة) والآخر يستند إلى الحدث. يوصى باستخدام التنفيذ المستند إلى الحدث لأنه يحتوي على زمن انتقال أقل من الآخر. أيضا، تدعم خطة Flex Consumption مشغل Blob storage المستند إلى الحدث فقط.

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

للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع overview.

هام

تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل المطور Azure Functions Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.

يدعم Azure Functions نموذجين للبرمجة ل Python. تعتمد الطريقة التي تحدد بها روابطك على نموذج البرمجة الذي اخترته.

يتيح لك نموذج برمجة Python v2 تحديد الروابط باستخدام المحسنات مباشرة في التعليمات البرمجية لدالة Python. لمزيد من المعلومات، راجع دليل مطور Python.

تدعم هذه المقالة كلا نموذجي البرمجة.

مثال

يمكن إنشاء دالة C# باستخدام أحد أوضاع C# التالية:

  • نموذج العامل المعزول: دالة C# المترجمة التي يتم تشغيلها في عملية عامل معزولة عن وقت التشغيل. مطلوب عملية عامل معزولة لدعم وظائف C# التي تعمل على إصدارات LTS وغير LTS .NET وإطار عمل .NET. تستخدم ملحقات دالات معالجة العامل المعزولة مساحات أسماء Microsoft.Azure.Functions.Worker.Extensions.*.
  • نموذج قيد المعالجة: دالة C# المحولة برمجيا التي تعمل في نفس العملية مثل وقت تشغيل الوظائف. في تباين هذا النموذج، يمكن تشغيل الدالات باستخدام البرمجة النصية C#، والتي يتم دعمها بشكل أساسي لتحرير مدخل C#. تستخدم ملحقات الوظائف قيد المعالجة مساحات أسماء Microsoft.Azure.WebJobs.Extensions.*.

المثال التالي هو دالة C# التي تعمل في عملية عامل معزولة وتستخدم مشغل كائن ثنائي كبير الحجم مع كل من إدخال الكائن الثنائي كبير الحجم وروابط blob الناتجة. يتم تشغيل الوظيفة من خلال إنشاء كائن ثنائي كبير الحجم في حاوية test-sample-trigger. يقرأ ملفا نصيا من حاوية test-samples-input وينشئ ملفا نصيا جديدا في حاوية إخراج استنادًا إلى اسم الملف الذي تم تشغيله.

public static class BlobFunction
{
    [Function(nameof(BlobFunction))]
    [BlobOutput("test-samples-output/{name}-output.txt")]
    public static string Run(
        [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
        [BlobInput("test-samples-input/sample1.txt")] string myBlob,
        FunctionContext context)
    {
        var logger = context.GetLogger("BlobFunction");
        logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
        logger.LogInformation("Input Item = {myBlob}", myBlob);

        // Blob Output
        return "blob-output content";
    }
}

تستخدم هذه الدالة صفيف بايت لكتابة سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاوية myblob .

مستند إلى الاستقصاء:

يستخدم المثال التالي مشغل الاستقصاء الافتراضي:

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

يستخدم المثال التالي مشغل Event Grid:

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               source = "EventGrid",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

يستخدم هذا المثال أنواع SDKBlobClient access خصائص الكائن الثنائي كبير الحجم.

@FunctionName("processBlob")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobClient blob,
        @BindingName("name") String file,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + blob.getProperties().getBlobSize());
}

يستخدم هذا المثال أنواع SDKBlobContainerClient access معلومات حول الكائنات الثنائية كبيرة الحجم في الحاوية التي قامت بتشغيل الدالة.

@FunctionName("containerOps")
public void run(
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage") BlobContainerClient container,
        ExecutionContext ctx)
{
    container.listBlobs()
            .forEach(b -> ctx.getLogger().info(b.getName()));
}

يستخدم BlobClient هذا للحصول على معلومات من ربط الإدخال حول الكائن الثنائي كبير الحجم الذي قام بتشغيل التنفيذ.

@FunctionName("checkAgainstInputBlob")
public void run(
        @BlobInput(
                name = "inputBlob",
                path = "inputContainer/input.txt") BlobClient inputBlob,
        @BlobTrigger(
                name = "content",
                path = "images/{name}",
                connection = "AzureWebJobsStorage",
                dataType = "string") String triggerBlob,
        ExecutionContext ctx)
{
    ctx.getLogger().info("Size = " + inputBlob.getProperties().getBlobSize());
}

يوضح هذا المثال كيفية الحصول على BlobClient من كل من مشغل blob Storage ومن ربط الإدخال على مشغل HTTP:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import { app, InvocationContext } from "@azure/functions";

export async function storageBlobTrigger(
  blobStorageClient: StorageBlobClient, // SDK binding provides this client
  context: InvocationContext
): Promise<void> {
  context.log(`Blob trigger processing: ${context.triggerMetadata.name}`);

  // Access to full SDK capabilities
  const blobProperties = await blobStorageClient.blobClient.getProperties();
  context.log(`Blob size: ${blobProperties.contentLength}`);

  // Download blob content
  const downloadResponse = await blobStorageClient.blobClient.download();
  context.log(`Content: ${downloadResponse}`);
}

// Register the function
app.storageBlob("storageBlobTrigger", {
  path: "snippets/{name}",
  connection: "AzureWebJobsStorage",
  sdkBinding: true, // Enable SDK binding
  handler: storageBlobTrigger,
});

يوضح هذا المثال كيفية الحصول على ContainerClient من كل من ربط إدخال كائن ثنائي كبير الحجم Storage باستخدام مشغل HTTP:

import "@azure/functions-extensions-blob"; // This is the mandatory first import for SDK binding
import { StorageBlobClient } from "@azure/functions-extensions-blob";
import {
  app,
  HttpRequest,
  HttpResponseInit,
  input,
  InvocationContext,
} from "@azure/functions";

const blobInput = input.storageBlob({
  path: "snippets",
  connection: "AzureWebJobsStorage",
  sdkBinding: true,
});

export async function listBlobs(
  request: HttpRequest,
  context: InvocationContext
): Promise<HttpResponseInit> {
  // Get input binding for a specific container
  const storageBlobClient = context.extraInputs.get(
    blobInput
  ) as StorageBlobClient;

  // List all blobs in the container
  const blobs = [];
  for await (const blob of storageBlobClient.containerClient.listBlobsFlat()) {
    blobs.push(blob.name);
  }

  return { jsonBody: { blobs } };
}

app.http("listBlobs", {
  methods: ["GET"],
  authLevel: "function",
  extraInputs: [blobInput],
  handler: listBlobs,
});

يوضح المثال التالي رمز TypeScript لمشغل كائن ثنائي كبير الحجم. تقوم الوظيفة بكتابة سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاوية samples-workitems.

تقوم السلسلة {name} في مسار مشغل الكائن الثنائي كبير الحجم samples-workitems/{name} بإنشاء تعبير binding يمكنك استخدامه في التعليمات البرمجية للدالة access اسم ملف الكائن الثنائي كبير الحجم المشغل. لمزيد من المعلومات، راجع أنماط أسماء الكائن الثنائي كبير الحجم لاحقاً في هذه المقالة.

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: storageBlobTrigger1,
});

يوضح المثال التالي رمز JavaScript لمشغل كائن ثنائي كبير الحجم. تقوم الوظيفة بكتابة سجل عند إضافة كائن ثنائي كبير الحجم أو تحديثه في الحاوية samples-workitems.

تقوم السلسلة {name} في مسار مشغل الكائن الثنائي كبير الحجم samples-workitems/{name} بإنشاء تعبير binding يمكنك استخدامه في التعليمات البرمجية للدالة access اسم ملف الكائن الثنائي كبير الحجم المشغل. لمزيد من المعلومات، راجع أنماط أسماء الكائن الثنائي كبير الحجم لاحقاً في هذه المقالة.

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

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

يوضح المثال التالي كيفية إنشاء دالة يتم تشغيلها عند إضافة ملف إلى حاوية source blob storage.

يتضمن ملف تكوين الوظيفة (function.json) عملية ربط مع تعيين type لـ blobTrigger وdirection إلى in.

{
  "bindings": [
    {
      "name": "InputBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "source/{name}",
      "connection": "MyStorageAccountConnectionString"
    }
  ]
}

فيما يلي التعليمة البرمجية المرتبطة بملف run.ps1.

param([byte[]] $InputBlob, $TriggerMetadata)

Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"

يستخدم هذا المثال أنواع SDK access الكائن BlobClient الأساسي الذي يوفره مشغل Blob storage مباشرة:

import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob

app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.blob_trigger(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
    logging.info(
        f"Python blob trigger function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )

للحصول على أمثلة لاستخدام أنواع SDK أخرى، راجع عينات ContainerClient و StorageStreamDownloader. للحصول على برنامج تعليمي خطوة بخطوة حول كيفية تضمين روابط نوع SDK في تطبيق الوظائف، اتبع Python SDK Bindings ل Blob Sample.

لمعرفة المزيد، بما في ذلك روابط نوع SDK الأخرى المدعومة، راجع روابط نوع SDK.

يسجل هذا المثال اسم الكائن الثنائي كبير الحجم وحجمه من مشغل الكائن الثنائي كبير الحجم الوارد.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="samples-workitems/{name}",
                  connection="MyStorageAccountAppSetting")
def test_function(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

السمات

تستخدم كل من in-process و solated worker process C#‎ BlobAttribute لتعريف الدالة. يستخدم البرنامج النصي C# بدلا من ذلك ملف تكوين function.json كما هو موضح في دليل البرمجة النصية C#‎.

تأخذ الدالة الإنشائية سمة المعلمات التالية:

المعلمة ‏‏الوصف‬
BlobPath المسار إلى كائن ثنائي كبير الحجم.
اتصال اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال بالكائنات الثنائية كبيرة الحجم Azure. راجع الاتصالات.
Access يشير إلى ما إذا كنت ستقرأ أو تكتب.
مصدر تعيين مصدر الحدث المشغل. يستخدم BlobTriggerSource.EventGridلمشغل كائن ثنائي كبير الحجم قائم على شبكة الأحداث، والذي يوفر زمن انتقال أقل. الافتراضي هو BlobTriggerSource.LogsAndContainerScan، الذي يستخدم آلية الاستقصاء القياسية للكشف عن التغييرات في الحاوية.

فيما يلي سمة BlobTrigger في توقيع أسلوب:

[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
    [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
    [BlobInput("test-samples-input/sample1.txt")] string myBlob,
    FunctionContext context)

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

الديكور

ينطبق فقط على نموذج برمجة Python v2.

بالنسبة لوظائف Python v2 المحددة باستخدام المحسنات، تحدد الخصائص التالية على blob_trigger مصمم الديكور مشغل Blob Storage:

الخاصية ‏‏الوصف‬
arg_name يُعلن اسم المعلمة في توقيع الدالة. عندما يتم تشغيل الدالة، تحتوي قيمة هذه المعلمة على محتويات رسالة قائمة الانتظار.
path container للمراقبة. قد يكون نمط اسم كائن ثنائي كبير الحجم.
connection connection string حساب storage.
source تعيين مصدر الحدث المشغل. يستخدم EventGridلمشغل كائن ثنائي كبير الحجم قائم على شبكة الأحداث، والذي يوفر زمن انتقال أقل. الافتراضي هو LogsAndContainerScan، الذي يستخدم آلية الاستقصاء القياسية للكشف عن التغييرات في الحاوية.

للحصول على وظائف Python المعرفة باستخدام function.json، راجع قسم التكوين.

تعليقات توضيحية

يتم استخدام السمة @BlobTrigger لمنحك access إلى الكائن الثنائي كبير الحجم الذي قام بتشغيل الدالة. للحصول على التفاصيل، ارجع إلى مثال على المشغل. استخدم الخاصية source لتعيين مصدر الحدث المشغل. يستخدم EventGridلمشغل كائن ثنائي كبير الحجم قائم على شبكة الأحداث، والذي يوفر زمن انتقال أقل. الافتراضي هو LogsAndContainerScan، الذي يستخدم آلية الاستقصاء القياسية للكشف عن التغييرات في الحاوية. |

التكوين

ينطبق فقط على نموذج برمجة Python v1.

يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options تم تمريره app.storageBlob() إلى الأسلوب .

الخاصية ‏‏الوصف‬
المسار container للمراقبة. قد يكون نمط اسم كائن ثنائي كبير الحجم.
الاتصال اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال بالكائنات الثنائية كبيرة الحجم Azure. راجع الاتصالات.
مصدر تعيين مصدر الحدث المشغل. يستخدم EventGridلمشغل كائن ثنائي كبير الحجم قائم على شبكة الأحداث، والذي يوفر زمن انتقال أقل. الافتراضي هو LogsAndContainerScan، الذي يستخدم آلية الاستقصاء القياسية للكشف عن التغييرات في الحاوية.

يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.

خاصية function.json ‏‏الوصف‬
النوع يجب تعيينه إلى blobTrigger. يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في Azure portal.
الاتجاه يجب تعيينه إلى in. يتم تعيين هذه الخاصية تلقائيا عند إنشاء المشغل في Azure portal. تتم الإشارة إلى الاستثناءات في قسم الاستخدام.
الاسم اسم المتغير الذي يمثل blob في التعليمات البرمجية الدالة.
المسار container للمراقبة. قد يكون نمط اسم كائن ثنائي كبير الحجم.
الاتصال اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال بالكائنات الثنائية كبيرة الحجم Azure. راجع الاتصالات.
مصدر تعيين مصدر الحدث المشغل. يستخدم EventGridلمشغل كائن ثنائي كبير الحجم قائم على شبكة الأحداث، والذي يوفر زمن انتقال أقل. الافتراضي هو LogsAndContainerScan، الذي يستخدم آلية الاستقصاء القياسية للكشف عن التغييرات في الحاوية.

راجع قسم Example للحصول على أمثلة كاملة.

بيانات التعريف

يوفر مشغل الكائنات الثنائية كبيرة الحجم العديد من خصائص بيانات التعريف. يمكن استخدام هذه الخصائص كجزء من تعبيرات الربط في روابط أخرى أو معلمات في التعليمات البرمجية الخاصة بك. هذه القيم لها نفس دلالات نوع CloudBlob.

الخاصية نوع ‏‏الوصف‬
BlobTrigger string المسار إلى الكائنات الثنائية كبيرة الحجم المشغلة.
Uri System.Uri معرّف الموارد المنتظم (URI) الخاص بالكائنات الثنائية كبيرة الحجم للموقع الأساسي.
Properties BlobProperties خصائص نظام الكائنات الثنائية كبيرة الحجم.
Metadata IDictionary<string,string> بيانات التعريف المعرفة من قبل المستخدم للكائنات الثنائية كبيرة الحجم.

يُسجِّل المثال التالي المسار إلى الكائنات الثنائية كبيرة الحجم المشغِّلة، بما في ذلك الحاوية:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 

بيانات التعريف

يوفر مشغل الكائنات الثنائية كبيرة الحجم العديد من خصائص بيانات التعريف. يمكن استخدام هذه الخصائص كجزء من تعبيرات الربط في روابط أخرى أو معلمات في التعليمات البرمجية الخاصة بك.

الخاصية ‏‏الوصف‬
blobTrigger المسار إلى الكائنات الثنائية كبيرة الحجم المشغلة.
uri معرّف الموارد المنتظم (URI) الخاص بالكائنات الثنائية كبيرة الحجم للموقع الأساسي.
properties خصائص نظام الكائنات الثنائية كبيرة الحجم.
metadata بيانات التعريف المعرفة من قبل المستخدم للكائنات الثنائية كبيرة الحجم.

يمكن الحصول على بيانات التعريف من الخاصية triggerMetadata للكائن context المقدم، كما هو موضح في المثال التالي، والذي يسجل المسار إلى الكائنات الثنائية كبيرة الحجم المشغلة (blobTrigger)، بما في ذلك الحاوية:

context.log(`Full blob path: ${context.triggerMetadata.blobTrigger}`);

بيانات التعريف

بيانات التعريف متوفرة من خلال المعلمة $TriggerMetadata.

الاستخدام

تعتمد أنواع الربط التي يدعمها مشغل Blob على إصدار حزمة الامتداد وصيغة C# المستخدمة في تطبيق الوظائف.

يمكن ربط مشغل الكائن الثنائي كبير الحجم بالأنواع التالية:

نوع ‏‏الوصف‬
string محتوى الكائن الثنائي كبير الحجم كسلسلة. استخدم عندما يكون محتوى الكائن الثنائي كبير الحجم نصا بسيطا.
byte[] وحدات البايت لمحتوى الكائن الثنائي كبير الحجم.
‏‏أنواع قابلة للتسلسل إلى JSON عندما يحتوي كائن ثنائي كبير الحجم على بيانات JSON، تحاول الدالات إلغاء تسلسل بيانات JSON إلى نوع كائن CLR (POCO) قديم عادي.
دفق1 دفق إدخال لمحتوى الكائن الثنائي كبير الحجم.
BlobClient1،
BlockBlobClient1،
PageBlobClient1،
AppendBlobClient1،
BlobBaseClient1
عميل متصل بالكائن الثنائي كبير الحجم. توفر هذه المجموعة من الأنواع أكبر قدر من التحكم لمعالجة الكائن الثنائي كبير الحجم ويمكن استخدامها للكتابة مرة أخرى إلى الكائن الثنائي كبير الحجم إذا كان الاتصال لديه إذن كاف.

1 لاستخدام هذه الأنواع، تحتاج إلى الرجوع إلى Microsoft. Azure. Functions.Worker.Extensions. Storage. Blobs 6.0.0 أو أحدث وتبعيات common لروابط نوع SDK.

يُوصى بالربط بـ stringأو Byte[] فقط عندما يكون حجم الكائن الثنائي كبير الحجم صغيرًا. ويُوصى بذلك نظرًا لتحميل محتويات الكائن الثنائي كبير الحجم بالكامل في الذاكرة. بالنسبة إلى معظم الكائنات الثنائية كبيرة الحجم، استخدم نوع Stream أو BlobClient. لمزيد من المعلومات، راجع التزامن واستخدام الذاكرة.

إذا تلقيت رسالة خطأ عند محاولة الربط بأحد أنواع SDK Storage، فتأكد من أن لديك مرجعا إلى اصدار Storage SDK الصحيح.

يمكنك أيضا استخدام StorageAccountAttribute لتحديد حساب storage لاستخدامه. يمكنك القيام بذلك عندما تحتاج إلى استخدام حساب storage مختلف عن الوظائف الأخرى في المكتبة. يأخذ المنشئ اسم إعداد تطبيق يحتوي على storage connection string. يمكن تطبيق السمة على مستوى المعلمة أو الأسلوب أو الفئة. يُظهر المثال التالي مستوى الفئة ومستوى الأسلوب:

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("BlobTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ....
}

يتم تحديد حساب storage المراد استخدامه بالترتيب التالي:

  • خاصية BlobTriggerالسمةConnection.
  • StorageAccountالسمة المطبقة على نفس المعلمة المماثلة لهاBlobTrigger.
  • السمة StorageAccount المطبقة على الوظيفة.
  • StorageAccountالسمة التي تم تطبيقها على الفئة.
  • حساب storage الافتراضي لتطبيق الوظائف، والذي يتم تعريفه في إعداد تطبيق AzureWebJobsStorage.

إشعار

دعم الربط إلى أنواع SDK قيد المعاينة حاليا ويقتصر على Azure Blob Storage SDK. لمزيد من المعلومات، راجع أنواع SDK في مقالة مرجع Java.

Access بيانات الكائن الثنائي كبير الحجم كوسيطة أولى لدالتك.

Access بيانات الكائن الثنائي كبير الحجم عبر معلمة تطابق الاسم المعين بواسطة معلمة اسم الربط في ملف function.json.

Access بيانات الكائن الثنائي كبير الحجم عبر المعلمة التي تم كتابتها على أنها InputStream. للحصول على التفاصيل، ارجع إلى مثال على المشغل.

تدعم الوظائف أيضا روابط نوع Python SDK Azure Blob storage، ما يتيح لك العمل مع بيانات الكائن الثنائي كبير الحجم باستخدام أنواع SDK الأساسية هذه:

إشعار

يتم دعم أنواع SDK المتزامنة فقط.

هام

يتوفر دعم أنواع SDK ل Python بشكل عام ويتم دعمه فقط لنموذج برمجة Python v2. لمزيد من المعلومات، راجع أنواع SDK في Python.

الاتصالات

تعد الخاصية connection مرجعا لتكوين البيئة الذي يحدد كيفية اتصال التطبيق بالكائنات الثنائية كبيرة الحجم Azure. ويجوز لها أن تحدد ما يلي:

إذا كانت القيمة المكونة مطابقة بدقة لإعداد واحد ومطابقة لبادئة للإعدادات الأخرى، يتم استخدام المطابقة الدقيقة.

سلسلة الاتصال

للحصول على connection string، اتبع الخطوات الموضحة في إدارة مفاتيح access الحساب storage. يجب أن يكون connection string لحساب storage للأغراض العامة، وليس لحساب Blob storage.

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

إذا كان اسم إعداد التطبيق يبدأ بـ "AzureWebJobs"، يمكنك تحديد باقي الاسم هنا فقط. على سبيل المثال، إذا تم تعيين connection إلى "MyStorage"، وقت تشغيل الدوال يبحث عن إعداد تطبيق يُسمى "MyStorage". إذا تركت connection فارغا، يستخدم وقت تشغيل الوظائف Storage connection string الافتراضي في إعداد التطبيق المسمى AzureWebJobsStorage.

الاتصالات القائمة على الهوية

إذا كنت تستخدم version 5.x أو أعلى من الملحق (bundle 3.x أو أعلى لمكدسات اللغات غير .NET)، بدلا من استخدام connection string مع سر، يمكنك أن يكون التطبيق يستخدم هوية Microsoft Entra. لاستخدام هوية، يمكنك تعريف الإعدادات ضمن بادئة شائعة تعين إلى الخاصية connection في تكوين المشغل والربط.

إذا كنت تقوم بإعداد connection إلى "AzureWebJobsStorage"، فشاهد اتصال باستضافة storage بهوية. لجميع الاتصالات الأخرى، يتطلب الملحق الخصائص التالية:

الخاصية قالب متغير البيئة ‏‏الوصف‬ مثال للقيمة
URI لخدمة الكائنات الثنائية كبيرة الحجم <CONNECTION_NAME_PREFIX>__serviceUri 1 عنوان URI لمستوى البيانات لخدمة الكائن الثنائي كبير الحجم التي تتصل بها، باستخدام نظام HTTPS. <https:// storage_account_name.blob.core.windows.net>

يمكن استخدام 1<CONNECTION_NAME_PREFIX>__blobServiceUri ك اسم مستعار. إذا كان استخدام تكوين الاتصال سوف يتم بواسطة مشغل كائن ثنائي كبير الحجم، blobServiceUri يجب أن يكون مصحوبًا أيضًا بـ queueServiceUri. انظر أدناه.

serviceUri لا يمكن استخدام النموذج عند استخدام تكوين الاتصال الكلي عبر الكائنات الثنائية كبيرة الحجم وقوائم الانتظار و/أو الجداول. يمكن ل URI تعيين خدمة الكائن الثنائي كبير الحجم فقط. كبديل، يمكنك توفير URI خصيصًا لكل خدمة، ما يسمح باستخدام اتصال واحد. إذا تم توفير كلا الإصدارين، يتم استخدام نموذج متعدد الخدمات. لتكوين الاتصال لخدمات متعددة، عيّن ما يلي بدلاً من <CONNECTION_NAME_PREFIX>__serviceUri:

الخاصية قالب متغير البيئة ‏‏الوصف‬ مثال للقيمة
URI لخدمة الكائنات الثنائية كبيرة الحجم <CONNECTION_NAME_PREFIX>__blobServiceUri عنوان URI لمستوى البيانات لخدمة الكائن الثنائي كبير الحجم التي تتصل بها، باستخدام نظام HTTPS. <https:// storage_account_name.blob.core.windows.net>
عنوان URI لخدمة قوائم الانتظار (مطلوب لمشغّلات الكائنات الثنائية كبيرة الحجم2) <CONNECTION_NAME_PREFIX>__queueServiceUri URI لمستوى البيانات لخدمة قوائم انتظار، باستخدام نظام HTTPS. هذه القيمة مطلوبة فقط لمشغّلات الكائنات الثنائية كبيرة الحجم. <https:// storage_account_name.queue.core.windows.net>

2 يعالج مشغل الكائن الثنائي كبير الحجم الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة poison blobs إلى قائمة انتظار. في نموذج serviceUri، يُستخدم اتصال AzureWebJobsStorage. ولكن عند تحديد blobServiceUri، يجب أيضًا توفير URI لخدمة قوائم الانتظار إلى جانب queueServiceUri. يوصى باستخدام الخدمة من نفس حساب storage مثل خدمة blob. تحتاج أيضا إلى التأكد من أن المشغل يمكنه قراءة الرسائل وكتابتها في خدمة قائمة الانتظار المكونة عن طريق تعيين دور مثل Storage Queue Data Contributor.

قد يتم تعيين خصائص أخرى لتخصيص الاتصال. راجع الخصائص الشائعة للاتصالات المعتمدة على الهوية.

الهوية المُدارة التي يعيّنها المُستخدم

لاستخدام هوية مدارة معينة من قبل المستخدم، أضف credential الخاصيتين و clientId بالإضافة إلى عنوان URI للخدمة:

الخاصية قالب متغير البيئة ‏‏الوصف‬ مثال للقيمة
URI لخدمة الكائنات الثنائية كبيرة الحجم <CONNECTION_NAME_PREFIX>__blobServiceUri URI مستوى البيانات لخدمة الكائن الثنائي كبير الحجم. https://mystorageaccount.blob.core.windows.net
URI لخدمة قائمة الانتظار <CONNECTION_NAME_PREFIX>__queueServiceUri URI لمستوى البيانات لخدمة قائمة الانتظار (مطلوب لمشغلات كائن ثنائي كبير الحجم). https://mystorageaccount.queue.core.windows.net
بيانات اعتماد <CONNECTION_NAME_PREFIX>__credential يجب تعيينه إلى managedidentity. managedidentity
معرف العميل <CONNECTION_NAME_PREFIX>__clientId معرف العميل للهوية المدارة المعينة من قبل المستخدم. 00000000-0000-0000-0000-000000000000

على سبيل المثال، إذا كان تكوين الربط الخاص بك يحدد connection = "BlobStorageConnection"، يمكنك تكوين إعدادات التطبيق التالية:

{
    "BlobStorageConnection__blobServiceUri": "https://mystorageaccount.blob.core.windows.net",
    "BlobStorageConnection__queueServiceUri": "https://mystorageaccount.queue.core.windows.net",
    "BlobStorageConnection__credential": "managedidentity",
    "BlobStorageConnection__clientId": "00000000-0000-0000-0000-000000000000"
}

تلميح

يوصى بالهويات المدارة المعينة من قبل المستخدم لسيناريوهات الإنتاج حيث تحتاج إلى تحكم دقيق في أذونات الهوية عبر موارد متعددة.

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

منح الإذن للهوية

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

هام

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

تحتاج إلى إنشاء تعيين دور يوفر access إلى حاوية الكائن الثنائي كبير الحجم في وقت التشغيل. أدوار الإدارة مثل Owner غير كافية. يعرض الجدول التالي الأدوار المضمنة الموصى بها عند استخدام ملحق Blob Storage في العملية العادية. قد يتطلب تطبيقك أذونات إضافية استنادا إلى التعليمات البرمجية التي تكتبها.

نوع الربط مثال على الأدوار المضمنة
المشغِّل Storage مالك بيانات BlobandStorage مساهم بيانات قائمة الانتظار1

يجب أيضا منح أذونات إضافية لاتصال AzureWebJobsStorage.2
ربط بيانات الإدخال قارئ بيانات للبيانات الثنائية الكبيرة للتخزين
ربط بيانات الإخراج Storage مالك بيانات الكائن الثنائي كبير الحجم

1 يعالج مشغل الكائن الثنائي كبير الحجم الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة poison blobs إلى قائمة انتظار على حساب storage المحدد بواسطة الاتصال.

2 يتم استخدام اتصال AzureWebJobsStorage داخليًا للكائنات الثنائية كبيرة الحجم وقوائم الانتظار التي تمكن المشغل. إذا تم تكوينه لاستخدام اتصال قائم على الهوية، فإنه يحتاج إلى أذونات إضافية تتجاوز المتطلبات الافتراضية. تتم تغطية الأذونات المطلوبة من قبل مالك بيانات Storage Blob، Storage Queue Data Contributor، Storage Account Contributor. لمعرفة المزيد، راجع الاتصال باستضافة storage بهوية.

أنماط اسم كائن ثنائي كبير الحجم

يمكنك تحديد نمط اسم كائن ثنائي كبير الحجم في الخاصية path في function.json أو في الدالة الإنشائية للسمة BlobTrigger. يمكن أن يكون نمط الاسم تعبير عامل تصفية أو ربط. توفر الأقسام التالية أمثلة.

تلميح

لا يمكن أن يحتوي اسم الحاوية على محلل في نمط الاسم.

الحصول على اسم الملف والملحق

يوضح المثال التالي كيفية ربط اسم ملف كائن ثنائي كبير الحجم والملحق بشكل منفصل:

"path": "input/{blobname}.{blobextension}",

إذا تمت تسمية كائن ثنائي كبير الحجم original-Blob1.txt، فإن قيم المتغيرين blobname وblobextension في التعليمة البرمجية للوظيفة هي original-Blob1 وtxt.

تصفية على اسم كائن ثنائي كبير الحجم

يتم تشغيل المثال التالي فقط على الكائنات الثنائية كبيرة الحجم في الحاوية input التي تبدأ بالسلسلة "original-":

"path": "input/original-{name}",

إذا كان اسم كائن ثنائي كبير الحجم original-Blob1.txt، فإن قيمة المتغير name في التعليمة البرمجية للوظيفة هي Blob1.txt.

تصفية على نوع الملف

يتم تشغيل المثال التالي فقط على ملفات .png:

"path": "samples/{name}.png",

تصفية على الأقواس المتعرجة في أسماء الملفات

للبحث عن الأقواس المتعرجة في أسماء الملفات، تخلص الأقواس باستخدام قوسين. يقوم المثال التالي بتصفية الكائنات الثنائية كبيرة الحجم التي تحتوي على أقواس متعرجة في الاسم:

"path": "images/{{20140101}}-{name}",

إذا تمت تسمية كائن ثنائي كبير الحجم بالاسم {20140101}-soundfile.mp3، فإن nameقيمة المتغير في التعليمة البرمجية للوظيفة هي soundfile.mp3.

الاستقصاء وزمن الانتقال

يعمل التحقق كهجين بين فحص السجلات وتشغيل عمليات المسح الضوئية الدورية للحاويات. يتم مسح الكائنات الثنائية كبيرة الحجم ضوئياً في مجموعات من 10,000 في وقت واحد مع رمز مميز للمتابعة المستخدم بين الفواصل الزمنية. إذا كان تطبيق الوظائف مُدرجًا على خطة الاستهلاك، فقد يكون هناك تأخير يصل إلى 10 دقائق في معالجة الكائنات الثنائية كبيرة الحجم الجديدة إذا تعطل تطبيق الوظائف.

تحذير

يتم إنشاء سجلات Storage على أساس "أفضل جهد" . ليس هناك ما يضمن أن يتم تسجيل جميع الأحداث. في بعض الحالات، قد يتم فقد السجلات.

إذا كنت تحتاج إلى معالجة كائن ثنائي كبير الحجم أسرع أو أكثر موثوقية، يجب أن تفكر في تبديل الاستضافة لاستخدام خطة App Service مع تمكين Always On، ما قد يؤدي إلى زيادة التكاليف. قد تفكر أيضا في استخدام مشغل آخر غير مشغل كائن ثنائي كبير الحجم للاستقصاء الكلاسيكي. لمزيد من المعلومات ومقارنة خيارات التشغيل المختلفة للحاويات blob storage، راجع Trigger على حاوية كائن ثنائي كبير الحجم.

إيصالات كائن ثنائي كبير الحجم

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

يخزن Azure Functions إيصالات الكائنات الثنائية كبيرة الحجم في حاوية تسمى azure-webjobs-hosts في حساب Azure storage لتطبيق الوظائف (المحدد بواسطة إعداد التطبيق AzureWebJobsStorage). يحتوي إيصال كائن ثنائي كبير الحجم على المعلومات التالية:

  • الوظيفة المشغلة (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>، على سبيل المثال: MyFunctionApp.Functions.CopyBlob)
  • اسم الحاوية
  • نوع الكائن الثنائي كبير الحجم (BlockBlob أو PageBlob)
  • اسم كائن ثنائي كبير الحجم
  • ETag (معرف إصدار كائن ثنائي كبير الحجم، على سبيل المثال: 0x8D1DC6E70A277EF)

لفرض إعادة معالجة كائن ثنائي كبير الحجم، احذف إيصال الكائن الثنائي كبير الحجم لهذا الكائن الثنائي كبير الحجم من حاوية azure-webjobs-hosts يدويا. في حين أن إعادة المعالجة قد لا تحدث على الفور، فمن المؤكد أن تحدث في وقت لاحق. لإعادة المعالجة فورا، يمكن تحديث scaninfo في azure-webjobs-hosts/blobscaninfo. سيتم مسح أي كائنات ثنائية كبيرة الحجم ضوئياً بطابع زمني تم تعديله مؤخراً بعد الخاصية LatestScan مرة أخرى.

كائنات ثنائية كبيرة الحجم غير قابلة للمعالجة

عندما تفشل دالة مشغل كائن ثنائي كبير الحجم لكائن ثنائي كبير الحجم معين، Azure Functions إعادة المحاولة التي تعمل بإجمالي خمس مرات بشكل افتراضي.

إذا فشلت جميع المحاولات الخمس، Azure Functions بإضافة رسالة إلى قائمة انتظار Storage تسمى webjobs-blobtrigger-poison. الحد الأقصى لعدد مرات إعادة المحاولة قابل للتكوين. يتم استخدام نفس إعداد MaxDequeueCount لمعالجة كائن ثنائي كبير الحجم غير قابل للمعالجة ومعالجة رسالة قائمة انتظار غير قابلة للمعالجة. رسالة قائمة الانتظار للكائنات الثنائية كبيرة الحجم غير القابلة للمعالجة هي عنصر JSON الذي يحتوي على الخصائص التالية:

  • FunctionId (بالتنسيق<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob أو PageBlob)
  • اسم الحاوية
  • BlobName
  • ETag (معرف إصدار كائن ثنائي كبير الحجم، على سبيل المثال: 0x8D1DC6E70A277EF)

استخدام الذاكرة والتزامن

عند الربط بنوع إخراج لا يدعم الدفق، مثل string، أو Byte[]، يجب أن يقوم وقت التشغيل بتحميل الكائن الثنائي كبير الحجم بالكامل في الذاكرة أكثر من مرة واحدة أثناء المعالجة. يمكن أن يؤدي هذا إلى استخدام ذاكرة أعلى من المتوقع عند معالجة الكائنات الثنائية كبيرة الحجم. عندما يكون ذلك ممكنا، استخدم نوع دعم الدفق. يعتمد دعم النوع على وضع C# وإصدار الملحق. لمزيد من المعلومات، راجع أنواع Binding.

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

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

تعتمد الطريقة التي يمكنك من خلالها التحكم في عدد عمليات التنفيذ المتزامنة على إصدار ملحق Storage الذي تستخدمه.

عند استخدام الإصدار 5.0.0 من ملحق Storage أو إصدار أحدث، يمكنك التحكم في تزامن المشغل باستخدام الإعداد maxDegreeOfParallelism في تكوين blobs في host.json.

تنطبق الحدود بشكل منفصل على كل دالة تستخدم مشغل كائن ثنائي كبير الحجم.

خصائص مضيف.json

يحتوي ملف host.json على الإعدادات التي تتحكم في سلوك مشغل كائن ثنائي كبير الحجم. راجع قسم إعدادات host.json للحصول على تفاصيل حول الإعدادات المتوفرة.

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