Connettere le funzioni ai servizi di Azure usando le associazioni

Quando si crea una funzione, il codice specifico del linguaggio per il trigger viene aggiunto nel progetto da un insieme di modelli di trigger. Se si vuole connettere la funzione ad altri servizi usando associazioni di input o output, è necessario aggiungere definizioni di binding specifiche nella funzione. Per altre informazioni sui binding, vedere Concetti su trigger e binding di Funzioni di Azure.

Sviluppo locale

Quando si sviluppano funzioni in locale, è necessario aggiornare il codice della funzione per aggiungere associazioni. Per i linguaggi che usano function.json, Visual Studio Code fornisce strumenti per aggiungere associazioni a una funzione.

Aggiungere manualmente associazioni basate su esempi

Quando si aggiunge un'associazione a una funzione esistente, è necessario aggiungere attributi specifici dell'associazione alla definizione della funzione nel codice.

Quando si aggiunge un'associazione a una funzione esistente, è necessario aggiungere annotazioni specifiche dell'associazione alla definizione della funzione nel codice.

Quando si aggiunge un'associazione a una funzione esistente, è necessario aggiornare il codice della funzione e aggiungere una definizione al file di configurazione function.json.

Quando si aggiunge un'associazione a una funzione esistente, è necessario aggiornare la definizione della funzione, a seconda del modello:

È necessario aggiungere annotazioni specifiche dell'associazione alla definizione della funzione nel codice.

In Go, si configurano i trigger supportati usando l'API di registrazione fluente nella funzione main(). Ogni tipo di trigger ha un metodo di registrazione dedicato con opzioni funzionali per la configurazione. Non è necessario alcun file di configurazione dell'associazione separato.

L'esempio seguente mostra una funzione attivata tramite HTTP. Se devi scrivere in Queue Storage da una funzione Go, usa direttamente l'SDK Azure per Go perché i binding di output di Queue Storage non sono attualmente supportati dal worker 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)
}

Note

Il worker Go supporta attualmente solo i trigger. I binding di input e output, ad esempio i binding di output di Queue Storage, non sono ancora disponibili. Usare il Azure SDK per Go per interagire con altri servizi Azure direttamente dal codice della funzione.

Il worker Go supporta attualmente i seguenti tipi di trigger:

Tipo di innesco Metodo di registrazione Esempi
HTTP app.HTTP() Esempi HTTP
Temporizzatore app.Timer() Esempi di timer
Azure Cosmos DB app.CosmosDB() Esempi di database Cosmos
bus di servizio di Azure (Queue) app.ServiceBusQueue() esempi di code bus di servizio
bus di servizio di Azure (Topic) app.ServiceBusTopic() esempi di argomenti bus di servizio
Centri eventi app.EventHub() Esempi di Hub eventi
Griglia di eventi app.EventGrid() Esempi di Event Grid
gestione rete virtuale di Azure app.Blob() esempi Blob

Per altre informazioni, vedere le informazioni di riferimento per gli sviluppatori Go.

L'esempio seguente illustra la definizione della funzione dopo aver aggiunto un'associazione di output Archiviazione code a una funzione attivata da HTTP:

Poiché una funzione attivata da HTTP restituisce anche una risposta HTTP, la funzione restituisce un oggetto MultiResponse, che rappresenta sia l'output HTTP che quello della coda.

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

Questo esempio è la definizione dell'oggetto MultiResponse che include l'associazione di output:

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

Questo esempio usa ASP.NET Core integration. Se non si usa l'integrazione di ASP.NET Core, è necessario modificare HttpRequest in HttpRequestData e IActionResult in HttpResponseData.

I messaggi vengono inviati alla coda al termine della funzione. Il modo in cui si definisce l'associazione di output dipende dal modello di processo. Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

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

Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

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

Il modo in cui si definisce l'associazione di output dipende dalla versione del modello di Node.js. Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

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

Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

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

Il modo in cui si definisce l'associazione di output dipende dalla versione del modello Python. Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

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

