ربط بيانات إدخال تخزين Azure Blob لوظائف Azure

يسمح لك ربط الإدخال بقراءة بيانات تخزين blob كإدخال إلى دالة Azure.

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

هام

تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة 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 Framework. تستخدم Microsoft.Azure.Functions.Worker.Extensions.* ملحقات دالات عملية العامل المعزولة مساحات الأسماء.
  • نموذج قيد المعالجة: دالة C# المحولة برمجيا التي تعمل في نفس العملية مثل وقت تشغيل الوظائف. في تباين هذا النموذج، يمكن تشغيل الدالات باستخدام البرمجة النصية C#، والتي يتم دعمها بشكل أساسي لتحرير مدخل C#. تستخدم Microsoft.Azure.WebJobs.Extensions.* ملحقات الوظائف قيد المعالجة مساحات الأسماء.

هام

سينتهي الدعم للنموذج قيد التنفيذ في 10 نوفمبر 2026. نوصي بشدة بترحيل تطبيقاتك إلى نموذج العامل المعزول للحصول على الدعم الكامل.

المثال التالي هو دالة 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";
        }
    }
}

يحتوي هذا القسم على الأمثلة التالية:

مشغل HTTP، والبحث عن اسم blob من سلسلة الاستعلام

يظهر المثال التالي دالة Java التى تستخدم HttpTrigger التعليق التوضيحي لتلقي معلمة تحتوي على اسم ملف في blob storage container. BlobInputثم يقرأ التعليق التوضيحي الملف ويمرر محتوياته إلى الدالة باسم abyte[].

  @FunctionName("getBlobSizeHttp")
  @StorageAccount("Storage_Account_Connection_String")
  public HttpResponseMessage blobSize(
    @HttpTrigger(name = "req", 
      methods = {HttpMethod.GET}, 
      authLevel = AuthorizationLevel.ANONYMOUS) 
    HttpRequestMessage<Optional<String>> request,
    @BlobInput(
      name = "file", 
      dataType = "binary", 
      path = "samples-workitems/{Query.file}") 
    byte[] content,
    final ExecutionContext context) {
      // build HTTP response with size of requested blob
      return request.createResponseBuilder(HttpStatus.OK)
        .body("The size of \"" + request.getQueryParameters().get("file") + "\" is: " + content.length + " bytes")
        .build();
  }

مشغل قائمة الانتظار، تلقي اسم blob من رسالة قائمة الانتظار

يظهر المثال التالي دالة Java التي تستخدمQueueTrigger التعليق التوضيحي لتلقي رسالة تحتوي على اسم ملف في blob storage container. BlobInputثم يقرأ التعليق التوضيحي الملف ويمرر محتوياته إلى الدالة باسم abyte[].

  @FunctionName("getBlobSize")
  @StorageAccount("Storage_Account_Connection_String")
  public void blobSize(
    @QueueTrigger(
      name = "filename", 
      queueName = "myqueue-items-sample") 
    String filename,
    @BlobInput(
      name = "file", 
      dataType = "binary", 
      path = "samples-workitems/{queueTrigger}") 
    byte[] content,
    final ExecutionContext context) {
      context.getLogger().info("The size of \"" + filename + "\" is: " + content.length + " bytes");
  }

من مكتبة وقت تشغيل دوال Java، استخدم تعليق @BlobInput التوضيحي على معلمات الدالة التي تأتي قيمتها من blob. يمكن استخدام هذا التعليق التوضيحي مع أنواع Java الأصلية أو POJOs أو القيم االخالية Optional<T>.

يظهر المثال التالي دالة TypeScript المشغلة في قائمة الانتظار التي تقوم بعمل نسخة من كائن ثنائي كبير الحجم. يتم تشغيل الدالة بواسطة رسالة قائمة انتظار تحتوي على blob للنسخ. تُسمى blob الجديدة {originalblobname}-Copy.

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

const blobInput = input.storageBlob({
    path: 'samples-workitems/{queueTrigger}',
    connection: 'MyStorageConnectionAppSetting',
});

