Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il trigger di Azure Cosmos DB usa il feed di modifiche Azure Cosmos DB per restare in ascolto degli inserimenti e degli aggiornamenti tra le partizioni. Il feed di modifiche pubblica elementi nuovi e aggiornati, non inclusi gli aggiornamenti dalle eliminazioni. Per uno scenario end-to-end che usa il trigger di Azure Cosmos DB, vedere Quickstart: Rispondere alle modifiche del database in Azure Cosmos DB usando Funzioni di Azure.
Per informazioni sui dettagli di impostazione e configurazione, vedere la panoramica.
Le decisioni di ridimensionamento di Cosmos DB per i piani a consumo e Premium vengono eseguite tramite il ridimensionamento basato su destinazione. Per altre informazioni, vedere Scalabilità basata su destinazione.
Importante
Questo articolo usa schede per supportare le versioni diverse del modello di programmazione Node.js. Il modello v4 è disponibile a livello generale ed è progettato per offrire un'esperienza più flessibile e intuitiva per gli sviluppatori JavaScript e TypeScript. Per altre informazioni sul funzionamento del modello v4, vedere la guida per sviluppatori Funzioni di Azure Node.js. Altre informazioni sulle differenze tra i modelli v3 e v4 sono disponibili nella guida alla migrazione.
Funzioni di Azure supporta due modelli di programmazione per Python. Il modo in cui si definiscono le associazioni dipende dal modello di programmazione scelto.
Il modello di programmazione Python v2 consente di definire associazioni usando elementi Decorator direttamente nel codice della funzione Python. Per altre informazioni, vedere la guida per sviluppatori Python.
Questo articolo supporta entrambi i modelli di programmazione.
Esempio
L'utilizzo del trigger dipende dalla versione del pacchetto di estensione e dalla modalità C# usata nell'app per le funzioni, che può essere una delle seguenti:
Una funzione C# compilata di libreria di classi di processo di lavoro viene eseguita in un processo isolato dal runtime.
Gli esempi seguenti dipendono dalla versione dell'estensione per la modalità C# specificata.
Questo esempio usa i riferimenti alle impostazioni dell'app e include la gestione degli errori. Prima di tutto, definire il tipo di modello:
public class ToDoItem
{
public string? Id { get; set; }
public string? Description { get; set; }
}
La funzione seguente viene eseguita quando si verificano inserimenti o aggiornamenti nel database e nel contenitore specificati:
[Function("CosmosTrigger")]
public void Run([CosmosDBTrigger(
databaseName: "%COSMOS_DATABASE_NAME%",
containerName: "%COSMOS_CONTAINER_NAME%",
Connection = "COSMOS_CONNECTION",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<ToDoItem> documents,
FunctionContext context)
{
if (documents is not null && documents.Any())
{
_logger.LogInformation("Documents modified: {count}", documents.Count);
foreach (var doc in documents)
{
try
{
_logger.LogInformation("Processing document Id: {id}", doc.Id);
// Add your business logic here
}
catch (Exception ex)
{
_logger.LogError(ex, "Error processing document {id}", doc.Id);
// Continue processing remaining documents
}
}
}
}
[Function("health")]
public IActionResult HealthCheck([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "health")] HttpRequest req)
{
return new OkResult();
}
L'esempio precedente usa riferimenti alle impostazioni dell'app (%VAR_NAME%) anziché valori hardcoded. Per informazioni dettagliate sulla configurazione, vedi le impostazioni dell'app e le linee guida per lo sviluppo locale nella scheda in-process.
Questa funzione viene richiamata quando sono presenti inserimenti o aggiornamenti nel database e nel contenitore specificati.
A causa delle modifiche dello schema nell'SDK di Azure Cosmos DB, la versione 4.x dell'estensione Azure Cosmos DB richiede azure-functions-java-library V3.0.0 per le funzioni di Java.
@FunctionName("CosmosDBTriggerFunction")
public void run(
@CosmosDBTrigger(
name = "items",
databaseName = "ToDoList",
containerName = "Items",
leaseContainerName="leases",
connection = "AzureCosmosDBConnection",
createLeaseContainerIfNotExists = true
)
Object inputItem,
final ExecutionContext context
) {
context.getLogger().info("Items modified: " + inputItems.size());
}
Nella libreria di runtime delle funzioni Java usare l'annotazione @CosmosDBTrigger sui parametri il cui valore proviene da Azure Cosmos DB. Usare questa annotazione con tipi di Java nativi, oggetti Java (POJO) o valori nullable usando Optional<T>.
Nell'esempio seguente viene illustrato un trigger Azure Cosmos DB TypeScript. La funzione scrive messaggi di log quando Azure Cosmos DB record vengono aggiunti o modificati.
import { app, InvocationContext } from '@azure/functions';
export async function cosmosDBTrigger1(documents: unknown[], context: InvocationContext): Promise<void> {
context.log(`Cosmos DB function processed ${documents.length} documents`);
}
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: cosmosDBTrigger1,
});
L'esempio seguente mostra una funzione trigger Azure Cosmos DB JavaScript. La funzione scrive messaggi di log quando Azure Cosmos DB record vengono aggiunti o modificati.
const { app } = require('@azure/functions');
app.cosmosDB('cosmosDBTrigger1', {
connection: '<connection-app-setting>',
databaseName: 'Tasks',
containerName: 'Items',
createLeaseContainerIfNotExists: true,
handler: (documents, context) => {
context.log(`Cosmos DB function processed ${documents.length} documents`);
},
});
Nell'esempio seguente viene illustrato come eseguire una funzione come modifiche ai dati in Azure Cosmos DB.
{
"type": "cosmosDBTrigger",
"name": "documents",
"direction": "in",
"leaseCollectionName": "leases",
"connectionStringSetting": "<connection-app-setting>",
"databaseName": "Tasks",
"collectionName": "Items",
"createLeaseCollectionIfNotExists": true
}
Si noti che alcuni nomi degli attributi di associazione sono stati modificati nella versione 4.x dell'estensione Azure Cosmos DB.
Nel file run.ps1 è possibile accedere al documento che attiva la funzione tramite il $Documents parametro .
param($Documents, $TriggerMetadata)
Write-Host "First document Id modified : $($Documents[0].id)"
L'esempio seguente illustra un'associazione di trigger Azure Cosmos DB. L'esempio dipende dal fatto che si usi il modello di programmazione v1 o v2 Python.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="CosmosDBTrigger")
@app.cosmos_db_trigger(arg_name="documents",
database_name="%COSMOS_DATABASE_NAME%",
container_name="%COSMOS_CONTAINER_NAME%",
connection="COSMOS_CONNECTION",
lease_container_name="leases",
create_lease_container_if_not_exists="true")
def cosmos_trigger(documents: func.DocumentList) -> str:
if documents:
for doc in documents:
try:
logging.info('Processing document id: %s', doc['id'])
# Add your business logic here
except Exception as e:
logging.error('Error processing document %s: %s', doc.get('id', 'unknown'), str(e))
# Continue processing remaining documents
@app.function_name(name="health")
@app.route(route="health", methods=["GET"])
def health_check(req: func.HttpRequest) -> func.HttpResponse:
"""Health check endpoint for monitoring."""
return func.HttpResponse("OK", status_code=200)
L'esempio precedente usa riferimenti alle impostazioni dell'app (%VAR_NAME%) anziché valori hardcoded.
Impostazioni dell'app
Configurare queste impostazioni dell'applicazione per le connessioni basate su identità:
| Impostazione | Descrizione | Esempio |
|---|---|---|
COSMOS_DATABASE_NAME |
Nome del database Azure Cosmos DB | my-database |
COSMOS_CONTAINER_NAME |
Nome del contenitore da monitorare | my-container |
COSMOS_CONNECTION__accountEndpoint |
Azure Cosmos DB endpoint dell'account | https://mycosmosdb.documents.azure.com:443/ |
COSMOS_CONNECTION__credential |
Impostare su managedidentity per UAMI |
managedidentity |
COSMOS_CONNECTION__clientId |
ID client dell'identità gestita assegnata all'utente | 00000000-0000-0000-0000-000000000000 |
Sviluppo locale
Per lo sviluppo locale, creare un local.settings.json file:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"COSMOS_DATABASE_NAME": "my-database",
"COSMOS_CONTAINER_NAME": "my-container",
"COSMOS_CONNECTION__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/"
}
}
Suggerimento
Per lo sviluppo locale, omettere COSMOS_CONNECTION__credential e COSMOS_CONNECTION__clientId. Il DefaultAzureCredential prova più credenziali in ordine, incluse le credenziali di accesso interfaccia della riga di comando di Azure.
Prerequisiti per lo sviluppo locale:
-
interfaccia della riga di comando di Azure con
az logincompletata -
Emulatore di archiviazione Azurite in esecuzione (
azurite --silent)
Attributi
Sia le librerie C# in-process che isolate usano CosmosDBTriggerAttribute per definire la funzione. Lo script C# usa invece un file di configurazione function.json come descritto nella guida per gli script C#.
Le proprietà specifiche dipendono sia dal modello di processo che dalla versione dell'estensione:
Le librerie di processi di lavoro isolate usano CosmosDBTriggerAttribute dallo spazio dei nomi Microsoft.Azure.Functions.Worker, che definisce queste proprietà:
| Proprietà dell'attributo | Descrizione |
|---|---|
| Connessione | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB monitorato. Per altre informazioni, vedere Connections. |
| DatabaseName | Nome del database Azure Cosmos DB con il contenitore monitorato. |
| ContainerName | Nome del contenitore monitorato. |
| LeaseConnection | (Facoltativo) Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB che contiene il contenitore di lease. Se non impostato, viene usato il valore Connection. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione nel portale. Il stringa di connessione per il contenitore di lease deve disporre delle autorizzazioni di scrittura. |
| LeaseDatabaseName | (Facoltativo) Il nome del database in cui si trova il contenitore usato per archiviare i lease. Se non impostato, viene usato il valore dell'impostazione databaseName. |
| LeaseContainerName | (Facoltativo) Nome del contenitore usato per archiviare i lease. Se non impostato, viene usato il valore leases. |
| CreateLeaseContainerIfNotExists | (Facoltativo) Se impostato su true, il contenitore lease viene creato automaticamente se non è già esistente. Il valore predefinito è false. Quando si usano identità di Microsoft Entra se si imposta il valore su true, la creazione di contenitori non è a operazione consentita e la funzione non sarà in grado di avviare. |
| LeasesContainerThroughput | (Facoltativo) Definisce il numero di unità richiesta da assegnare quando viene creato il contenitore lease. Questa impostazione viene usata solo quando CreateLeaseContainerIfNotExists è impostato su true. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione tramite il portale. |
| LeaseContainerPrefix | (Facoltativo) Se impostato, il valore viene aggiunto come prefisso ai lease creati nel contenitore Lease per questa funzione. L'uso di un prefisso consente a due Funzioni di Azure separate di condividere lo stesso contenitore lease usando prefissi diversi. |
| FeedPollDelay | (Facoltativo) Il tempo (in millisecondi) per il ritardo tra il polling di una partizione alla ricerca di nuove modifiche al feed, dopo la rimozione di tutte le modifiche correnti. L'impostazione predefinita è 5,000 millisecondi (o 5 secondi). |
| LeaseAcquireInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo per l'avvio di un'attività che consente di calcolare se le partizioni sono distribuite equamente tra le istanze di host note. Il valore predefinito è 13000 (13 secondi). |
| LeaseExpirationInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo che indica la durata di un lease su un lease che rappresenta una partizione. Se il lease non viene rinnovato entro questo intervallo, ne comporterà la scadenza e la proprietà della partizione passerà a un'altra istanza. Il valore predefinito è 60000 (60 secondi). |
| LeaseRenewInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo di rinnovo per tutti i lease per le partizioni attualmente occupate da un'istanza. Il valore predefinito è 17000 (17 secondi). |
| MaxItemsPerInvocation | (Facoltativo) Se impostata, questa proprietà imposta il numero massimo di elementi ricevuti per Chiamata di funzione. Se le operazioni nel contenitore monitorato vengono eseguite tramite stored procedure, l'ambito della transazione viene mantenuto durante la lettura degli elementi dal feed di modifiche. Di conseguenza, il numero di elementi ricevuti potrebbe essere superiore al valore specificato in modo che gli elementi modificati dalla stessa transazione vengano restituiti come parte di un batch atomico. |
| StartFromBeginning | (Facoltativo) Questa opzione indica al trigger di leggere le modifiche dall'inizio della cronologia delle modifiche del contenitore anziché a partire dall'ora corrente. La lettura dall’inizio funziona solo al primo avvio del trigger, perché per le esecuzioni successive i checkpoint sono già archiviati. L'impostazione di questa opzione su true in presenza di lease già creati non ha alcun effetto. |
| StartFromTime | (Facoltativo) Ottiene o imposta la data e l'ora da cui inizializzare l'operazione di lettura del feed di modifiche. Il formato consigliato è ISO 8601 con l'identificatore UTC, ad esempio 2021-02-16T14:19:29Z. Viene usato solo per impostare lo stato del trigger iniziale. Dopo che il trigger ha uno stato di lease, la modifica di questo valore non ha alcun effetto. |
| PreferredLocations | (Facoltativo) Definisce le posizioni preferite (aree) per gli account di database con replica geografica nel servizio Azure Cosmos DB. I valori devono essere delimitati da virgole. Ad esempio, "Stati Uniti orientali, Stati Uniti centro-meridionali, Europa settentrionale". |
Elementi Decorator
Applica solo per il modello di programmazione Python v2.
Per Python funzioni v2 definite tramite un elemento Decorator, l'cosmos_db_trigger (estensione 4.x) supporta le proprietà seguenti:
| Proprietà | Descrizione |
|---|---|
arg_name |
Il nome della variabile usato nel codice funzione che rappresenta l'elenco di documenti con le modifiche. |
database_name |
Nome del database Azure Cosmos DB. Supporta la %VAR_NAME% sintassi per fare riferimento alle impostazioni dell'app. |
container_name |
Nome del contenitore Azure Cosmos DB monitorato. Supporta la %VAR_NAME% sintassi. |
connection |
Nome di un'impostazione dell'app o prefisso dell'impostazione per le connessioni basate sull'identità, COSMOS_CONNECTION ad esempio viene risolto in COSMOS_CONNECTION__accountEndpointe così via. |
lease_container_name |
Nome del contenitore usato per archiviare i lease. |
create_lease_container_if_not_exists |
Quando true, crea automaticamente il contenitore di lease, se non esiste. |
Per le funzioni Python definite tramite function.json, vedere la sezione Configuration.
Annotazioni
A causa delle modifiche dello schema nell'SDK di Azure Cosmos DB, la versione 4.x dell'estensione Azure Cosmos DB richiede azure-functions-java-library V3.0.0 per le funzioni di Java.
Usare l'annotazione @CosmosDBTrigger sui parametri che leggono i dati da Azure Cosmos DB. L'annotazione supporta le proprietà seguenti:
| Proprietà dell'attributo | Descrizione |
|---|---|
| connection | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB monitorato. Per altre informazioni, vedere Connections. |
| name | Nome della funzione. |
| databaseName | Nome del database Azure Cosmos DB con il contenitore monitorato. |
| containerName | Nome del contenitore monitorato. |
| leaseConnectionStringSetting | (Facoltativo) Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB che contiene il contenitore di lease. Se non impostato, viene usato il valore Connection. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione nel portale. Il stringa di connessione per il contenitore di lease deve disporre delle autorizzazioni di scrittura. |
| leaseDatabaseName | (Facoltativo) Il nome del database in cui si trova il contenitore usato per archiviare i lease. Se non impostato, viene usato il valore dell'impostazione databaseName. |
| leaseContainerName | (Facoltativo) Nome del contenitore usato per archiviare i lease. Se non impostato, viene usato il valore leases. |
| createLeaseContainerIfNotExists | (Facoltativo) Se impostato su true, il contenitore lease viene creato automaticamente se non è già esistente. Il valore predefinito è false. Quando si usano identità Microsoft Entra se si imposta il valore su true, la creazione di contenitori non è a operazione consentita e l'app per le funzioni non è consentita per l'avvio. |
| leasesContainerThroughput | (Facoltativo) Definisce il numero di unità richiesta da assegnare quando viene creato il contenitore lease. Questa impostazione viene usata solo quando CreateLeaseContainerIfNotExists è impostato su true. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione tramite il portale. |
| leaseContainerPrefix | (Facoltativo) Se impostato, il valore viene aggiunto come prefisso ai lease creati nel contenitore Lease per questa funzione. L'uso di un prefisso consente a due Funzioni di Azure separate di condividere lo stesso contenitore lease usando prefissi diversi. |
| feedPollDelay | (Facoltativo) Il tempo (in millisecondi) per il ritardo tra il polling di una partizione alla ricerca di nuove modifiche al feed, dopo la rimozione di tutte le modifiche correnti. L'impostazione predefinita è 5,000 millisecondi (o 5 secondi). |
| leaseAcquireInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo per l'avvio di un'attività che consente di calcolare se le partizioni sono distribuite equamente tra le istanze di host note. Il valore predefinito è 13000 (13 secondi). |
| leaseExpirationInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo che indica la durata di un lease su un lease che rappresenta una partizione. Se il lease non viene rinnovato entro questo intervallo, scade e la proprietà della partizione viene spostata in un'altra istanza. Il valore predefinito è 60000 (60 secondi). |
| leaseRenewInterval | (Facoltativo) Quando impostato, definisce, in millisecondi, l'intervallo di rinnovo per tutti i lease per le partizioni attualmente contenute in un'istanza di . Il valore predefinito è 17000 (17 secondi). |
| maxItemsPerInvocation | (Facoltativo) Se impostata, questa proprietà imposta il numero massimo di elementi ricevuti per Chiamata di funzione. Se le operazioni nel contenitore monitorato vengono eseguite tramite stored procedure, l'ambito della transazione viene mantenuto durante la lettura degli elementi dal feed di modifiche. Di conseguenza, il numero di elementi ricevuti potrebbe essere superiore al valore specificato in modo che gli elementi modificati dalla stessa transazione vengano restituiti come parte di un batch atomico. |
| startFromBeginning | (Facoltativo) Questa opzione indica al trigger di leggere le modifiche dall'inizio della cronologia delle modifiche del contenitore anziché a partire dall'ora corrente. La lettura dall’inizio funziona solo al primo avvio del trigger, perché per le esecuzioni successive i checkpoint sono già archiviati. L'impostazione di questa opzione su true in presenza di lease già creati non ha alcun effetto. |
| preferredLocations | (Facoltativo) Definisce le posizioni preferite (aree) per gli account di database con replica geografica nel servizio Azure Cosmos DB. I valori devono essere delimitati da virgole. Ad esempio: East US,South Central US,North Europe. |
Impostazione
Applica solo al modello di programmazione Python v1.
Nella tabella seguente vengono illustrate le proprietà che è possibile impostare sull'oggetto options passato al app.cosmosDB() metodo . Le typeproprietà , directione name non si applicano al modello v4.
La tabella seguente illustra le proprietà di configurazione dell'associazione impostate nel file function.json , in cui le proprietà differiscono per la versione dell'estensione:
| Proprietà di function.json | Descrizione |
|---|---|
| type | Deve essere impostato su cosmosDBTrigger. |
| direction | Deve essere impostato su in. Questo parametro viene impostato automaticamente quando si crea il trigger nel portale di Azure. |
| name | Il nome della variabile usato nel codice funzione che rappresenta l'elenco di documenti con le modifiche. |
| connection | Nome di un'impostazione o di una raccolta di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB monitorato. Per altre informazioni, vedere Connections. |
| databaseName | Nome del database Azure Cosmos DB con il contenitore monitorato. |
| containerName | Nome del contenitore monitorato. |
| leaseConnection | (Facoltativo) Nome di un'impostazione o di un contenitore di impostazioni dell'app che specifica come connettersi all'account Azure Cosmos DB che contiene il contenitore di lease. Se non impostato, viene usato il valore connection. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione nel portale. Il stringa di connessione per il contenitore di lease deve disporre delle autorizzazioni di scrittura. |
| leaseDatabaseName | (Facoltativo) Il nome del database in cui si trova il contenitore usato per archiviare i lease. Se non impostato, viene usato il valore dell'impostazione databaseName. |
| leaseContainerName | (Facoltativo) Nome del contenitore usato per archiviare i lease. Se non impostato, viene usato il valore leases. |
| createLeaseContainerIfNotExists | (Facoltativo) Se impostato su true, il contenitore lease viene creato automaticamente se non è già esistente. Il valore predefinito è false. Quando si usano identità di Microsoft Entra se si imposta il valore su true, la creazione di contenitori non è a operazione consentita e la funzione non sarà in grado di avviare. |
| leasesContainerThroughput | (Facoltativo) Definisce il numero di unità richiesta da assegnare quando viene creato il contenitore lease. Questa impostazione viene usata solo quando createLeaseContainerIfNotExists è impostato su true. Questo parametro viene impostato automaticamente al momento della creazione dell'associazione tramite il portale. |
| leaseContainerPrefix | (Facoltativo) Se impostato, il valore viene aggiunto come prefisso ai lease creati nel contenitore Lease per questa funzione. L'uso di un prefisso consente a due Funzioni di Azure separate di condividere lo stesso contenitore lease usando prefissi diversi. |
| feedPollDelay | (Facoltativo) Il tempo (in millisecondi) per il ritardo tra il polling di una partizione alla ricerca di nuove modifiche al feed, dopo la rimozione di tutte le modifiche correnti. L'impostazione predefinita è 5,000 millisecondi (o 5 secondi). |
| leaseAcquireInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo per l'avvio di un'attività che consente di calcolare se le partizioni sono distribuite equamente tra le istanze di host note. Il valore predefinito è 13000 (13 secondi). |
| leaseExpirationInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo che indica la durata di un lease su un lease che rappresenta una partizione. Se il lease non viene rinnovato entro questo intervallo, ne comporterà la scadenza e la proprietà della partizione passerà a un'altra istanza. Il valore predefinito è 60000 (60 secondi). |
| leaseRenewInterval | (Facoltativo) Se impostato, definisce, in millisecondi, l'intervallo di rinnovo per tutti i lease per le partizioni attualmente occupate da un'istanza. Il valore predefinito è 17000 (17 secondi). |
| maxItemsPerInvocation | (Facoltativo) Se impostata, questa proprietà imposta il numero massimo di elementi ricevuti per Chiamata di funzione. Se le operazioni nel contenitore monitorato vengono eseguite tramite stored procedure, l'ambito della transazione viene mantenuto durante la lettura degli elementi dal feed di modifiche. Di conseguenza, il numero di elementi ricevuti potrebbe essere superiore al valore specificato in modo che gli elementi modificati dalla stessa transazione vengano restituiti come parte di un batch atomico. |
| startFromBeginning | (Facoltativo) Questa opzione indica al trigger di leggere le modifiche dall'inizio della cronologia delle modifiche del contenitore anziché a partire dall'ora corrente. La lettura dall’inizio funziona solo al primo avvio del trigger, perché per le esecuzioni successive i checkpoint sono già archiviati. L'impostazione di questa opzione su true in presenza di lease già creati non ha alcun effetto. |
| startFromTime | (Facoltativo) Ottiene o imposta la data e l'ora da cui inizializzare l'operazione di lettura del feed di modifiche. Il formato consigliato è ISO 8601 con l'identificatore UTC, ad esempio 2021-02-16T14:19:29Z. Viene usato solo per impostare lo stato del trigger iniziale. Dopo che il trigger ha uno stato di lease, la modifica di questo valore non ha alcun effetto. |
| preferredLocations | (Facoltativo) Definisce le posizioni preferite (aree) per gli account di database con replica geografica nel servizio Azure Cosmos DB. I valori devono essere delimitati da virgole. Ad esempio, "Stati Uniti orientali, Stati Uniti centro-meridionali, Europa settentrionale". |
Per esempi completi, vedere la sezione Esempio.
Utilizzo
Il trigger richiede una seconda raccolta usata per archiviare i lease nelle partizioni. Il trigger funziona solo se sono disponibili sia la raccolta monitorata che la raccolta che contiene i lease.
Importante
Se si configurano più funzioni per l'uso di un trigger Azure Cosmos DB per la stessa raccolta, ogni funzione deve usare una raccolta di lease dedicata o specificare un LeaseCollectionPrefix diverso per ogni funzione. In caso contrario, viene attivata solo una delle funzioni. Per informazioni sul prefisso, vedere la sezione Attributi.
Importante
Se si configurano più funzioni per l'uso di un trigger Azure Cosmos DB per la stessa raccolta, ogni funzione deve usare una raccolta di lease dedicata o specificare un leaseCollectionPrefix diverso per ogni funzione. In caso contrario, viene attivata solo una delle funzioni. Per informazioni sul prefisso, vedere la sezione Annotazioni.
Importante
Se si configurano più funzioni per l'uso di un trigger Azure Cosmos DB per la stessa raccolta, ogni funzione deve usare una raccolta di lease dedicata o specificare un leaseCollectionPrefix diverso per ogni funzione. In caso contrario, viene attivata solo una delle funzioni. Per informazioni sul prefisso, vedere la sezione relativa alla configurazione.
Il trigger non indica se un documento è stato aggiornato o inserito. Fornisce solo il documento stesso. Se è necessario gestire gli aggiornamenti e gli inserimenti in modo diverso, implementare i campi timestamp per l'inserimento o l'aggiornamento.
Il tipo di parametro supportato dal trigger Azure Cosmos DB dipende dalla versione del runtime di Funzioni, dalla versione del pacchetto di estensione e dalla modalità C# usata.
Quando si vuole che la funzione elabori un singolo documento, il trigger di Cosmos DB può essere associato ai tipi seguenti:
| Tipo | Descrizione |
|---|---|
| Tipi serializzabili JSON | Funzioni tenta di deserializzare i dati JSON del documento dal feed di modifiche di Cosmos DB in un tipo POCO (Plain-Old CLR Object). |
Quando si vuole che la funzione elabori un batch di documenti, il trigger di Cosmos DB può essere associato ai tipi seguenti:
| Tipo | Descrizione |
|---|---|
IEnumerable<T>dove T è un tipo serializzabile JSON |
Enumerazione delle entità incluse nel batch. Ogni voce rappresenta un documento dal feed di modifiche di Cosmos DB. |
Connessioni
La connectionStringSetting/connection e leaseConnectionStringSetting/leaseConnection configurazione dell'ambiente di riferimento che specifica la modalità di connessione dell'app a Azure Cosmos DB. Possono specificare:
- Nome di un'impostazione dell'applicazione contenente un stringa di connessione.
- Nome di un prefisso condiviso per più impostazioni dell'applicazione, che insieme definiscono una connessione di identità gestita. Questa opzione è disponibile solo per le
connectionversioni eleaseConnectiondella versione 4.x o successiva dell'estensione.
Se il valore configurato è sia una corrispondenza esatta per una singola impostazione che una corrispondenza di prefisso per altre impostazioni, viene usata la corrispondenza esatta.
Suggerimento
Le connessioni di identità gestite sono consigliate tramite stringhe di connessione per una maggiore sicurezza. Le stringhe di connessione includono credenziali che possono essere esposte, mentre le identità gestite eliminano la necessità di gestire i segreti.
Se si usa version 4.x o versione successiva dell'estensione anziché usare un stringa di connessione con un segreto, è possibile che l'app usi un'identità Microsoft Entra. A tale scopo, definire le impostazioni con un prefisso comune che esegue il mapping alla proprietà di connessione nella configurazione del trigger e dell'associazione.
In questa modalità, l'estensione richiede le impostazioni dell'applicazione seguenti:
| Impostazione basata su modello | Descrizione | Tipo di identità |
|---|---|---|
<CONNECTION_NAME_PREFIX>__accountEndpoint |
URI dell'endpoint dell'account Azure Cosmos DB. | Assegnata dal sistema o assegnata dall'utente |
<CONNECTION_NAME_PREFIX>__credential |
Deve essere impostato su managedidentity. |
Assegnata dall'utente |
<CONNECTION_NAME_PREFIX>__clientId |
ID cliente dell'identità gestita assegnata dall'utente. | Assegnata dall'utente |
Il valore sostituito <CONNECTION_NAME_PREFIX> con viene considerato dall'estensione dell'associazione come nome dell'impostazione di connessione.
Ad esempio, se la configurazione dell'associazione specifica connection = "CosmosDBConnection" con un'identità gestita assegnata dall'utente, configurare le impostazioni dell'applicazione seguenti:
{
"CosmosDBConnection__accountEndpoint": "https://mycosmosdb.documents.azure.com:443/",
"CosmosDBConnection__credential": "managedidentity",
"CosmosDBConnection__clientId": "00000000-0000-0000-0000-000000000000"
}
Suggerimento
Usare le identità gestite assegnate dall'utente per scenari di produzione in cui è necessario un controllo granulare sulle autorizzazioni di identità tra più risorse.
È possibile usare impostazioni aggiuntive nel modello per personalizzare ulteriormente la connessione. Vedere Proprietà comuni per le connessioni basate su identità.
Se ospitata nel servizio Funzioni di Azure, le connessioni basate su identità usano un'identità managed identity. Per impostazione predefinita, viene usata l’identità assegnata a livello di sistema, ma è comunque possibile specificare un’identità assegnata dall’utente a cui siano associate le proprietà credential e clientID. Si noti che la configurazione di un'identità assegnata dall'utente con un ID risorsa non è supportata. Quando viene eseguita in altri contesti, ad esempio lo sviluppo locale, viene usata l'identità dello sviluppatore, anche se può essere personalizzata. Vedere Sviluppo locale con connessioni basate su identità.
Concedere l'autorizzazione all'identità
Qualsiasi identità usata deve avere le autorizzazioni necessarie per eseguire le azioni previste. Per la maggior parte dei servizi di Azure, è necessario assegnare un ruolo in Azure controllo degli accessi in base al ruolo, usando ruoli predefiniti o personalizzati che forniscono tali autorizzazioni.
Importante
È possibile che alcune autorizzazioni esposte dal servizio di destinazione non siano necessarie per tutti i contesti. Laddove possibile, rispettare il principio dei privilegi minimi e concedere all’identità solo i privilegi necessari. Ad esempio, se l'app deve essere in grado di leggere solo da un'origine dati, usare un ruolo che disponga solo dell'autorizzazione per la lettura. Sarebbe inappropriato assegnare un ruolo che consenta anche la scrittura in tale servizio, in quanto sarebbe eccessiva l'autorizzazione per un'operazione di lettura. Analogamente, è consigliabile assicurarsi che l'assegnazione di ruolo sia con ambito solo sulle risorse che devono essere lette.
Cosmos DB non usa Azure controllo degli accessi in base al ruolo per le operazioni dei dati. Usa invece un sistema RBAC predefinito di Cosmos DB basato su concetti simili. Sarà necessario creare un'assegnazione di ruolo che fornisca l'accesso all'account di database in fase di esecuzione. i ruoli di gestione controllo degli accessi in base al ruolo Azure come Owner non sono sufficienti. Nella tabella seguente vengono illustrati i ruoli predefiniti consigliati quando si usa l'estensione Azure Cosmos DB nel normale funzionamento. L'applicazione potrebbe richiedere autorizzazioni aggiuntive in base al codice scritto.
| Tipo di associazione | Ruoli predefiniti di esempio1 |
|---|---|
| Trigger2 | Collaboratore dati predefinito di Cosmos DB |
| Associazione di input | Lettore dati predefinito di Cosmos DB |
| Associazione di output | Collaboratore dati predefinito di Cosmos DB |
1 Questi ruoli non possono essere usati in un'assegnazione di ruolo controllo degli accessi in base al ruolo Azure. Per informazioni dettagliate su come assegnare questi ruoli, vedere la documentazione del sistema RBAC predefinito di Cosmos DB.
2 Quando si usa l'identità, Cosmos DB considera la creazione del contenitore come operazione di gestione. Non è disponibile come operazione del piano dati per il trigger. È necessario assicurarsi di creare i contenitori necessari per il trigger (incluso il contenitore di lease) prima di configurare la funzione.