Il modo in cui si definisce l'associazione di output dipende dalla versione del modello di Node.js. Per altre informazioni, inclusi i collegamenti al codice di associazione di esempio a cui è possibile fare riferimento, vedere Aggiungere associazioni a una funzione.

Usare la tabella seguente per trovare esempi di tipi di associazione specifici che è possibile usare per guidare l'aggiornamento di una funzione esistente. Scegliere prima di tutto la scheda della lingua corrispondente al project.

Il codice di associazione per C# dipende dal modello di processo specifico.

Servizio Esempi Esempi
Archiviazione BLOB Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Esplora dati di Azure Input
Output
Link
Azure SQL Trigger
Input
Output
Link
Griglia di eventi Trigger
Output
Link
Hub eventi Trigger
Output
hub IoT Trigger
Output
Protocollo HTTP Trigger Link
Archiviazione code Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Bus di Servizio Trigger
Output
Link
Servizio Azure SignalR Trigger
Input
Output
Archiviazione tabelle Input
Output
Temporizzatore Trigger Link
Twilio Output Link
Servizio Esempi Esempi
Archiviazione BLOB Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Esplora dati di Azure Input
Output
Link
Azure SQL Trigger
Input
Output
Griglia di eventi Trigger
Output
Link
Hub eventi Trigger
Output
hub IoT Trigger
Output
Protocollo HTTP Trigger Link
Archiviazione code Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Bus di Servizio Trigger
Output
Link
Servizio Azure SignalR Trigger
Input
Output
Archiviazione tabelle Input
Output
Temporizzatore Trigger Link
Twilio Output
Servizio Esempi Esempi
Archiviazione BLOB Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Esplora dati di Azure Input
Output
Azure SQL Trigger
Input
Output
Link
Griglia di eventi Trigger
Output
Hub eventi Trigger
Output
hub IoT Trigger
Output
Protocollo HTTP Trigger Link
Archiviazione code Trigger
Output
Link
RabbitMQ Trigger
Output
SendGrid Output
Bus di Servizio Trigger
Output
Link
Servizio Azure SignalR Trigger
Input
Output
Archiviazione tabelle Input
Output
Temporizzatore Trigger
Twilio Output
Servizio Esempi Esempi
Archiviazione BLOB Trigger
Input
Output
Azure Cosmos DB Trigger
Input
Output
Azure SQL Trigger
Input
Output
Griglia di eventi Trigger
Output
Hub eventi Trigger
Output
hub IoT Trigger
Output
Protocollo HTTP Trigger Link
Archiviazione code Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Bus di Servizio Trigger
Output
Servizio Azure SignalR Trigger
Input
Output
Archiviazione tabelle Input
Output
Temporizzatore Trigger
Twilio Output

Il codice di associazione per Python dipende dalla versione del modello Python.

Servizio Esempi Esempi
Archiviazione BLOB Trigger
Input
Output
Link
Azure Cosmos DB Trigger
Input
Output
Link
Esplora dati di Azure Input
Output
Azure SQL Trigger
Input
Output
Link
Griglia di eventi Trigger
Output
Hub eventi Trigger
Output
hub IoT Trigger
Output
Protocollo HTTP Trigger Link
Archiviazione code Trigger
Output
RabbitMQ Trigger
Output
SendGrid Output
Bus di Servizio Trigger
Output
Link
Servizio Azure SignalR Trigger
Input
Output
Archiviazione tabelle Input
Output
Temporizzatore Trigger
Twilio Output

codice Visual Studio

Quando si usa Visual Studio Code per sviluppare la funzione e la funzione usa un file function.json, l'estensione Funzioni di Azure può aggiungere automaticamente un'associazione a un file di function.json esistente. Per altre informazioni, vedere Aggiungere associazioni di input e output.

Azure portal

Quando si sviluppano le funzioni nel Azure portal, si aggiungono associazioni di input e output nella scheda Integrate per una determinata funzione. Le nuove associazioni vengono aggiunte al file function.json o agli attributi del metodo, a seconda della lingua. Gli articoli seguenti illustrano esempi di come aggiungere associazioni a una funzione esistente nel portale:

Passaggi successivi