Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de Azure Cosmos DB uitvoerbinding kunt u een nieuw document schrijven naar een Azure Cosmos DB-database met behulp van de SQL-API.
Zie het overzicht voor informatie over het instellen en configureren van details.
Belangrijk
In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de Azure Functions Node.js ontwikkelaarshandleiding voor meer informatie over de werking van het v4-model. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.
Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u uw bindingen definieert, is afhankelijk van het gekozen programmeermodel.
Met het Python v2-programmeermodel kunt u bindingen definiëren met behulp van decorators rechtstreeks in uw Python functiecode. Zie de Python ontwikkelaarshandleiding voor meer informatie.
Dit artikel ondersteunt beide programmeermodellen.
U kunt een C#-functie maken met behulp van een van de volgende C#-modi:
-
Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en het .NET Framework. Extensies voor geïsoleerde werkprocesfuncties maken gebruik van
Microsoft.Azure.Functions.Worker.Extensions.*naamruimten. -
In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime. In een variatie van dit model kunnen functies worden uitgevoerd met behulp van C#-scripting. Dit wordt voornamelijk ondersteund voor het bewerken van de C#-portal. Extensies voor in-process-functies maken gebruik van
Microsoft.Azure.WebJobs.Extensions.*naamruimten.
Belangrijk
De ondersteuning wordt beëindigd voor het in-process model op 10 november 2026. We raden u ten zeerste aan uw apps te migreren naar het geïsoleerde werkrolmodel voor volledige ondersteuning.
Opmerking
Tenzij anders vermeld, zijn voorbeelden in dit artikel gericht op versie 3.x van de Azure Cosmos DB-extensie. Voor gebruik met extensieversie 4.x moet u de tekenreeks collection in eigenschaps- en kenmerknamen vervangen door container en connection_string_setting door connection.
Go-ondersteuning is momenteel niet beschikbaar voor deze binding.
Met de volgende code wordt een MyDocument type gedefinieerd:
In het volgende voorbeeld is het retourtype een IReadOnlyList<T>, een gewijzigde lijst met documenten van de parameter triggerbinding:
- Wachtrijtrigger, bericht opslaan in database via retourwaarde
- HTTP-trigger, één document opslaan in database via retourwaarde
- HTTP-trigger, één document opslaan in de database via OutputBinding
- HTTP-trigger, meerdere documenten opslaan in database via OutputBinding
Wachtrijtrigger, bericht opslaan in database via retourwaarde
In het volgende voorbeeld ziet u een Java functie waarmee een document wordt toegevoegd aan een database met gegevens uit een bericht in Queue Storage.
@FunctionName("getItem")
@CosmosDBOutput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
connectionStringSetting = "AzureCosmosDBConnection")
public String cosmosDbQueryById(
@QueueTrigger(name = "msg",
queueName = "myqueue-items",
connection = "AzureWebJobsStorage")
String message,
final ExecutionContext context) {
return "{ id: \"" + System.currentTimeMillis() + "\", Description: " + message + " }";
}
HTTP-trigger, één document opslaan in database via retourwaarde
In het volgende voorbeeld ziet u een Java functie waarvan de handtekening is geannoteerd met @CosmosDBOutput en de retourwaarde van het type String heeft. Het JSON-document dat door de functie wordt geretourneerd, wordt automatisch naar de bijbehorende Azure Cosmos DB verzameling geschreven.
@FunctionName("WriteOneDoc")
@CosmosDBOutput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
connectionStringSetting = "Cosmos_DB_Connection_String")
public String run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
// Parse query parameter
String query = request.getQueryParameters().get("desc");
String name = request.getBody().orElse(query);
// Generate random ID
final int id = Math.abs(new Random().nextInt());
// Generate document
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
context.getLogger().info("Document to be saved: " + jsonDocument);
return jsonDocument;
}
HTTP-trigger, één document opslaan in de database via OutputBinding
In het volgende voorbeeld ziet u een Java functie waarmee een document naar Azure Cosmos DB wordt geschreven via een OutputBinding<T> uitvoerparameter. In dit voorbeeld moet de outputItem parameter worden voorzien van aantekeningen, @CosmosDBOutputniet de functiehandtekening. Met behulp van OutputBinding<T> kunt uw functie profiteren van de binding om het document naar Azure Cosmos DB te schrijven, terwijl u ook een andere waarde kunt retourneren aan de functie-aanroeper, zoals een JSON- of XML-document.
@FunctionName("WriteOneDocOutputBinding")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@CosmosDBOutput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
connectionStringSetting = "Cosmos_DB_Connection_String")
OutputBinding<String> outputItem,
final ExecutionContext context) {
// Parse query parameter
String query = request.getQueryParameters().get("desc");
String name = request.getBody().orElse(query);
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
// Generate random ID
final int id = Math.abs(new Random().nextInt());
// Generate document
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
context.getLogger().info("Document to be saved: " + jsonDocument);
// Set outputItem's value to the JSON document to be saved
outputItem.setValue(jsonDocument);
// return a different document to the browser or calling client.
return request.createResponseBuilder(HttpStatus.OK)
.body("Document created successfully.")
.build();
}
HTTP-trigger, meerdere documenten opslaan in database via OutputBinding
In het volgende voorbeeld ziet u een Java functie waarmee meerdere documenten naar Azure Cosmos DB worden geschreven via een OutputBinding<T> uitvoerparameter. In dit voorbeeld wordt de outputItem parameter geannoteerd met @CosmosDBOutput, niet de functiehandtekening. De uitvoerparameter outputItem heeft een lijst ToDoItem met objecten als sjabloonparametertype. Met behulp van OutputBinding<T> kan uw functie profiteren van de binding om de documenten naar Azure Cosmos DB te schrijven, terwijl u ook een andere waarde kunt retourneren aan de functie-aanroeper, zoals een JSON- of XML-document.
@FunctionName("WriteMultipleDocsOutputBinding")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@CosmosDBOutput(name = "database",
databaseName = "ToDoList",
collectionName = "Items",
connectionStringSetting = "Cosmos_DB_Connection_String")
OutputBinding<List<ToDoItem>> outputItem,
final ExecutionContext context) {
// Parse query parameter
String query = request.getQueryParameters().get("desc");
String name = request.getBody().orElse(query);
// Item list
context.getLogger().info("Parameters are: " + request.getQueryParameters());
// Generate documents
List<ToDoItem> items = new ArrayList<>();
for (int i = 0; i < 5; i ++) {
// Generate random ID
final int id = Math.abs(new Random().nextInt());
// Create ToDoItem
ToDoItem item = new ToDoItem(String.valueOf(id), name);
items.add(item);
}
// Set outputItem's value to the list of POJOs to be saved
outputItem.setValue(items);
context.getLogger().info("Document to be saved: " + items);
// return a different document to the browser or calling client.
return request.createResponseBuilder(HttpStatus.OK)
.body("Documents created successfully.")
.build();
}
Gebruik in de runtimebibliotheek van Java functions de aantekening @CosmosDBOutput voor parameters die naar Azure Cosmos DB zijn geschreven. Het parametertype aantekening moet worden OutputBinding<T>, waarbij T een systeemeigen Java of een POJO is.
In het volgende voorbeeld ziet u een door een opslagwachtrij geactiveerde TypeScript-functie voor een wachtrij die JSON ontvangt in de volgende indeling:
{
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
De functie maakt Azure Cosmos DB documenten in de volgende indeling voor elke record:
{
"id": "John Henry-123456",
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
Dit is de TypeScript-code:
Als u meerdere documenten wilt uitvoeren, retourneert u een matrix in plaats van één object. Voorbeeld:
In het volgende voorbeeld ziet u een JavaScript-functie die door een opslagwachtrij is geactiveerd voor een wachtrij die JSON ontvangt in de volgende indeling:
{
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
De functie maakt Azure Cosmos DB documenten in de volgende indeling voor elke record:
{
"id": "John Henry-123456",
"name": "John Henry",
"employeeId": "123456",
"address": "A town nearby"
}
Dit is de JavaScript-code:
Als u meerdere documenten wilt uitvoeren, retourneert u een matrix in plaats van één object. Voorbeeld:
In het volgende voorbeeld ziet u hoe u gegevens naar Azure Cosmos DB schrijft met behulp van een uitvoerbinding. De binding wordt gedeclareerd in het configuratiebestand van de functie (functions.json) en haalt gegevens uit een wachtrijbericht op en schrijft naar een Azure Cosmos DB document.
{
"name": "EmployeeDocument",
"type": "cosmosDB",
"databaseName": "MyDatabase",
"collectionName": "MyCollection",
"createIfNotExists": true,
"connectionStringSetting": "MyStorageConnectionAppSetting",
"direction": "out"
}
In het bestand run.ps1 wordt het object dat is geretourneerd van de functie toegewezen aan een EmployeeDocument object, dat in de database wordt bewaard.
param($QueueItem, $TriggerMetadata)
Push-OutputBinding -Name EmployeeDocument -Value @{
id = $QueueItem.name + '-' + $QueueItem.employeeId
name = $QueueItem.name
employeeId = $QueueItem.employeeId
address = $QueueItem.address
}
In het volgende voorbeeld ziet u hoe u een document naar een Azure Cosmos DB-database schrijft als uitvoer van een functie. Het voorbeeld is afhankelijk van of u het v1 of v2 Python programmeermodel gebruikt.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.route()
@app.cosmos_db_output(arg_name="documents",
database_name="DB_NAME",
collection_name="COLLECTION_NAME",
create_if_not_exists=True,
connection_string_setting="CONNECTION_SETTING")
def main(req: func.HttpRequest, documents: func.Out[func.Document]) -> func.HttpResponse:
request_body = req.get_body()
documents.set(func.Document.from_json(request_body))
return 'OK'
Kenmerken
Zowel in-processals geïsoleerde werkproces C#-bibliotheken gebruiken kenmerken om de functie te definiëren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand, zoals beschreven in de handleiding voor C#-scripts.
| Kenmerkeigenschap | Beschrijving |
|---|---|
| Verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met het Azure Cosmos DB account dat wordt bewaakt. Zie Verbindingen voor meer informatie. |
| DatabaseName | De naam van de Azure Cosmos DB-database met de container die wordt bewaakt. |
| ContainerName | De naam van de container die wordt bewaakt. |
| CreateIfNotExists | Een Booleaanse waarde om aan te geven of de container wordt gemaakt wanneer deze niet bestaat. De standaardwaarde is onwaar omdat nieuwe containers worden gemaakt met gereserveerde doorvoer, wat gevolgen heeft voor de kosten. Zie voor meer informatie de pagina met prijzen. |
| PartitionKey | Wanneer CreateIfNotExists is waar, definieert het partitiesleutelpad voor de gemaakte container. Kan bindingsparameters bevatten. |
| ContainerThroughput | Wanneer CreateIfNotExists is waar, wordt de doorvoer van de gemaakte container gedefinieerd. |
| PreferredLocations | (Optioneel) Definieert voorkeurslocaties (regio's) voor geo-gerepliceerde databaseaccounts in de Azure Cosmos DB-service. Waarden moeten door komma's worden gescheiden. Bijvoorbeeld: East US,South Central US,North Europe. |
Decorateurs
Alleen aan het Python v2-programmeermodel.
Voor Python v2-functies die zijn gedefinieerd met behulp van een decorator, zijn de volgende eigenschappen op de cosmos_db_output:
| Eigenschappen | Beschrijving |
|---|---|
arg_name |
De naam van de variabele die wordt gebruikt in functiecode die de lijst met documenten met wijzigingen vertegenwoordigt. |
database_name |
De naam van de Azure Cosmos DB-database met de container die wordt bewaakt. |
container_name |
De naam van de Azure Cosmos DB container die wordt bewaakt. |
create_if_not_exists |
Een Booleaanse waarde die aangeeft of de database en verzameling moeten worden gemaakt als deze niet bestaan. |
connection_string_setting |
De verbindingsreeks van de Azure Cosmos DB die wordt bewaakt. |
Zie de sectie Configuration voor Python functies die zijn gedefinieerd met behulp van function.json.
Aantekeningen
Gebruik in de runtimebibliotheek van Java functions de @CosmosDBOutput annotatie voor parameters die naar Azure Cosmos DB schrijven. De aantekening ondersteunt de volgende eigenschappen:
Configuratie
Alleen aan het programmeermodel Python v1.
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld, waarbij de eigenschappen verschillen per extensieversie:
| function.json-eigenschap | Beschrijving |
|---|---|
| verbinding | De naam van een app-instelling of instellingsverzameling die aangeeft hoe verbinding moet worden gemaakt met het Azure Cosmos DB account dat wordt bewaakt. Zie Verbindingen voor meer informatie. |
| databaseName | De naam van de Azure Cosmos DB-database met de container die wordt bewaakt. |
| containerName | De naam van de container die wordt bewaakt. |
| createIfNotExists | Een Booleaanse waarde om aan te geven of de container wordt gemaakt wanneer deze niet bestaat. De standaardwaarde is onwaar omdat nieuwe containers worden gemaakt met gereserveerde doorvoer, wat gevolgen heeft voor de kosten. Zie voor meer informatie de pagina met prijzen. |
| partitionKey | Wanneer createIfNotExists is waar, definieert het partitiesleutelpad voor de gemaakte container. Kan bindingsparameters bevatten. |
| containerThroughput | Wanneer createIfNotExists is waar, wordt de doorvoer van de gemaakte container gedefinieerd. |
| preferredLocations | (Optioneel) Definieert voorkeurslocaties (regio's) voor geo-gerepliceerde databaseaccounts in de Azure Cosmos DB-service. Waarden moeten door komma's worden gescheiden. Bijvoorbeeld: East US,South Central US,North Europe. |
Zie de sectie Voorbeeld voor volledige voorbeelden.
Gebruik
Wanneer u naar de uitvoerparameter in uw functie schrijft, wordt er standaard een document in uw database gemaakt. Geef de document-id van het uitvoerdocument op door de id eigenschap op te geven in het JSON-object dat is doorgegeven aan de uitvoerparameter.
Notitie
Wanneer u de id van een bestaand document opgeeft, wordt het overschreven door het nieuwe uitvoerdocument.
De parameter van de uitvoerfunctie moet worden gedefinieerd als func.Out[func.Document]. Raadpleeg het uitvoervoorbeeld voor meer informatie.
Het parametertype dat wordt ondersteund door de Cosmos DB-uitvoerbinding, is afhankelijk van de runtimeversie van Functions, de versie van het extensiepakket en de gebruikte C#-modaliteit.
Wanneer u wilt dat de functie naar één document schrijft, kan de Cosmos DB-uitvoerbinding worden gekoppeld aan de volgende typen:
| Typologie | Beschrijving |
|---|---|
| JSON serialiseerbare typen | Een object dat de JSON-inhoud van een document vertegenwoordigt. Functions probeert een normaal oud CLR-objecttype (POCO) te serialiseren in JSON-gegevens. |
Wanneer u wilt dat de functie naar meerdere documenten schrijft, kan de Cosmos DB-uitvoerbinding worden gekoppeld aan de volgende typen:
| Typologie | Beschrijving |
|---|---|
T[] waar T is JSON serialiseerbare type |
Een matrix met meerdere documenten. Elke vermelding vertegenwoordigt één document. |
Voor andere uitvoerscenario's maakt en gebruikt u een CosmosClient met andere typen uit Microsoft.Azure. Cosmos rechtstreeks. Zie Register Azure clients voor een voorbeeld van het gebruik van afhankelijkheidsinjectie om een clienttype te maken op basis van de Azure SDK.
Connecties
De connection en leaseConnection eigenschappen zijn ingesteld op sleutels in applicatieinstellingen die waarden teruggeven die door de Functions-runtime worden gebruikt om verbinding te maken met de Azure Cosmos DB-accounteindpunten die door de extensie worden gebruikt. De waarde van deze eigenschappeninstellingen hangt af van het type verbinding:
-
Managed identity-verbinding: De
connectioneigenschap wordt<CONNECTION_NAME_PREFIX>gedeeld door een groep instellingen die samen een identiteitsgebaseerde verbinding met het account definiëren. Voor meer informatie, zie Definieer identiteitsverbindingen. -
Key Vault-referentie: De
connectionproperty-instelling geeft een Azure Key Vault-referentie terug naar de locatie waar de verbindingsreeks centraal wordt onderhouden. Voor meer informatie, zie Define Key Vault-verbindingen. -
App Configuration referentie: De
connectionproperty-instelling geeft een Azure App Configuration-referentie terug die een verbindingsreeks of een Key Vault-referentie teruggeeft. Voor meer informatie, zie Azure App Configuration in het artikel over verbindingen. -
Connection string: De
connectionproperty-instelling geeft de daadwerkelijke account verbindingsreeks terug. Omdat de verbindingsreeks gedeelde geheime sleutels bevat, zou je moeten overwegen een managed identity-verbinding te gebruiken, waar mogelijk. Voor meer informatie, zie Verbindingen definiëren.
Voor meer informatie over bindingsverbindingen, zie Verbinding beheren in Azure Functions. Om een verbindingsreeks te verkrijgen, navigeer je naar je Azure Cosmos DB-account, selecteer je Keys, en kopieer vervolgens de waarden van PRIMARY CONNECTION STRING of SECONDARY CONNECTION STRING. Deze verbindingsstrings bevatten gedeelde geheime sleutels en moeten veilig worden bewaard.
In eerdere versies van de extensie werden de verbindingseigenschappen en connectionStringSettinggenoemdleaseConnectionStringSetting.
Uitzonderingen en retourcodes
| Verbindend | Verwijzing |
|---|---|
| Azure Cosmos DB | HTTP-statuscodes voor Azure Cosmos DB |