Azure Cosmos DB utdatabindning för Azure Functions 2.x och senare

Med Azure Cosmos DB-utdatabindningen kan du skriva ett nytt dokument till en Azure Cosmos DB databas med hjälp av SQL-API:et.

Information om konfiguration och konfigurationsinformation finns i översikten.

Viktigt!

Den här artikeln använder flikar för att stödja flera versioner av Node.js programmeringsmodellen. V4-modellen är allmänt tillgänglig och är utformad för att ha en mer flexibel och intuitiv upplevelse för JavaScript- och TypeScript-utvecklare. Mer information om hur v4-modellen fungerar finns i utvecklarguiden Azure Functions Node.js. Mer information om skillnaderna mellan v3 och v4 finns i migreringsguiden.

Azure Functions stöder två programmeringsmodeller för Python. Hur du definierar dina bindningar beror på din valda programmeringsmodell.

Med programmeringsmodellen Python v2 kan du definiera bindningar med hjälp av dekoratörer direkt i din Python funktionskod. Mer information finns i utvecklarguiden Python.

Den här artikeln stöder båda programmeringsmodellerna.

En C#-funktion kan skapas med något av följande C#-lägen:

  • Isolerad arbetsmodell: Kompilerad C#-funktion som körs i en arbetsprocess som är isolerad från körningen. Isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på LTS- och icke-LTS-versioner .NET och .NET Framework. Tillägg för isolerade arbetsprocessfunktioner använder Microsoft.Azure.Functions.Worker.Extensions.* namnområden.
  • Processmodell: Kompilerad C#-funktion som körs i samma process som Functions-körningen. I en variant av den här modellen kan Functions köras med C#-skript, vilket främst stöds för redigering av C#-portalen. Tillägg för processfunktioner använder Microsoft.Azure.WebJobs.Extensions.* namnområden.

Exempel

Om inget annat anges kan exempel i den här artikeln vara målversion 3.x av tillägget Azure Cosmos DB. För användning med tilläggsversion 4.x måste du ersätta strängen collection i egenskaps- och attributnamn med container och connection_string_setting med connection.

Go-stöd finns för närvarande inte tillgängligt för denna bindning.

Följande kod definierar en MyDocument typ:

I följande exempel är returtypen en IReadOnlyList<T>, som är en ändrad lista över dokument från utlösarbindningsparametern:

Köutlösare, spara meddelande till databasen via returvärde

I följande exempel visas en Java funktion som lägger till ett dokument i en databas med data från ett meddelande i 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-utlösare, spara ett dokument i databasen via returvärde

I följande exempel visas en Java funktion vars signatur kommenteras med @CosmosDBOutput och har returvärde av typen String. JSON-dokumentet som returneras av funktionen skrivs automatiskt till motsvarande Azure Cosmos DB samling.

    @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-utlösare, spara ett dokument i databasen via OutputBinding

I följande exempel visas en Java funktion som skriver ett dokument till Azure Cosmos DB via en OutputBinding<T> utdataparameter. I det här exemplet måste parametern outputItem kommenteras med @CosmosDBOutput, inte funktionssignaturen. Med hjälp av OutputBinding<T> kan funktionen dra nytta av bindningen för att skriva dokumentet till Azure Cosmos DB samtidigt som du kan returnera ett annat värde till funktionsanroparen, till exempel ett JSON- eller XML-dokument.

    @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-utlösare, spara flera dokument i databasen via OutputBinding

I följande exempel visas en Java funktion som skriver flera dokument till Azure Cosmos DB via en OutputBinding<T>-utdataparameter. I det här exemplet kommenteras parametern outputItem med @CosmosDBOutput, inte funktionssignaturen. Utdataparametern outputItem har en lista med ToDoItem objekt som mallparametertyp. Med OutputBinding<T> kan funktionen dra nytta av bindningen för att skriva dokumenten till Azure Cosmos DB samtidigt som du kan returnera ett annat värde till funktionsanroparen, till exempel ett JSON- eller XML-dokument.

    @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();
    }

I Java functions runtime-biblioteket använder du @CosmosDBOutput-kommentaren på parametrar som skrivs till Azure Cosmos DB. Anteckningsparametertypen ska vara OutputBinding<T>, där T antingen är en inbyggd Java typ eller en POJO.

I följande exempel visas en utlös TypeScript-funktion i lagringskö för en kö som tar emot JSON i följande format:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Funktionen skapar Azure Cosmos DB dokument i följande format för varje post:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Här är TypeScript-koden:

