Concetti relativi a trigger e associazioni in Funzioni di Azure
In questo articolo vengono illustrati i concetti generali relativi ai trigger e alle associazioni delle funzioni.
I trigger sono causano l'esecuzione di una funzione. Un trigger definisce il modo in cui una funzione viene richiamata e una funzione deve avere esattamente un trigger. I trigger possono anche passare dati alla funzione, come si farebbe con le chiamate al metodo.
L'associazione a una funzione è un modo per connettere in modo dichiarativo le funzioni ad altre risorse; le associazioni passano i dati alla funzione (un'associazione di input) o consentono di scrivere dati dalla funzione (un'associazione di output) usando i parametri di associazione. Il trigger di funzione è essenzialmente un tipo speciale di associazione di input.
È possibile combinare e associare associazioni diverse in base allo scenario specifico della funzione. I binding sono facoltativi e una funzione potrebbe avere uno o più binding di input e/o di output.
Trigger e binding consentono di evitare di impostare come hardcoded l'accesso ad altri servizi. La funzione riceve i dati, ad esempio il contenuto di un messaggio della coda, nei parametri della funzione. I dati vengono inviati, ad esempio per creare un messaggio della coda, usando il valore restituito della funzione.
Si considerino gli esempi seguenti di come implementare funzioni diverse.
Scenario di esempio | Trigger | Associazione di input | Associazione di output |
---|---|---|---|
Arriva un nuovo messaggio della coda che esegue una funzione per scrivere in un'altra coda. | Coda* | Nessuno | Coda* |
Un processo pianificato legge il contenuto dell'archiviazione BLOB e crea un nuovo documento di Azure Cosmos DB. | Timer | Archiviazione BLOB | Azure Cosmos DB |
Griglia di eventi viene usata per leggere un'immagine dall'archivio BLOB e un documento da Azure Cosmos DB per inviare un messaggio di posta elettronica. | Griglia di eventi | Archiviazione BLOB e Azure Cosmos DB | SendGrid |
* Rappresenta code diverse
Questi esempi non sono concepiti per essere esaustivi, ma vengono forniti per illustrare come è possibile usare trigger e associazioni insieme. Per un set più completo di scenari, vedere Scenari di Funzioni di Azure.
Suggerimento
Funzioni di Azure non richiede l'uso di associazioni di input e output per connettersi ai servizi di Azure. È sempre possibile creare un client Azure SDK nel codice e usarlo per i trasferimenti di dati. Per altre informazioni, vedere Connettersi ai servizi.
Definizioni di trigger e binding
Una funzione ha un singolo trigger e una o più associazioni. Il tipo di associazione è input o output. Non tutti i servizi supportano sia associazioni di input che di output. Vedere l'estensione di associazione specifica per esempi di codice di associazione specifici.
I trigger e i binding vengono definiti in modo diverso a seconda del linguaggio di sviluppo. Assicurarsi di selezionare la lingua nella parte superiore dell'articolo.
Questo esempio mostra una funzione attivata da HTTP con un'associazione di output che scrive un messaggio in una coda di Archiviazione di Azure.
Per le funzioni della libreria di classi C#, i trigger e le associazioni vengono configurati decorando metodi e parametri con attributi C#, in cui l'attributo specifico applicato può dipendere dal modello di runtime C#:
Il trigger HTTP (HttpTrigger
) viene definito nel metodo Run
per una funzione denominata HttpExample
che restituisce un oggetto MultiResponse
:
[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
Questo esempio mostra la definizione dell'oggetto MultiResponse
che restituisce un oggetto HttpResponse
alla richiesta HTTP e scrive anche un messaggio in una coda di archiviazione usando un'associazione QueueOutput
:
public class MultiResponse
{
[QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
Per altre informazioni, vedere la guida al modello del ruolo di lavoro isolato C#.
Le funzioni script C# legacy usano un file di definizione function.json. Per altre informazioni, vedere le informazioni di riferimento per gli sviluppatori di script C# di Funzioni di Azure (con estensione csx).
Per le funzioni Java, i trigger e le associazioni vengono configurati annotando metodi e parametri specifici. Questo trigger HTTP (@HttpTrigger
) viene definito nel metodo run
per una funzione denominata HttpTriggerQueueOutput
, che scrive in una coda di archiviazione definita dall'annotazione @QueueOutput
nel parametro message
:
@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) {
context.getLogger().info("Java HTTP trigger processed a request.");
Per altre informazioni, vedere la Guida per sviluppatori Java.
Il modo in cui vengono definiti trigger e associazioni per le funzioni di Node.js dipende dalla versione specifica di Node.js per Funzioni:
In Node.js per Funzioni versione 4 si configurano trigger e associazioni usando oggetti esportati dal modulo @azure/functions
. Per ulteriori informazioni, vedere la Guida per sviluppatori di Node.js.
Questo esempio è una funzione attivata da HTTP che crea un elemento della coda per ogni richiesta HTTP ricevuta.
Il metodo http
nell'oggetto app
esportato definisce un trigger HTTP e il metodo storageQueue
su output
definisce un'associazione di output su questo trigger.
const { app, output } = require('@azure/functions');
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: async (request, context) => {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
},
});
Il metodo http
nell'oggetto app
esportato definisce un trigger HTTP e il metodo storageQueue
su output
definisce un'associazione di output su questo trigger.
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';
const queueOutput = output.storageQueue({
queueName: 'outqueue',
connection: 'MyStorageConnectionAppSetting',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const body = await request.text();
context.extraOutputs.set(queueOutput, body);
return { body: 'Created queue item.' };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
extraOutputs: [queueOutput],
handler: httpTrigger1,
});
Questo file function.json
di esempio definisce la funzione:
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
]
}
Per altre informazioni, vedere la Guida per sviluppatori di PowerShell.
Il modo in cui viene definita la funzione dipende dalla versione di Python per Funzioni:
In Python per Funzioni versione 2 si definisce la funzione direttamente nel codice usando elementi decorator.
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@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.')
Aggiungere associazioni a una funzione
È possibile connettere la funzione ad altri servizi usando associazioni di input o output. Aggiungere un'associazione aggiungendo le relative definizioni specifiche alla funzione. Per informazioni su come, vedere Aggiungere associazioni a una funzione esistente in Funzioni di Azure.
Funzioni di Azure supporta più associazioni, che devono essere configurate correttamente. Ad esempio, una funzione può leggere i dati da una coda (associazione di input) e scrivere dati in un database (associazione di output) contemporaneamente.
Binding supportati
Questa tabella mostra le associazioni supportate nelle versioni principali del runtime di Funzioni di Azure:
Type | 1.x1 | 2.x e versioni successive2 | Trigger | Input | Output |
---|---|---|---|---|---|
Archiviazione BLOB | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure Cosmos DB | ✔ | ✔ | ✔ | ✔ | ✔ |
Esplora dati di Azure | ✔ | ✔ | ✔ | ||
Azure SQL | ✔ | ✔ | ✔ | ✔ | |
Dapr4 | ✔ | ✔ | ✔ | ✔ | |
Griglia di eventi | ✔ | ✔ | ✔ | ✔ | |
Hub eventi | ✔ | ✔ | ✔ | ✔ | |
HTTP e webhook | ✔ | ✔ | ✔ | ✔ | |
Hub IoT | ✔ | ✔ | ✔ | ||
Kafka3 | ✔ | ✔ | ✔ | ||
App per dispositivi mobili | ✔ | ✔ | ✔ | ||
Hub di notifica di Azure | ✔ | ✔ | |||
Archiviazione code | ✔ | ✔ | ✔ | ✔ | |
Redis | ✔ | ✔ | |||
RabbitMQ3 | ✔ | ✔ | ✔ | ||
SendGrid | ✔ | ✔ | ✔ | ||
Bus di servizio | ✔ | ✔ | ✔ | ✔ | |
SignalR | ✔ | ✔ | ✔ | ✔ | |
Archiviazione tabelle | ✔ | ✔ | ✔ | ✔ | |
Timer | ✔ | ✔ | ✔ | ||
Twilio | ✔ | ✔ | ✔ |
Note:
- Il supporto terminerà per la versione 1.x del runtime di Funzioni di Azure il 14 settembre 2026. È consigliabile eseguire la migrazione delle app alla versione 4.x per il supporto completo.
- A partire dal runtime della versione 2.x, devono essere registrate tutte le associazioni tranne HTTP e Timer. Vedere Registrare le estensioni delle associazioni.
- I trigger non sono supportati nel piano A consumo. Richiede trigger basati sul runtime.
- Supportati solo in Kubernetes, IoT Edge e altre modalità self-hosted.
Per informazioni sulle associazioni in anteprima o approvate per l'uso in ambiente di produzione, vedere Linguaggi supportati .
Le versioni specifiche dell'estensione di associazione sono supportate solo se l'SDK del servizio sottostante è supportato. Le modifiche apportate al supporto nella versione dell'SDK del servizio sottostante influiscono sul supporto per l'estensione di utilizzo.
Esempi di codice di associazione
Usare la tabella seguente per trovare ulteriori esempi di tipi di associazione specifici che illustrano come usare le associazioni nelle funzioni. Scegliere prima di tutto la scheda della lingua corrispondente al progetto.
Il codice di associazione per C# dipende dal modello di processo specifico.
Service | Esempi | Esempi |
---|---|---|
Archiviazione BLOB | Trigger Input Output |
Collegamento |
Azure Cosmos DB | Trigger Input Output |
Collegamento |
Esplora dati di Azure | Input Output |
Collegamento |
Azure SQL | Trigger Input Output |
Collegamento |
Griglia di eventi | Trigger Output |
Collegamento |
Hub eventi | Trigger Output |
|
Hub IoT | Trigger Output |
|
HTTP | Trigger | Collegamento |
Archiviazione code | Trigger Output |
Collegamento |
RabbitMQ | Trigger Output |
|
SendGrid | Output | |
Bus di servizio | Trigger Output |
Collegamento |
SignalR | Trigger Input Output |
|
Archiviazione tabelle | Input Output |
|
Timer | Trigger | Collegamento |
Twilio | Output | Collegamento |
Service | Esempi | Esempi |
---|---|---|
Archiviazione BLOB | Trigger Input Output |
Collegamento |
Azure Cosmos DB | Trigger Input Output |
Collegamento |
Esplora dati di Azure | Input Output |
Collegamento |
Azure SQL | Trigger Input Output |
|
Griglia di eventi | Trigger Output |
Collegamento |
Hub eventi | Trigger Output |
|
Hub IoT | Trigger Output |
|
HTTP | Trigger | Collegamento |
Archiviazione code | Trigger Output |
Collegamento |
RabbitMQ | Trigger Output |
|
SendGrid | Output | |
Bus di servizio | Trigger Output |
Collegamento |
SignalR | Trigger Input Output |
|
Archiviazione tabelle | Input Output |
|
Timer | Trigger | Collegamento |
Twilio | Output | Collegamento |
Service | Esempi | Esempi |
---|---|---|
Archiviazione BLOB | Trigger Input Output |
Collegamento |
Azure Cosmos DB | Trigger Input Output |
Collegamento |
Esplora dati di Azure | Input Output |
|
Azure SQL | Trigger Input Output |
Collegamento |
Griglia di eventi | Trigger Output |
Collegamento |
Hub eventi | Trigger Output |
|
Hub IoT | Trigger Output |
|
HTTP | Trigger | Collegamento |
Archiviazione code | Trigger Output |
Collegamento |
RabbitMQ | Trigger Output |
|
SendGrid | Output | |
Bus di servizio | Trigger Output |
Collegamento |
SignalR | Trigger Input Output |
|
Archiviazione tabelle | Input Output |
|
Timer | Trigger | Collegamento |
Twilio | Output | Collegamento |
Service | Esempi | Esempi |
---|---|---|
Archiviazione BLOB | Trigger Input Output |
Collegamento |
Azure Cosmos DB | Trigger Input Output |
Collegamento |
Azure SQL | Trigger Input Output |
|
Griglia di eventi | Trigger Output |
Collegamento |
Hub eventi | Trigger Output |
|
Hub IoT | Trigger Output |
|
HTTP | Trigger | Collegamento |
Archiviazione code | Trigger Output |
Collegamento |
RabbitMQ | Trigger Output |
|
SendGrid | Output | |
Bus di servizio | Trigger Output |
Collegamento |
SignalR | Trigger Input Output |
|
Archiviazione tabelle | Input Output |
|
Timer | Trigger | Collegamento |
Twilio | Output | Collegamento |
Il codice di associazione per Python dipende dalla versione del modello Python.
Service | Esempi | Esempi |
---|---|---|
Archiviazione BLOB | Trigger Input Output |
Collegamento |
Azure Cosmos DB | Trigger Input Output |
Collegamento |
Esplora dati di Azure | Input Output |
|
Azure SQL | Trigger Input Output |
Collegamento |
Griglia di eventi | Trigger Output |
Collegamento |
Hub eventi | Trigger Output |
|
Hub IoT | Trigger Output |
|
HTTP | Trigger | Collegamento |
Archiviazione code | Trigger Output |
Collegamento |
RabbitMQ | Trigger Output |
|
SendGrid | Output | |
Bus di servizio | Trigger Output |
Collegamento |
SignalR | Trigger Input Output |
|
Archiviazione tabelle | Input Output |
|
Timer | Trigger | Collegamento |
Twilio | Output | Collegamento |
Binding personalizzati
È possibile creare associazioni di input e output personalizzate. Le associazioni devono essere create in .NET, ma possono essere utilizzate da qualsiasi linguaggio supportato. Per altre informazioni sulla creazione di associazioni personalizzate, vedere Creazione di associazioni di input e output personalizzate.