Azure Cosmos DB-kötések az Azure Functions 1.x-hez
Fontos
Az Azure Functions-futtatókörnyezet 1.x verziójának támogatása 2026. szeptember 14-én megszűnik. Javasoljuk, hogy a teljes támogatás érdekében migrálja az alkalmazásokat a 4.x-es verzióra.
Ez a cikk bemutatja, hogyan használható az Azure Cosmos DB-kötések az Azure Functionsben. Az Azure Functions támogatja az Azure Cosmos DB trigger-, bemeneti és kimeneti kötéseit.
Tartsa szem előtt ezeket a fontos szempontokat, amikor az Azure Cosmos DB-kötést használja a Functions v1.x futtatókörnyezetéhez:
Ez a cikk az Azure Functions 1.x-hez készült. Javasoljuk, hogy a függvényeket a Functions-futtatókörnyezet legújabb verziójában futtassa. A kötések legújabb Functions-futtatókörnyezetben való használatáról további információt az Azure Functions 2.x Azure Cosmos DB-kötéseivel kapcsolatban talál.
Ezt a kötést eredetileg DocumentDB-nek hívták. Az Azure Functions 1.x-es verziójában csak az eseményindító lett átnevezve az Azure Cosmos DB-re; a bemeneti kötés, a kimeneti kötés és a NuGet-csomag megőrzi a DocumentDB nevét.
Az Azure Cosmos DB-kötések csak az SQL API-val használhatók. Az összes többi Azure Cosmos DB API esetében az adatbázist a függvényből kell elérnie az API statikus ügyfélprogramjának használatával, 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 Tablehez készült Azure Cosmos DB-t.
A Functions v1.x futtatókörnyezethez készült Azure Cosmos DB-kötések nem támogatják a Microsoft Entra-hitelesítést és a felügyelt identitásokat. A biztonság javítása érdekében frissítsen a Functions-futtatókörnyezet legújabb verziójára.
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 támogatást a kimeneti kötéshez az egyes fejlesztési környezetekben.
Fejlesztői környezet | Támogatás hozzáadása a Functions 1.x-ben |
---|---|
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áscsatorna használatával figyeli a partíciók közötti beszúrásokat és frissítéseket. A változáscsatorna a beszúrásokat és frissítéseket teszi közzé, nem pedig a törléseket.
Trigger – példa
Az alábbi példa egy folyamatban lévő C# függvényt mutat be, amelyet akkor hív meg a rendszer, amikor beszúrások vagy frissítések vannak a megadott adatbázisban és gyűjteményben.
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 talál további információt. Í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)
{
...
}
A teljes példáért tekintse meg az Eseményindító – C# példát.
Trigger – konfiguráció
Az alábbi táblázat a function.json fájlban és az CosmosDBTrigger
attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.
function.json tulajdonság | Attribútumtulajdonság | Leírás |
---|---|---|
type | n.a. | A beállításnak a cosmosDBTrigger következőnek kell lennie: . |
direction | n.a. | A beállításnak a in következőnek kell lennie: . Ez a paraméter automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon. |
név | n.a. | A függvénykódban használt változónév, amely a módosításokat tartalmazó 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 figyelt gyűjteménysel. |
collectionName | CollectionName | A figyelt gyűjtemény neve. |
leaseConnectionStringSetting | LeaseConnectionStringSetting | (Nem kötelező) A bérletgyűjteményt tartalmazó 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ára használt gyűjteményt tartalmazó 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 be van true állítva, a bérletgyűjtemény automatikusan létrejön, 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árendelni kívánt kérelemegységek mennyiségét. Ezt a beállítást csak akkor használja a rendszer, ha createLeaseCollectionIfNotExists a beállítás é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, egy előtagot ad hozzá a függvény bérletgyűjteményében létrehozott bérletekhez, így két különálló Azure-függvény különböző előtagokkal oszthatja meg ugyanazt a bérletgyűjteményt. |
feedPollDelay | FeedPollDelay | (Nem kötelező) Ha be van állítva, ezredmásodpercben határozza meg a partíció 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 le 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ítható, 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 a bérlet egy partíciót képviselő bérleten történik. 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érlet-ellenőrző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 meg 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ások során az ellenőrzőpontok már vannak tárolva. A true 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 elérhetőnek kell lennie az eseményindító működéséhez.
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 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 tekintse meg a Konfiguráció szakaszt.
Az eseményindító nem jelzi, hogy frissítettek vagy beszúrtak-e egy dokumentumot, csak magát a dokumentumot adja meg. Ha másképp kell kezelnie a frissítéseket és a beszúrásokat, ezt úgy teheti meg, hogy időbélyegmezőket implementál a beszúráshoz vagy a frissítéshez.
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 alapján lehet meghatározni.
Bemenet – példa
Ez a szakasz a következő példákat tartalmazza:
- Üzenetsor-eseményindító, azonosító keresése a JSON-ból
- HTTP-eseményindító, azonosító keresése lekérdezési sztringből
- HTTP-eseményindító, azonosító keresése útvonaladatokból
- HTTP-eseményindító, azonosító keresése útvonaladatokból az SqlQuery használatával
- HTTP-eseményindító, több dokumentum lekérése az SqlQuery használatával
- HTTP-eseményindító, több dokumentum lekérése a DocumentClient használatával
A példák egy egyszerű ToDoItem
típusra vonatkoznak:
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-üzenet aktiválja. Az üzenetsor-eseményindító a JSON-t egy névvel ellátott ToDoItemLookup
objektumba elemzi, 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 HTTP-kérés aktiválja, amely útvonaladatokat használ a keresendő 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);
}
}
}
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 HTTP-kérés aktiválja, amely útvonaladatokat használ a keresendő 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);
}
}
}
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 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);
}
}
}
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 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 az DocumentDB
attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.
function.json tulajdonság | Attribútumtulajdonság | Leírás |
---|---|---|
type | n.a. | A beállításnak a documentdb következőnek kell lennie: . |
direction | n.a. | A beállításnak a in következőnek kell lennie: . |
név | n.a. | A függvény dokumentumát képviselő kötési paraméter neve. |
databaseName | DatabaseName | A dokumentumot tartalmazó adatbázis. |
collectionName | CollectionName | A dokumentumot tartalmazó gyűjtemény neve. |
id | Azonosító | A lekérni kívánt 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ágokat 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örnyezet-kötéseket, ahogyan 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ágokat 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 | Megadja a keresés partíciókulcs-értékét. Tartalmazhat kötési paramétereket. |
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.
Hozam
Az Azure Cosmos DB kimeneti kötésével ú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ó, dokumentumok írása a következő használatával:
IAsyncCollector
A példák egy egyszerű ToDoItem
típusra vonatkoznak:
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 adatok használatával.
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ó, dokumentumok í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 üzenetben 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 további információt a Kimenet – konfiguráció című témakörben talál. Í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)
{
...
}
Egy teljes példát a Kimenet című témakörben talál.
Kimenet – konfiguráció
Az alábbi táblázat a function.json fájlban és az DocumentDB
attribútumban beállított kötéskonfigurációs tulajdonságokat ismerteti.
function.json tulajdonság | Attribútumtulajdonság | Leírás |
---|---|---|
type | n.a. | A beállításnak a documentdb következőnek kell lennie: . |
direction | n.a. | A beállításnak a out következőnek kell lennie: . |
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. |
collectionName | CollectionName | Annak a gyűjteménynek a neve, amelyben a dokumentum létrejön. |
createIfNotExists | CreateIfNotExists | Logikai érték, amely jelzi, hogy a gyűjtemény akkor jön-e 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 oldalon 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 igaz, meghatározza a létrehozott gyűjtemény átviteli sebességét . |
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
.
Feljegyzé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 |