const blobOutput = output.storageBlob({
    path: 'samples-workitems/{queueTrigger}-Copy',
    connection: 'MyStorageConnectionAppSetting',
});

export async function storageQueueTrigger1(queueItem: unknown, context: InvocationContext): Promise<unknown> {
    return context.extraInputs.get(blobInput);
}

app.storageQueue('storageQueueTrigger1', {
    queueName: 'myqueue-items',
    connection: 'MyStorageConnectionAppSetting',
    extraInputs: [blobInput],
    return: blobOutput,
    handler: storageQueueTrigger1,
});

يوضح المثال التالي دالة JavaScript المشغلة في قائمة الانتظار التي تقوم بعمل نسخة من كائن ثنائي كبير الحجم. يتم تشغيل الدالة بواسطة رسالة قائمة انتظار تحتوي على blob للنسخ. تُسمى blob الجديدة {originalblobname}-Copy.

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

const blobInput = input.storageBlob({
    path: 'samples-workitems/{queueTrigger}',
    connection: 'MyStorageConnectionAppSetting',
});

const blobOutput = output.storageBlob({
    path: 'samples-workitems/{queueTrigger}-Copy',
    connection: 'MyStorageConnectionAppSetting',
});

app.storageQueue('storageQueueTrigger1', {
    queueName: 'myqueue-items',
    connection: 'MyStorageConnectionAppSetting',
    extraInputs: [blobInput],
    return: blobOutput,
    handler: (queueItem, context) => {
        return context.extraInputs.get(blobInput);
    },
});

يوضح المثال التالي ربط إدخال كائنات ثنائية كبيرة الحجم، المُعرَّف في ملف function.json، ما يجعل بيانات الكائنات الثنائية كبيرة الحجم الواردة متوفرة لدالة PowerShell.

وإليك تكوين json :

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

إليك رمز الدالة:

# Input bindings are passed in via param block.
param([byte[]] $InputBlob, $TriggerMetadata)

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

يستخدم هذا المثال أنواع SDK للوصول مباشرة إلى الكائن الأساسي BlobClient الذي يوفره ربط إدخال تخزين Blob:

import logging

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

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="file")
@app.blob_input(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_input(req: func.HttpRequest, client: blob.BlobClient):
    logging.info(
        f"Python blob input function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )
    return "ok"

للحصول على أمثلة لاستخدام أنواع SDK الأخرى، راجع ContainerClient العينات و StorageStreamDownloader .

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

تنشئ التعليمات البرمجية نسخة من كائن ثنائي كبير الحجم.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobOutput1")
@app.route(route="file")
@app.blob_input(arg_name="inputblob",
                path="sample-workitems/test.txt",
                connection="<BLOB_CONNECTION_SETTING>")
@app.blob_output(arg_name="outputblob",
                path="newblob/test.txt",
                connection="<BLOB_CONNECTION_SETTING>")
def main(req: func.HttpRequest, inputblob: str, outputblob: func.Out[str]):
    logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
    outputblob.set(inputblob)
    return "ok"

السمات

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

تحدد عملية العامل المعزولة ربط إدخال باستخدام سمة BlobInputAttribute ، والتي تأخذ المعلمات التالية:

المعلمة ‏‏الوصف‬
BlobPath المسار إلى كائن ثنائي كبير الحجم.
Connection اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات.

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

الديكور

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

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

الخاصية ‏‏الوصف
arg_name اسم المتغير الذي يمثل blob في التعليمات البرمجية الدالة.
path المسار إلى الكائن الثنائي كبير الحجم للمصمم blob_input ، هو قراءة الكائن الثنائي كبير الحجم. بالنسبة للمصمم blob_output ، إنه إخراج أو نسخة من كائن ثنائي كبير الحجم للإدخل.
connection سلسلة الاتصال حساب التخزين.
data_type بالنسبة للغات المكتوبة ديناميكيا، يحدد نوع البيانات الأساسي. القيم المُحتملة هي string وbinary أو stream. لللاطلاع على المزيد من التفاصيل، راجع مفاهيم المشغّلات والروابط.

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

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

@BlobInputتمنحك السمة حق الوصول إلى blob الذي أدي إلى تشغيل الدالة. إذا كنت تستخدم byte array مع السمة، قم بتعيين dataType إلى binary. الإشارة إلىمثال الإدخال للحصول على التفاصيل.

التكوين

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

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

الخاصية ‏‏الوصف
المسار المسار إلى كائن ثنائي كبير الحجم.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات.

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

خاصية function.json ‏‏الوصف
النوع يجب تعيينه إلى blob.
الاتجاه يجب تعيينه إلى in. تتم الإشارة إلى الاستثناءات في قسم الاستخدام.
الاسم اسم المتغير الذي يمثل blob في التعليمات البرمجية الدالة.
المسار المسار إلى كائن ثنائي كبير الحجم.
الاتصال اسم إعداد تطبيق أو مجموعة إعداد تحدد كيفية الاتصال بـ Azure Blobs. راجع الاتصالات.
Datatype بالنسبة للغات المكتوبة ديناميكيا، يحدد نوع البيانات الأساسي. القيم المُحتملة هي string وbinary أو stream. لللاطلاع على المزيد من التفاصيل، راجع مفاهيم المشغّلات والروابط.

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

الاستخدام

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

عندما تريد أن تقوم الدالة بمعالجة كائن ثنائي كبير الحجم واحد، يمكن ربط ربط إدخال الكائن الثنائي كبير الحجم بالأنواع التالية:

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

عندما تريد أن تعالج الدالة كائنات ثنائية كبيرة الحجم متعددة من حاوية، يمكن ربط ربط إدخال الكائن الثنائي كبير الحجم بالأنواع التالية:

النوع ‏‏الوصف
T[] أو List<T> حيث T هو واحد من أنواع ربط إدخال كائن ثنائي كبير الحجم واحد صفيف أو قائمة من الكائنات الثنائية كبيرة الحجم المتعددة. يمثل كل إدخال كائن ثنائي كبير الحجم واحدا من الحاوية. يمكنك أيضا الربط بأي واجهات يتم تنفيذها بواسطة هذه الأنواع، مثل IEnumerable<T>.
BlobContainerClient1 عميل متصل بالحاوية. يوفر هذا النوع أكبر قدر من التحكم لمعالجة الحاوية ويمكن استخدامه للكتابة إليها إذا كان الاتصال لديه إذن كاف.

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

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

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

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

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

يتم تحديد حساب التخزين للاستخدام بالترتيب التالي:

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

@BlobInputتمنحك السمة حق الوصول إلى blob الذي أدي إلى تشغيل الدالة. إذا كنت تستخدم byte array مع السمة، قم بتعيين dataType إلى binary. الإشارة إلىمثال الإدخال للحصول على التفاصيل.

الوصول إلى بيانات الكائن الثنائي كبير الحجم باستخدام context.extraInputs.get().

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

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

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

هام

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

الاتصالات

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

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

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

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

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

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

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

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

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

الخاصية قالب متغير البيئة ‏‏الوصف مثال للقيمة
URI لخدمة الكائنات الثنائية كبيرة الحجم <CONNECTION_NAME_PREFIX>__serviceUri1 عنوان 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 يعالج مشغّل الكائنات الثنائية كبيرة الحجم الفشل عبر عمليات إعادة المحاولة المتعددة عن طريق كتابة الكائنات الثنائية كبيرة الحجم السامة في قائمة انتظار. في نموذج serviceUri، يُستخدم اتصال AzureWebJobsStorage. ولكن عند تحديد blobServiceUri، يجب أيضًا توفير URI لخدمة قوائم الانتظار إلى جانب queueServiceUri. يوصى باستخدام الخدمة من نفس حساب التخزين مثل خدمة blob. تحتاج أيضا إلى التأكد من أن المشغل يمكنه قراءة الرسائل وكتابتها في خدمة قائمة الانتظار المكونة عن طريق تعيين دور مثل مساهم بيانات قائمة انتظار التخزين.

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

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

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

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

هام

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

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

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

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

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

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

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