Connect functions to Azure services using bindings

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

التطوير المحلي

عند تطوير الدالات محليا، تحتاج إلى تحديث التعليمات البرمجية للدالة لإضافة روابط. بالنسبة للغات التي تستخدم function.json، يوفر تعليمة Visual Studio برمجية أدوات لإضافة الروابط إلى الدالة.

إضافة روابط يدويا استنادا إلى الأمثلة

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

عند إضافة ربط إلى دالة موجودة، تحتاج إلى إضافة تعليقات توضيحية خاصة بالربط إلى تعريف الدالة في التعليمات البرمجية.

عند إضافة ربط إلى دالة موجودة، تحتاج إلى تحديث التعليمات البرمجية للدالة وإضافة تعريف إلى ملف التكوين function.json.

عند إضافة ربط إلى دالة موجودة، تحتاج إلى تحديث تعريف الدالة، اعتمادا على النموذج الخاص بك:

تحتاج إلى إضافة تعليقات توضيحية خاصة بالربط إلى تعريف الدالة في التعليمات البرمجية.

في Go، تقوم بتكوين المشغلات المدعومة باستخدام واجهة برمجة التطبيقات الخاصة بالتسجيل السليم في وظيفتك main() . كل نوع من الزناد لديه طريقة تسجيل مخصصة مع خيارات وظيفية للتكوين. لا حاجة لملف تكوين ربط منفصل.

المثال التالي يظهر دالة يتم تفعيلها بواسطة HTTP. إذا كنت بحاجة للكتابة إلى Queue Storage من دالة Go، استخدم Azure SDK ل Go مباشرة لأن روابط مخرجات Queue Storage غير مدعومة حاليا من قبل عامل Go:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"

    "github.com/azure/azure-functions-golang-worker/sdk"
    "github.com/azure/azure-functions-golang-worker/worker"
)

func main() {
    app := sdk.FunctionApp()
    app.HTTP("HttpExample", httpHandler,
        sdk.WithMethods("GET", "POST"),
        sdk.WithAuth("anonymous"),
    )
    worker.Start(app)
}

func httpHandler(w http.ResponseWriter, r *http.Request) {
    name := r.URL.Query().Get("name")
    if name == "" {
        var body struct{ Name string }
        json.NewDecoder(r.Body).Decode(&body)
        name = body.Name
    }
    if name == "" {
        w.WriteHeader(http.StatusBadRequest)
        fmt.Fprint(w, "Please pass a name on the query string or in the request body.")
        return
    }
    // Queue output bindings are not yet supported in the Go worker.
    // Use the Azure SDK for Go to write to Queue Storage directly.
    fmt.Fprintf(w, "Hello, %s!", name)
}

ملحوظة

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

عامل Go يدعم حاليا أنواع المشغلات التالية:

نوع المشغل طريقة التسجيل امثله
HTTP app.HTTP() <عينات c0>HTTP
المؤقت app.Timer() <عينات المؤقت>
Azure Cosmos DB app.CosmosDB() <عينات قاعدة بيانات كوزموس> كوزموس
ناقل خدمة Azure (الطابور) app.ServiceBusQueue() Service Bus عينات الطابور
ناقل خدمة Azure (موضوع) app.ServiceBusTopic() Service Bus عينات المواضيع
مراكز الأحداث app.EventHub() نماذج مراكز الأحداث
شبكة الأحداث app.EventGrid() <عينات شبكة الحدث c0> الحدث
تخزين كائن ثنائي كبير الحجم app.Blob() <عينات c0>Blob

لمزيد من المعلومات، راجع مرجع مطوري Go.

المثال التالي يوضح تعريف الدالة بعد إضافة Queue Storage ربط الإخراج إلى دالة HTTP التي تم تفعيلها :

نظرا لأن الدالة التي تم تشغيلها من قبل HTTP تقوم أيضا بإرجاع استجابة HTTP، ترجع الدالة كائنا MultiResponse ، والذي يمثل كلا من إخراج HTTP وقوائم الانتظار.

[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)

