Azure Cosmos DB-kötések Azure Functions 1.x-hez

Ez a cikk azt ismerteti, hogyan használható az Azure Cosmos DB-kötések Azure Functions. Azure Functions támogatja az Azure Cosmos DB trigger-, bemeneti és kimeneti kötéseit.

Megjegyzés

Ez a cikk Azure Functions 1.x. A kötések a Functions 2.x és újabb verzióiban való használatáról az Azure Cosmos DB-kötések Azure Functions 2.x-hez című témakörben olvashat.

Ezt a kötést eredetileg DocumentDB-nek hívták. Az 1.x verzió Azure Functions csak az eseményindítót nevezték át Azure Cosmos DB-nek; a bemeneti kötés, a kimeneti kötés és a NuGet-csomag megőrzi a DocumentDB nevét.

Megjegyzés

Az Azure Cosmos DB-kötések csak az SQL API-val használhatók. Az összes többi Azure Cosmos DB API-hoz az API statikus ügyfélalkalmazásával kell elérnie az adatbázist a függvényből, beleértve az Azure Cosmos DB for MongoDB-t, az Apache Cassandra-hoz készült Azure Cosmos DB-t, az Apache Gremlinhez készült Azure Cosmos DB-t és a Table-hez készült Azure Cosmos DB-t.

Csomagok – Functions 1.x

A Functions 1.x-es verziójához készült Azure Cosmos DB-kötések a Microsoft.Azure.WebJobs.Extensions.DocumentDB NuGet csomag 1.x-es verziójában érhetők el. A kötések forráskódja az azure-webjobs-sdk-extensions GitHub-adattárban található.

Az alábbi táblázat bemutatja, hogyan adhat hozzá támogatást ehhez a kötéshez az egyes fejlesztési környezetekben.

Fejlesztési környezet Támogatás hozzáadása a következőben:
Functions 1.x
Helyi fejlesztés – C# osztálykódtár A csomag telepítése
Helyi fejlesztés – C#-szkript, JavaScript, F# Automatikus
Portál fejlesztése Automatikus

Eseményindító

Az Azure Cosmos DB-eseményindító az Azure Cosmos DB változáscsatornával figyeli a beszúrásokat és frissítéseket a partíciók között. A változáscsatorna a beszúrásokat és frissítéseket teszi közzé, nem a törléseket.

Trigger – példa

Az alábbi példa egy folyamatban lévő C# függvényt mutat be, amely akkor lesz meghívva, ha a megadott adatbázisban és gyűjteményben vannak beszúrások vagy frissítések.

using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;

namespace CosmosDBSamplesV1
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Info($"Documents modified: {documents.Count}");
                log.Info($"First document Id: {documents[0].Id}");
            }
        }
    }
}

Trigger – attribútumok

A folyamatban lévő C# osztálykódtárakhoz használja a CosmosDBTrigger attribútumot.

Az attribútum konstruktora az adatbázis nevét és a gyűjtemény nevét veszi fel. Ezekről a beállításokról és a konfigurálható egyéb tulajdonságokról az Eseményindító – konfiguráció című témakörben olvashat bővebben. Íme egy CosmosDBTrigger attribútum példa egy metódus-aláírásban:

    [FunctionName("DocumentUpdates")]
    public static void Run(
        [CosmosDBTrigger("database", "collection", ConnectionStringSetting = "myCosmosDB")]
    IReadOnlyList<Document> documents,
        TraceWriter log)
    {
        ...
    }

Teljes példáért lásd: Trigger – C# példa.

Trigger – konfiguráció

