Effortlessly write data to Azure Cosmos DB from your Azure Functions.
Azure Functions provide powerful output bindings for Azure Cosmos DB, enabling you to easily persist data generated by your functions into your NoSQL databases. This simplifies your application development by abstracting away the complexities of database interactions.
The Cosmos DB output binding allows your function to write documents to a specified Cosmos DB collection. You can configure this binding to insert new documents or update existing ones based on your function's logic.
When you define a Cosmos DB output binding in your function's configuration, you specify:
out
for output bindings.Within your function code, you can then reference this binding to send data. The binding handles the creation of the document in Cosmos DB.
You can configure Cosmos DB output bindings in your function.json
file (for JavaScript, C#, Python, etc.) or via attributes in your code (for C#).
function.json
Configuration{ "bindings": [ { "name": "req", "type": "httpTrigger", "direction": "in", "methods": [ "post" ] }, { "name": "outputDocument", "type": "cosmosDB", "direction": "out", "databaseName": "MyDatabase", "collectionName": "MyCollection", "connectionStringSetting": "CosmosDBConnection" }, { "name": "res", "type": "http", "direction": "out" } ] }
[FunctionName("ProcessAndSaveData")] public static void ProcessAndSaveData( [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req, [CosmosDB( databaseName: "MyDatabase", collectionName: "MyCollection", ConnectionStringSetting = "CosmosDBConnection")] out dynamic outputDocument) { // ... function logic to populate outputDocument ... }
Once configured, you can easily write data to Cosmos DB.
module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); const newItem = { id: require('uuid').v4(), name: req.body.name, value: req.body.value, timestamp: new Date().toISOString() }; context.bindings.outputDocument = newItem; context.res = { status: 201, body: "Item added to Cosmos DB" }; };
using Microsoft.AspNetCore.Http; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Logging; public static class CosmosDbOutputFunction { [FunctionName("SaveToCosmosDb")] public static void SaveToCosmosDb( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, [CosmosDB( databaseName: "MyDatabase", collectionName: "MyCollection", ConnectionStringSetting = "CosmosDBConnection")] out dynamic outputDocument, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request to save to Cosmos DB."); string requestBody = new StreamReader(req.Body).ReadToEnd(); // Assuming requestBody is JSON representing the document var newItem = Newtonsoft.Json.JsonConvert.DeserializeObject(requestBody); // Ensure an ID is present for Cosmos DB if (newItem.id == null) { newItem.id = System.Guid.NewGuid().ToString(); } newItem.processedTimestamp = DateTime.UtcNow.ToString("o"); outputDocument = newItem; log.LogInformation($"Document with ID '{newItem.id}' prepared for Cosmos DB."); } }