Om du vill mata ut flera dokument returnerar du en matris i stället för ett enda objekt. Till exempel:

I följande exempel visas en javaScript-funktion som utlöses av en lagringskö för en kö som tar emot JSON i följande format:

{
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Funktionen skapar Azure Cosmos DB dokument i följande format för varje post:

{
    "id": "John Henry-123456",
    "name": "John Henry",
    "employeeId": "123456",
    "address": "A town nearby"
}

Här är JavaScript-koden:

Om du vill mata ut flera dokument returnerar du en matris i stället för ett enda objekt. Till exempel:

I följande exempel visas hur du skriver data till Azure Cosmos DB med hjälp av en utdatabindning. Bindningen deklareras i funktionens konfigurationsfil (functions.json) och tar data från ett kömeddelande och skriver ut till ett Azure Cosmos DB dokument.

{ 
  "name": "EmployeeDocument",
  "type": "cosmosDB",
  "databaseName": "MyDatabase",
  "collectionName": "MyCollection",
  "createIfNotExists": true,
  "connectionStringSetting": "MyStorageConnectionAppSetting",
  "direction": "out" 
} 

I filen run.ps1 mappas objektet som returneras från funktionen till ett EmployeeDocument objekt som sparas i databasen.

param($QueueItem, $TriggerMetadata) 

Push-OutputBinding -Name EmployeeDocument -Value @{ 
    id = $QueueItem.name + '-' + $QueueItem.employeeId 
    name = $QueueItem.name 
    employeeId = $QueueItem.employeeId 
    address = $QueueItem.address 
} 

I följande exempel visas hur du skriver ett dokument till en Azure Cosmos DB databas som utdata för en funktion. Exemplet beror på om du använder programmeringsmodellen v1 eller v2 Python.

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'

Attribut

C#-bibliotek i både processprocess och isolerad arbetsprocess använder attribut för att definiera funktionen. C#-skriptet använder i stället en function.json konfigurationsfil enligt beskrivningen i C#-skriptguiden.

Attributegenskap beskrivning
Anslutning Namnet på en appinställning eller inställningssamling som anger hur du ansluter till det Azure Cosmos DB konto som övervakas. Mer information finns i Anslutningar.
DatabaseName Namnet på Azure Cosmos DB-databasen med containern som övervakas.
ContainerName Namnet på containern som övervakas.
CreateIfNotExists Ett booleskt värde som anger om containern skapas när den inte finns. Standardvärdet är falskt eftersom nya containrar skapas med reserverat dataflöde, vilket har kostnadskonsekvenser. Mer information, se prissidan.
PartitionKey När CreateIfNotExists är sant definierar den partitionsnyckelsökvägen för den skapade containern. Kan innehålla bindningsparametrar.
ContainerThroughput När CreateIfNotExists är sant definierar det dataflödet för den skapade containern.
PreferredLocations (Valfritt) Definierar önskade platser (regioner) för geo-replikerade databaskonton i Azure Cosmos DB-tjänsten. Värden bör kommaavgränsas. Exempel: East US,South Central US,North Europe

Dekoratörer

Applies endast till programmeringsmodellen Python v2.

För Python v2-funktioner som definierats med hjälp av en dekoratör, följande egenskaper på cosmos_db_output:

Fastighet beskrivning
arg_name Variabelnamnet som används i funktionskoden som representerar listan över dokument med ändringar.
database_name Namnet på Azure Cosmos DB-databasen med containern som övervakas.
container_name Namnet på den Azure Cosmos DB container som övervakas.
create_if_not_exists Ett booleskt värde som anger om databasen och samlingen ska skapas om de inte finns.
connection_string_setting Connection string för Azure Cosmos DB som övervakas.

Information om Python funktioner som definieras med hjälp av function.json finns i avsnittet Configuration.

Kommentarer

Från Java functions runtime-biblioteket använder du @CosmosDBOutput kommentar på parametrar som skriver till Azure Cosmos DB. Kommentaren stöder följande egenskaper:

Konfiguration

Applies endast till programmeringsmodellen Python v1.

I följande tabell förklaras de egenskaper som du kan ange för objektet options som skickas output.cosmosDB() till metoden. Egenskaperna type, directionoch name gäller inte för v4-modellen.

I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json , där egenskaperna skiljer sig åt efter tilläggsversion:

function.json egenskap beskrivning
samband Namnet på en appinställning eller inställningssamling som anger hur du ansluter till det Azure Cosmos DB konto som övervakas. Mer information finns i Anslutningar.
databaseName Namnet på Azure Cosmos DB-databasen med containern som övervakas.
containerName Namnet på containern som övervakas.
createIfNotExists Ett booleskt värde som anger om containern skapas när den inte finns. Standardvärdet är falskt eftersom nya containrar skapas med reserverat dataflöde, vilket har kostnadskonsekvenser. Mer information, se prissidan.
partitionKey När createIfNotExists är sant definierar den partitionsnyckelsökvägen för den skapade containern. Kan innehålla bindningsparametrar.
containerThroughput När createIfNotExists är sant definierar det dataflödet för den skapade containern.
preferredLocations (Valfritt) Definierar önskade platser (regioner) för geo-replikerade databaskonton i Azure Cosmos DB-tjänsten. Värden bör kommaavgränsas. Exempel: East US,South Central US,North Europe

Se avsnittet Exempel för fullständiga exempel.

Förbrukning

När du skriver till utdataparametern i funktionen skapas som standard ett dokument i databasen. Du bör ange dokument-ID för utdatadokumentet genom att id ange egenskapen i JSON-objektet som skickas till utdataparametern.

Kommentar

När du anger ID för ett befintligt dokument skrivs det över av det nya utdatadokumentet.

Utdatafunktionsparametern måste definieras som func.Out[func.Document]. Mer information finns i utdataexemplet .

Parametertypen som stöds av Cosmos DB-utdatabindningen beror på functions-körningsversionen, tilläggspaketversionen och den C#-modalitet som används.

När du vill att funktionen ska skriva till ett enda dokument kan Cosmos DB-utdatabindningen binda till följande typer:

Typ beskrivning
JSON-serialiserbara typer Ett objekt som representerar JSON-innehållet i ett dokument. Functions försöker serialisera en vanlig CLR-objekttyp (POCO) till JSON-data.

När du vill att funktionen ska skriva till flera dokument kan Cosmos DB-utdatabindningen binda till följande typer:

Typ beskrivning
T[] där T är JSON serializable type En matris som innehåller flera dokument. Varje post representerar ett dokument.

För andra utdatascenarier skapar och använder du en CosmosClient med andra typer från Microsoft.Azure. Cosmos direkt. Se Register Azure-klienter för ett exempel på hur du använder beroendeinmatning för att skapa en klienttyp från Azure SDKs.

anslutningar

Och connection egenskaperna leaseConnection är satta till nycklar i applikationsinställningar som returnerar värden som används av Functions-runtime för att ansluta till Azure Cosmos DB-kontots ändpunkter som används av tillägget. Värdet på dessa egenskapsinställningar beror på typen av anslutning:

  • Managed identity-anslutning: Egenskapen connection<CONNECTION_NAME_PREFIX> delas av en grupp inställningar som tillsammans definierar en identitetsbaserad anslutning till kontot. För mer information, se Definiera identitetskopplingar.
  • Key Vault-referens: Egendomsinställningen connection returnerar en Azure Key Vault-referens till platsen där reťazec pripojenia underhålls centralt. För mer information, se Definiera Key Vault-anslutningar.
  • App Configuration Reference: Egenskapsinställningen connection returnerar en Azure App Configuration-referens som returnerar en reťazec pripojenia eller en Key Vault-referens. För mer information, se Azure App Configuration i artikeln om anslutningar.
  • Connection string: Egenskapsinställningen connection returnerar den faktiska kontots reťazec pripojenia. Eftersom reťazec pripojenia innehåller delade hemliga nycklar bör du överväga att använda en managed identity-anslutning när det är möjligt. För mer information, se Definiera kopplingar.

För att lära dig mer om bindningsanslutningar, se Hantera anslutning i Azure Functions. För att hämta en reťazec pripojenia, gå till ditt Azure Cosmos DB-konto, välj Keys och kopiera sedan värdena PRIMARY CONNECTION STRING eller SECONDARY CONNECTION STRING. Dessa anslutningssträngar innehåller delade hemliga nycklar och måste hållas säkra.

I tidigare versioner av tillägget namngavs connectionStringSetting anslutningsegenskaperna och leaseConnectionStringSetting.

Undantag och returkoder

Bindning Referens
Azure Cosmos DB HTTP-statuskoder för Azure Cosmos DB

Nästa steg