هذا المثال هو تعريف MultiResponse العنصر الذي يتضمن ربط الإخراج:

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

يستخدم هذا المثال ASP.NET Core التكامل. إذا لم تكن تستخدم ASP.NET Core التكامل، عليك تغيير HttpRequest إلى HttpRequestData وIActionResult إلى HttpResponseData.

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

@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) {

لمزيد من المعلومات، بما في ذلك الارتباطات إلى مثال التعليمات البرمجية للربط التي يمكنك الرجوع إليها، راجع إضافة روابط إلى دالة.

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' };
    }
  },
});

تعتمد الطريقة التي تحدد بها ربط الإخراج على إصدار نموذج Node.js الخاص بك. لمزيد من المعلومات، بما في ذلك الارتباطات إلى مثال التعليمات البرمجية للربط التي يمكنك الرجوع إليها، راجع إضافة روابط إلى دالة.

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

لمزيد من المعلومات، بما في ذلك الارتباطات إلى مثال التعليمات البرمجية للربط التي يمكنك الرجوع إليها، راجع إضافة روابط إلى دالة.

@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.')

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

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,
});

تعتمد الطريقة التي تحدد بها ربط الإخراج على إصدار نموذج Node.js الخاص بك. لمزيد من المعلومات، بما في ذلك الارتباطات إلى مثال التعليمات البرمجية للربط التي يمكنك الرجوع إليها، راجع إضافة روابط إلى دالة.

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

تعتمد التعليمات البرمجية الملزمة ل C# على نموذج العملية المحدد.

الخدمة امثله العينات
مخزن البيانات الثنائية الكبيرة Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer ‏(Kusto) Input
Output
Link
Azure SQL Trigger
Input
Output
Link
شبكة الأحداث Trigger
Output
Link
مراكز الأحداث Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Queue Storage Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Service Trigger
Input
Output
Table Storage Input
Output
الموقت Trigger Link
Twilio Output Link
الخدمة امثله العينات
مخزن البيانات الثنائية الكبيرة Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer ‏(Kusto) Input
Output
Link
Azure SQL Trigger
Input
Output
شبكة الأحداث Trigger
Output
Link
مراكز الأحداث Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Queue Storage Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Service Trigger
Input
Output
Table Storage Input
Output
الموقت Trigger Link
Twilio Output
الخدمة امثله العينات
مخزن البيانات الثنائية الكبيرة Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer ‏(Kusto) Input
Output
Azure SQL Trigger
Input
Output
Link
شبكة الأحداث Trigger
Output
مراكز الأحداث Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Queue Storage Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Service Trigger
Input
Output
Table Storage Input
Output
الموقت Trigger
Twilio Output
الخدمة امثله العينات
مخزن البيانات الثنائية الكبيرة Trigger
Input
Output
Azure Cosmos DB Trigger
Input
Output
Azure SQL Trigger
Input
Output
شبكة الأحداث Trigger
Output
مراكز الأحداث Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Queue Storage Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Azure SignalR Service Trigger
Input
Output
Table Storage Input
Output
الموقت Trigger
Twilio Output

تعتمد التعليمات البرمجية الملزمة ل Python على إصدار طراز Python.

الخدمة امثله العينات
مخزن البيانات الثنائية الكبيرة Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer ‏(Kusto) Input
Output
Azure SQL Trigger
Input
Output
Link
شبكة الأحداث Trigger
Output
مراكز الأحداث Trigger
Output
IoT Hub Trigger
Output
HTTP Trigger Link
Queue Storage Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Service Bus Trigger
Output
Link
Azure SignalR Service Trigger
Input
Output
Table Storage Input
Output
الموقت Trigger
Twilio Output

تعليمة Visual Studio برمجية

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

Azure portal

عندما تطور وظائفك في Azure portal، تضيف روابط إدخال وإخراج في تبويب Integrate لدالة معينة. تتم إضافة الارتباطات الجديدة إما إلى ملف function.json أو إلى سمات الأسلوب، اعتمادا على لغتك. تعرض المقالات التالية أمثلة حول كيفية إضافة روابط إلى دالة موجودة في المدخل:

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