Az alábbi táblázat a function.json fájlban és CosmosDBTrigger az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Description
Típus n.a. A értéket a következő értékre kell állítani: cosmosDBTrigger.
Irányba n.a. A értéket a következő értékre kell állítani: in. Ez a paraméter automatikusan be van állítva, amikor létrehozza az eseményindítót a Azure Portal.
név n.a. A függvénykódban használt változónév, amely a módosításokkal rendelkező dokumentumok listáját jelöli.
connectionStringSetting ConnectionStringSetting A figyelt Azure Cosmos DB-fiókhoz való csatlakozáshoz használt kapcsolati sztring tartalmazó alkalmazásbeállítás neve.
databaseName DatabaseName Az Azure Cosmos DB-adatbázis neve a gyűjtemény monitorozásával.
Lekérdezés_neve Lekérdezés_neve A figyelt gyűjtemény neve.
leaseConnectionStringSetting LeaseConnectionStringSetting (Nem kötelező) A bérletgyűjteményt tároló szolgáltatás kapcsolati sztring tartalmazó alkalmazásbeállítás neve. Ha nincs beállítva, a rendszer az connectionStringSetting értéket használja. Ez a paraméter automatikusan be lesz állítva, amikor a kötés létrejön a portálon. A bérletgyűjtemény kapcsolati sztring írási engedélyekkel kell rendelkeznie.
leaseDatabaseName LeaseDatabaseName (Nem kötelező) A bérletek tárolásához használt gyűjteményt tároló adatbázis neve. Ha nincs beállítva, a rendszer a databaseName beállítás értékét használja. Ez a paraméter automatikusan be lesz állítva, amikor a kötés létrejön a portálon.
leaseCollectionName LeaseCollectionName (Nem kötelező) A bérletek tárolására használt gyűjtemény neve. Ha nincs beállítva, a rendszer az értéket leases használja.
createLeaseCollectionIfNotExists CreateLeaseCollectionIfNotExists (Nem kötelező) Ha a értékre truevan állítva, a rendszer automatikusan létrehozza a bérletgyűjteményt, ha még nem létezik. Az alapértelmezett érték false.
leasesCollectionThroughput LeasesCollectionThroughput (Nem kötelező) Meghatározza a bérletgyűjtemény létrehozásakor hozzárendelendő kérelemegységek mennyiségét. Ez a beállítás csak akkor használatos, ha createLeaseCollectionIfNotExists a értéke true. Ez a paraméter automatikusan be lesz állítva, amikor a kötés a portál használatával jön létre.
leaseCollectionPrefix LeaseCollectionPrefix (Nem kötelező) Ha be van állítva, hozzáad egy előtagot a függvény bérletgyűjteményében létrehozott bérletekhez, így két külön Azure Functions oszthatja meg ugyanazt a bérletgyűjteményt különböző előtagok használatával.
feedPollDelay FeedPollDelay (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg a partíciók lekérdezése közötti késleltetést a hírcsatorna új módosításainak lekérdezése között, miután az összes aktuális módosítás el lesz ürítve. Az alapértelmezett érték 5000 (5 másodperc).
leaseAcquireInterval LeaseAcquireInterval (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg azt az időközt, amely alapján kiszámíthatja, hogy a partíciók egyenletesen oszlanak-e el az ismert gazdagéppéldányok között. Az alapértelmezett érték 13000 (13 másodperc).
leaseExpirationInterval LeaseExpirationInterval (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg azt az időközt, amelyre vonatkozóan a bérlet egy partíciót képviselő bérletre kerül. Ha a bérlet nem újul meg ebben az intervallumban, az lejár, és a partíció tulajdonjoga egy másik példányra kerül. Az alapértelmezett érték 60000 (60 másodperc).
leaseRenewInterval LeaseRenewInterval (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg a példány által jelenleg tárolt partíciók összes bérletének megújítási időközét. Az alapértelmezett érték 17000 (17 másodperc).
checkpointFrequency CheckpointFrequency (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg a bérletellenőrzési pontok közötti időközt. Az alapértelmezett érték mindig az egyes függvényhívások után van.
maxItemsPerInvocation MaxItemsPerInvocation (Nem kötelező) Ha be van állítva, testre szabja a függvényhívásonként fogadott elemek maximális számát.
startFromBeginning StartFromBeginning (Nem kötelező) Ha be van állítva, az eseményindító az aktuális idő helyett a gyűjtemény előzményeinek elejétől kezdve kezdi el a módosítások olvasását. Ez csak az eseményindító első indításakor működik, mivel a későbbi futtatásokban az ellenőrzőpontok már vannak tárolva. true A már létrehozott bérletek beállításának nincs hatása.

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Trigger – használat

Az eseményindítóhoz egy második gyűjteményre van szükség, amelyet a partíciók bérleteinek tárolására használ. A figyelt gyűjteménynek és a bérleteket tartalmazó gyűjteménynek is rendelkezésre kell állnia ahhoz, hogy az eseményindító működjön.

Fontos

Ha több függvény van konfigurálva arra, hogy egy Azure Cosmos DB-eseményindítót használjon ugyanahhoz a gyűjteményhez, mindegyik függvénynek dedikált bérletgyűjteményt kell használnia, vagy minden egyes függvényhez másikat LeaseCollectionPrefix kell megadnia. Ellenkező esetben a rendszer csak az egyik függvényt aktiválja. Az előtaggal kapcsolatos információkért lásd a Konfiguráció szakaszt.

Az eseményindító nem jelzi, hogy egy dokumentumot frissítettek vagy szúrtak be, csak magát a dokumentumot biztosítja. Ha másképp kell kezelnie a frissítéseket és a beszúrásokat, ezt megteheti a beszúráshoz vagy frissítéshez használt időbélyeg-mezők implementálásával.

Bevitel

Az Azure Cosmos DB bemeneti adatkötése az SQL API-t használja egy vagy több Azure Cosmos DB-dokumentum lekérésére, majd átadja ezeket a függvény bemeneti paraméterének. A dokumentumazonosítót vagy lekérdezési paramétereket a függvényt meghívó eseményindító alapján lehet meghatározni.

Bemenet – példa

Ez a szakasz a következő példákat tartalmazza:

A példák egy egyszerű ToDoItem típusra utalnak:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Üzenetsor-eseményindító, azonosító keresése a JSON-ból

Az alábbi példa egy C# függvényt mutat be, amely egyetlen dokumentumot kér le. A függvényt egy JSON-objektumot tartalmazó üzenetsor aktiválja. Az üzenetsor-eseményindító a JSON-t egy nevű objektumba ToDoItemLookupelemzi, amely tartalmazza a keresendő azonosítót. Ez az azonosító egy dokumentum lekérésére ToDoItem szolgál a megadott adatbázisból és gyűjteményből.

namespace CosmosDBSamplesV1
{
    public class ToDoItemLookup
    {
        public string ToDoItemId { get; set; }
    }
}
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromJSON
    {
        [FunctionName("DocByIdFromJSON")]
        public static void Run(
            [QueueTrigger("todoqueueforlookup")] ToDoItemLookup toDoItemLookup,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{ToDoItemId}")]ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed Id={toDoItemLookup?.ToDoItemId}");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
        }
    }
}

HTTP-eseményindító, azonosító keresése lekérdezési sztringből

Az alábbi példa egy C# függvényt mutat be, amely egyetlen dokumentumot kér le. A függvényt egy olyan HTTP-kérés aktiválja, amely egy lekérdezési sztringgel adja meg a keresendő azonosítót. Ez az azonosító egy dokumentum lekérésére ToDoItem szolgál a megadott adatbázisból és gyűjteményből.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromQueryString
    {
        [FunctionName("DocByIdFromQueryString")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{Query.id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

HTTP-eseményindító, azonosító keresése útvonaladatokból

Az alábbi példa egy C# függvényt mutat be, amely egyetlen dokumentumot kér le. A függvényt egy OLYAN HTTP-kérés aktiválja, amely útvonaladatokat használ a megkeresendő azonosító megadásához. Ez az azonosító egy dokumentum lekérésére ToDoItem szolgál a megadott adatbázisból és gyűjteményből.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteData
    {
        [FunctionName("DocByIdFromRouteData")]
        public static HttpResponseMessage Run(
            [HttpTrigger(
                AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                Id = "{id}")] ToDoItem toDoItem,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            if (toDoItem == null)
            {
                log.Info($"ToDo item not found");
            }
            else
            {
                log.Info($"Found ToDo item, Description={toDoItem.Description}");
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Bemeneti példák kihagyása

HTTP-eseményindító, azonosító keresése útvonaladatokból az SqlQuery használatával

Az alábbi példa egy C# függvényt mutat be, amely egyetlen dokumentumot kér le. A függvényt egy OLYAN HTTP-kérés aktiválja, amely útvonaladatokat használ a megkeresendő azonosító megadásához. Ez az azonosító egy dokumentum lekérésére ToDoItem szolgál a megadott adatbázisból és gyűjteményből.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocByIdFromRouteDataUsingSqlQuery
    {
        [FunctionName("DocByIdFromRouteDataUsingSqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post",
                Route = "todoitems2/{id}")]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "select * from ToDoItems r where r.id = {id}")] IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Bemeneti példák kihagyása

HTTP-eseményindító, több dokumentum lekérése az SqlQuery használatával

Az alábbi példa egy C#-függvényt mutat be, amely lekéri a dokumentumok listáját. A függvényt EGY HTTP-kérés aktiválja. A lekérdezés az SqlQuery attribútumtulajdonságban van megadva.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;

namespace CosmosDBSamplesV1
{
    public static class DocsBySqlQuery
    {
        [FunctionName("DocsBySqlQuery")]
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
                HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection",
                SqlQuery = "SELECT top 2 * FROM c order by c._ts desc")]
                IEnumerable<ToDoItem> toDoItems,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            foreach (ToDoItem toDoItem in toDoItems)
            {
                log.Info(toDoItem.Description);
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Bemeneti példák kihagyása

HTTP-eseményindító, több dokumentum lekérése a DocumentClient (C#) használatával

Az alábbi példa egy C#-függvényt mutat be, amely lekéri a dokumentumok listáját. A függvényt EGY HTTP-kérés aktiválja. A kód az DocumentClient Azure Cosmos DB-kötés által biztosított példányt használja a dokumentumok listájának olvasásához. A DocumentClient példány írási műveletekhez is használható.

using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class DocsByUsingDocumentClient
    {
        [FunctionName("DocsByUsingDocumentClient")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")] DocumentClient client,
            TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            Uri collectionUri = UriFactory.CreateDocumentCollectionUri("ToDoItems", "Items");
            string searchterm = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "searchterm", true) == 0)
                .Value;

            if (searchterm == null)
            {
                return req.CreateResponse(HttpStatusCode.NotFound);
            }

            log.Info($"Searching for word: {searchterm} using Uri: {collectionUri.ToString()}");
            IDocumentQuery<ToDoItem> query = client.CreateDocumentQuery<ToDoItem>(collectionUri)
                .Where(p => p.Description.Contains(searchterm))
                .AsDocumentQuery();

            while (query.HasMoreResults)
            {
                foreach (ToDoItem result in await query.ExecuteNextAsync())
                {
                    log.Info(result.Description);
                }
            }
            return req.CreateResponse(HttpStatusCode.OK);
        }
    }
}

Bemenet – attribútumok

A folyamatban lévő C# osztálykódtárakban használja a DocumentDB attribútumot.

Az attribútum konstruktora az adatbázis nevét és a gyűjtemény nevét veszi fel. Ezekről a beállításokról és a konfigurálható egyéb tulajdonságokról az alábbi konfigurációs szakaszban tájékozódhat.

Bemenet – konfiguráció

Az alábbi táblázat a function.json fájlban és DocumentDB az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Description
Típus n.a. A értéket a következő értékre kell állítani: documentdb.
Irányba n.a. A értéket a következő értékre kell állítani: in.
név n.a. Annak a kötési paraméternek a neve, amely a függvény dokumentumát képviseli.
databaseName DatabaseName A dokumentumot tartalmazó adatbázis.
Lekérdezés_neve Lekérdezés_neve A dokumentumot tartalmazó gyűjtemény neve.
id Id A lekérendő dokumentum azonosítója. Ez a tulajdonság támogatja a kötési kifejezéseket. Ne állítsa be az azonosítót és az sqlQuery tulajdonságot sem. Ha egyiket sem állítja be, a rendszer lekéri a teljes gyűjteményt.
sqlQuery SqlQuery Több dokumentum lekéréséhez használt Azure Cosmos DB SQL-lekérdezés. A tulajdonság támogatja a futtatókörnyezeti kötéseket, ahogy az ebben a példában is látható: SELECT * FROM c where c.departmentId = {departmentId}. Ne állítsa be az azonosítót és az sqlQuery tulajdonságot sem. Ha egyiket sem állítja be, a rendszer lekéri a teljes gyűjteményt.
kapcsolat ConnectionStringSetting Az Azure Cosmos DB kapcsolati sztring tartalmazó alkalmazásbeállítás neve.
partitionKey PartitionKey A keresés partíciókulcs-értékét adja meg. Kötési paramétereket is tartalmazhat.

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Bemenet – használat

Ha a függvény sikeresen kilép, a bemeneti dokumentum nevesített bemeneti paraméterekkel végzett módosításai automatikusan megmaradnak.

Kimenet

Az Azure Cosmos DB kimeneti kötéssel új dokumentumot írhat egy Azure Cosmos DB-adatbázisba az SQL API használatával.

Kimenet – példa

Ez a szakasz a következő példákat tartalmazza:

  • Üzenetsor-eseményindító, egy dokumentum írása
  • Üzenetsor-eseményindító, dokumentum írása a használatával IAsyncCollector

A példák egy egyszerű ToDoItem típusra utalnak:

namespace CosmosDBSamplesV1
{
    public class ToDoItem
    {
        public string Id { get; set; }
        public string Description { get; set; }
    }
}

Üzenetsor-eseményindító, egy dokumentum írása

Az alábbi példa egy C#-függvényt mutat be, amely egy dokumentumot ad hozzá egy adatbázishoz a Queue Storage üzenetében megadott adatokkal.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System;

namespace CosmosDBSamplesV1
{
    public static class WriteOneDoc
    {
        [FunctionName("WriteOneDoc")]
        public static void Run(
            [QueueTrigger("todoqueueforwrite")] string queueMessage,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]out dynamic document,
            TraceWriter log)
        {
            document = new { Description = queueMessage, id = Guid.NewGuid() };

            log.Info($"C# Queue trigger function inserted one row");
            log.Info($"Description={queueMessage}");
        }
    }
}

Üzenetsor-eseményindító, dokumentum írása az IAsyncCollector használatával

Az alábbi példa egy C# függvényt mutat be, amely dokumentumgyűjteményt ad hozzá egy adatbázishoz egy JSON üzenetsorban megadott adatok használatával.

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Threading.Tasks;

namespace CosmosDBSamplesV1
{
    public static class WriteDocsIAsyncCollector
    {
        [FunctionName("WriteDocsIAsyncCollector")]
        public static async Task Run(
            [QueueTrigger("todoqueueforwritemulti")] ToDoItem[] toDoItemsIn,
            [DocumentDB(
                databaseName: "ToDoItems",
                collectionName: "Items",
                ConnectionStringSetting = "CosmosDBConnection")]
                IAsyncCollector<ToDoItem> toDoItemsOut,
            TraceWriter log)
        {
            log.Info($"C# Queue trigger function processed {toDoItemsIn?.Length} items");

            foreach (ToDoItem toDoItem in toDoItemsIn)
            {
                log.Info($"Description={toDoItem.Description}");
                await toDoItemsOut.AddAsync(toDoItem);
            }
        }
    }
}

Kimenet – attribútumok

A folyamatban lévő C# osztálykódtárakban használja a DocumentDB attribútumot.

Az attribútum konstruktora az adatbázis nevét és a gyűjtemény nevét veszi fel. Ezekről a beállításokról és a konfigurálható egyéb tulajdonságokról a Kimenet – konfiguráció című témakörben olvashat bővebben. Íme egy DocumentDB attribútum példa egy metódus-aláírásban:

    [FunctionName("QueueToDocDB")]
    public static void Run(
        [QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string myQueueItem,
        [DocumentDB("ToDoList", "Items", Id = "id", ConnectionStringSetting = "myCosmosDB")] out dynamic document)
    {
        ...
    }

Teljes példáért lásd: Kimenet.

Kimenet – konfiguráció

Az alábbi táblázat a function.json fájlban és DocumentDB az attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Attribútumtulajdonság Description
Típus n.a. A értéket értékre kell állítani.documentdb
Irányba n.a. A értéket értékre kell állítani.out
név n.a. A függvény dokumentumát képviselő kötési paraméter neve.
databaseName DatabaseName A dokumentumot létrehozó gyűjteményt tartalmazó adatbázis.
Lekérdezés_neve Lekérdezés_neve Annak a gyűjteménynek a neve, amelyben a dokumentum létrejön.
createIfNotExists CreateIfNotExists Logikai érték, amely azt jelzi, hogy a gyűjtemény akkor jön létre, ha nem létezik. Az alapértelmezett érték hamis , mert az új gyűjtemények fenntartott átviteli sebességgel jönnek létre, ami költségekkel jár. További tájékoztatás a díjszabási lapon olvasható.
partitionKey PartitionKey Ha CreateIfNotExists igaz, meghatározza a létrehozott gyűjtemény partíciókulcs-elérési útját.
collectionThroughput CollectionThroughput Ha CreateIfNotExists az érték igaz, a létrehozott gyűjtemény átviteli sebességét határozza meg.
kapcsolat ConnectionStringSetting Az Azure Cosmos DB-kapcsolati sztring tartalmazó alkalmazásbeállítás neve.

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Kimenet – használat

Alapértelmezés szerint, amikor a függvény kimeneti paraméterére ír, a rendszer létrehoz egy dokumentumot az adatbázisban. Ez a dokumentum egy automatikusan létrehozott GUID azonosítóval rendelkezik a dokumentum azonosítójaként. A kimeneti dokumentum dokumentumazonosítóját a kimeneti paraméternek átadott JSON-objektum tulajdonságának megadásával adhatja meg id .

Megjegyzés

Egy meglévő dokumentum azonosítójának megadásakor az új kimeneti dokumentum felülírja azt.

Kivételek és visszatérési kódok

Kötés Referencia
Azure Cosmos DB HTTP-állapotkódok az Azure Cosmos DB-hez

Következő lépések