Függvények csatlakoztatása Azure szolgáltatásokhoz kötések használatával

Amikor függvényt hozol létre, a rendszer nyelvfüggő triggerkódot ad hozzá a projektbe egy triggersablon-készletből. Ha a függvényt bemeneti vagy kimeneti kötések használatával szeretné más szolgáltatásokhoz csatlakoztatni, adott kötésdefiníciókat kell hozzáadnia a függvényhez. A kötésekről további információért olvassa el az Azure Functions triggerek és kötések fogalmait.

Helyi fejlesztés

A függvények helyi fejlesztésekor frissítenie kell a függvénykódot kötések hozzáadásához. A function.jsonhasználó nyelvek esetében a Visual Studio Code eszközkészletet biztosít a függvények kötéseinek hozzáadásához.

Kötések manuális hozzáadása példák alapján

Ha kötést ad hozzá egy meglévő függvényhez, kötésspecifikus attribútumokat kell hozzáadnia a függvénydefinícióhoz a kódban.

Ha kötést ad hozzá egy meglévő függvényhez, kötésspecifikus széljegyzeteket kell hozzáadnia a függvénydefinícióhoz a kódban.

Ha kötést ad hozzá egy meglévő függvényhez, frissítenie kell a függvénykódot, és hozzá kell adnia egy definíciót a function.json konfigurációs fájlhoz.

Ha kötést ad hozzá egy meglévő függvényhez, a modelltől függően frissítenie kell a függvénydefiníciót:

Kötésspecifikus széljegyzeteket kell hozzáadnia a függvénydefinícióhoz a kódban.

A Go-ban main() a függvény folyékony regisztrációs API-jának használatával konfigurálhatja a támogatott eseményindítókat. Minden eseményindító-típushoz tartozik egy dedikált regisztrációs módszer, amely funkcionális beállításokat kínál a konfigurációhoz. Nincs szükség külön kötéskonfigurációs fájlra.

Az alábbi példa egy HTTP által aktivált függvényt mutat be. Ha Go-függvényből kell írnia a Queue Storage-ba, használja közvetlenül az Azure SDK for Go-t, mert a Queue Storage kimeneti kötéseket a Go worker jelenleg nem támogatja:

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

Megjegyzés:

A Go-feldolgozó jelenleg csak az eseményindítókat támogatja. A bemeneti és kimeneti kötések, például a Queue Storage kimeneti kötései még nem érhetők el. A Azure SDK for Go használatával közvetlenül a függvény kódjából léphet kapcsolatba más Azure-szolgáltatásokkal.

A Go-feldolgozó jelenleg a következő triggertípusokat támogatja:

Trigger típusa Regisztrációs módszer Példák
HTTP app.HTTP() HTTP-minták
időzítő app.Timer() Timer-minták
Azure Cosmos DB app.CosmosDB() Cosmos DB minták
Azure Service Bus (üzenetsor) app.ServiceBusQueue() Service Bus üzenetsorminták
Azure Service Bus (téma) app.ServiceBusTopic() Service Bus témakörminták
Eseményközpontok app.EventHub() Event Hubs-minták
Event Grid app.EventGrid() Minták az Event Gridhez
Blob Storage app.Blob() Blob-minták

További információkért tekintse meg a Go fejlesztői referenciát.

Az alábbi példa bemutatja a függvénydefiníciót, miután hozzáadtunk egy sorozat-tároló kimeneti kötést egy HTTP által aktivált függvényhez.

Mivel a HTTP által aktivált függvény HTTP-választ is ad vissza, a függvény egy MultiResponse objektumot ad vissza, amely a HTTP és az üzenetsor kimenetét egyaránt jelöli.

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

Ez a példa a kimeneti kötést MultiResponse tartalmazó objektum definíciója:

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

Ez a példa ASP.NET Core integrációt használ. Ha nem ASP.NET Core integrációt használ, HttpRequestHttpRequestData és IActionResultHttpResponseData-ra kell módosítania.

A függvény befejeződésekor a rendszer üzeneteket küld az üzenetsorba. A kimeneti kötés definiálásának módja a folyamatmodelltől függ. További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

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

További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

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

A kimeneti kötés definiálásának módja a Node.js modell verziójától függ. További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

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

További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

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

A kimeneti kötés definiálásának módja a Python-modell verziójától függ. További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

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

A kimeneti kötés definiálásának módja a Node.js modell verziójától függ. További információ, beleértve a példa kötéskódra mutató hivatkozásokat, amelyekre hivatkozhat, olvassa el a Kötések hozzáadása függvényhez című témakört.

Az alábbi táblázat segítségével példákat talál a meglévő függvények frissítéséhez használható konkrét kötéstípusokra. Először válassza ki a project megfelelő nyelvi lapot.

A C# kötéskódja az adott folyamatmodelltől függ.

Szolgáltatás Példák Minták
Blob Storage Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer Input
Output
Link
Azure SQL Trigger
Input
Output
Link
Event Grid Trigger
Output
Link
Event Hubs 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
Időzítő Trigger Link
Twilio Output Link
Szolgáltatás Példák Minták
Blob Storage Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer Input
Output
Link
Azure SQL Trigger
Input
Output
Event Grid Trigger
Output
Link
Event Hubs 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
Időzítő Trigger Link
Twilio Output
Szolgáltatás Példák Minták
Blob Storage Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer Input
Output
Azure SQL Trigger
Input
Output
Link
Event Grid Trigger
Output
Event Hubs 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
Időzítő Trigger
Twilio Output
Szolgáltatás Példák Minták
Blob Storage Trigger
Input
Output
Azure Cosmos DB Trigger
Input
Output
Azure SQL Trigger
Input
Output
Event Grid Trigger
Output
Event Hubs 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
Időzítő Trigger
Twilio Output

A Python kötéskódja a Python-modell verziójától függ.

Szolgáltatás Példák Minták
Blob Storage Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Azure Data Explorer Input
Output
Azure SQL Trigger
Input
Output
Link
Event Grid Trigger
Output
Event Hubs 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
Időzítő Trigger
Twilio Output

Visual Studio Code

Ha Visual Studio Code-ot használ a függvény fejlesztéséhez, és a függvény egy function.json fájlt használ, a Azure Functions bővítmény automatikusan hozzáadhat kötést egy meglévő function.json fájlhoz. További információ: Bemeneti és kimeneti kötések hozzáadása.

Azure Portal

Amikor a függvényeket a Azure portal fájlban fejleszti, bemeneti és kimeneti kötéseket ad hozzá a Integrate lapon egy adott függvényhez. Az új kötések a nyelvtől függően hozzáadódnak a function.json fájlhoz vagy a metódusattribútumokhoz. Az alábbi cikkek példákat mutatnak be arra, hogyan adhat kötéseket egy meglévő függvényhez a portálon:

Következő lépések