Anslut Azure Functions att Azure Cosmos DB med Visual Studio Code
Med Azure Functions kan du ansluta Azure-tjänster och andra resurser till funktioner utan att behöva skriva din egen integrerings kod. Dessa bindningar, som representerar både indata och utdata, deklareras i funktions definitionen. Data från bindningar skickas som parametrar till funktionen. En utlösare är en särskild typ av ingående bindning. Även om en funktion bara har en utlösare, kan den ha flera indata och utdata-bindningar. Mer information finns i Azure Functions utlösare och bindningar begrepp.
Den här artikeln visar hur du använder Visual Studio Code för att Azure Cosmos DB till funktionen som du skapade i föregående snabbstartsartikel. Den utdatabindning som du lägger till i den här funktionen skriver data från HTTP-begäran till ett JSON-dokument som lagras i en Azure Cosmos DB container.
Innan du börjar måste du slutföra snabbstarten: Skapa en C#-funktion i Azure med hjälp Visual Studio Code. Om du redan rensade resurser i slutet av artikeln går du igenom stegen igen för att återskapa funktionsappen och relaterade resurser i Azure.
Innan du börjar måste du slutföra snabbstarten: Skapa en JavaScript-funktion i Azure med hjälp Visual Studio Code. Om du redan rensade resurser i slutet av artikeln går du igenom stegen igen för att återskapa funktionsappen och relaterade resurser i Azure.
Konfigurera din miljö
Innan du börjar måste du installera Tillägget Azure Databases för Visual Studio Code.
Skapa ditt Azure Cosmos DB konto
Viktigt
Azure Cosmos DB serverlös är nu allmänt tillgänglig. Det här förbrukningsbaserade läget gör Azure Cosmos DB ett starkt alternativ för serverlösa arbetsbelastningar. Om du Azure Cosmos DB i serverlöst läge väljer du Serverlös som Kapacitetsläge när du skapar ditt konto.
I Visual Studio Code väljer du Azure-ikonen i Aktivitetsfältet.
I området Azure: Databaser högerklickar du (Ctrl+klickar på macOS) i Azure-prenumerationen där du skapade funktionsappen i föregående artikel ochväljer Skapa server...
Ange följande information i meddelanderutorna:
Prompt Urval Välj en Azure Database-server Välj Core (SQL)att skapa en dokumentdatabas som du kan köra frågor mot med hjälp av SQL syntax. Läs mer om Azure Cosmos DB SQL API.Kontonamn Ange ett unikt namn som identifierar ditt Azure Cosmos DB-konto. Kontonamnet får bara använda gemener, siffror och bindestreck (-) och måste vara mellan 3 och 31 tecken långt. Välj en kapacitetsmodell Välj Serverlös för att skapa ett konto i serverlöst läge. Välj en resursgrupp för nya resurser Välj den resursgrupp där du skapade funktionsappen i föregående artikel. Välj en plats för nya resurser Välj en geografisk plats som värd för ditt Azure Cosmos DB-konto. Använd den plats som är närmast dig eller dina användare för att få den snabbaste åtkomsten till dina data. När ditt nya konto har etablerats visas ett meddelande i meddelandefältet.
Skapa en Azure Cosmos DB databas och container
Högerklicka på ditt konto och välj Skapa databas....
Ange följande information i meddelanderutorna:
Prompt Urval Databasnamn Skriv my-database.Ange och ID för din samling Skriv my-container.Ange partitionsnyckeln för samlingen Skriv /idsom partitionsnyckel.Välj OK för att skapa containern och databasen.
Uppdatera inställningarna för funktionsappen
I den föregående snabbstartsartikelnskapade du en funktionsapp i Azure. I den här artikeln uppdaterar du din app för att skriva JSON-dokument till Azure Cosmos DB container som du nyss skapade. Om du vill ansluta Azure Cosmos DB ditt konto måste du lägga till dess anslutningssträng i appinställningarna. Sedan laddar du ned den nya inställningen till filen local.settings.json så att du kan ansluta till ditt Azure Cosmos DB konto när du kör lokalt.
I Visual Studio Code högerklickar du (Ctrl+klickar på macOS) på ditt nya Azure Cosmos DB konto och väljer Kopiera anslutningssträng.
Tryck på F1 för att öppna kommandopaletten och sök sedan efter och kör kommandot
Azure Functions: Add New Setting....Välj den funktionsapp som du skapade i föregående artikel. Ange följande information i meddelanderutorna:
Prompt Urval Ange namnet på den nya appinställningen Skriv CosmosDbConnectionString.Ange värdet för "CosmosDbConnectionString" Klistra in anslutningssträngen för ditt Azure Cosmos DB som du nyss kopierade. Detta skapar en programinställning med namnet
CosmosDbConnectionStringanslutning i funktionsappen i Azure. Nu kan du ladda ned den här inställningen till filen local.settings.json.Tryck på F1 igen för att öppna kommandopaletten och sök sedan efter och kör kommandot
Azure Functions: Download Remote Settings....Välj den funktionsapp som du skapade i föregående artikel. Välj Ja om du vill skriva över de befintliga lokala inställningarna.
Då laddas alla inställningar ned från Azure till ditt lokala projekt, inklusive den nya inställningen för anslutningssträngen. De flesta av de nedladdade inställningarna används inte när du kör lokalt.
Registrera bindningstillägg
Eftersom du använder en Azure Cosmos DB-utdatabindning måste du ha motsvarande bindningstillägg installerat innan du kör projektet.
Med undantag för HTTP- och timerutlösare implementeras bindningar som tilläggspaket. Kör följande dotnet add package-kommando i terminalfönstret för att lägga Azure Cosmos DB tilläggspaketet i projektet.
dotnet add package Microsoft.Azure.WebJobs.Extensions.CosmosDB
Nu kan du lägga till lagringsutdatabindningen i projektet.
Projektet har konfigurerats för att använda tilläggspaketet, som automatiskt installerar en fördefinierad uppsättning tilläggspaket.
Användning av tilläggspaket är aktiverat i filen host.json i projektroten, som visas på följande sätt:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
}
}
Nu kan du lägga till Azure Cosmos DB-utdatabindningen i projektet.
Lägg till en utdatabindning
I Functions kräver varje typ av bindning direction en , och en unik för att type name definieras i filen function.json. Hur du definierar dessa attribut beror på funktionsappens språk.
I ett C#-klassbiblioteksprojekt definieras bindningarna som bindningsattribut för funktionsmetoden. Filen function.json som krävs av Functions genereras sedan automatiskt baserat på dessa attribut.
Öppna projektfilen HttpExample.cs och lägg till följande parameter i Run metoddefinitionen:
[CosmosDB(databaseName: "my-database", collectionName: "my-container",
ConnectionStringSetting = "CosmosDbConnectionString"
)]IAsyncCollector<dynamic> documentsOut,
Parametern documentsOut är en typ som representerar en samling JSON-dokument som skrivs till IAsyncCollector<T> din Azure Cosmos DB när funktionen har slutförts. Specifika attribut anger namnen på containern och dess överordnade databas. Anslutningssträngen för ditt Azure Cosmos DB konto anges av ConnectionStringSettingAttribute .
Specifika attribut anger namnet på containern och namnet på den överordnade databasen. Anslutningssträngen för ditt Azure Cosmos DB konto anges av CosmosDbConnectionString .
Bindningsattribut definieras direkt i function.json-filen. Beroende på bindningstypen kan ytterligare egenskaper krävas. Konfigurationen Azure Cosmos DB utdata beskriver de fält som krävs för en Azure Cosmos DB utdatabindning. Tillägget gör det enkelt att lägga till bindningar i filen function.json.
Om du vill skapa en bindning högerklickar du (Ctrl+klickar på macOS) filen i mappen function.json HttpTrigger och väljer Lägg till bindning.... Följ anvisningarna för att definiera följande bindningsegenskaper för den nya bindningen:
| Prompt | Värde | Beskrivning |
|---|---|---|
| Välj bindningsriktning | out |
Bindningen är en utdatabindning. |
| Välj bindning med riktningen "out" | Azure Cosmos DB |
Bindningen är en Azure Cosmos DB bindning. |
| Namnet som används för att identifiera bindningen i koden | outputDocument |
Namn som identifierar den bindningsparameter som koden refererar till. |
| Den Cosmos DB databas där data ska skrivas | my-database |
Namnet på den Azure Cosmos DB som innehåller målcontainern. |
| Databassamling där data ska skrivas | my-container |
Namnet på den Azure Cosmos DB där JSON-dokumenten ska skrivas. |
| Om värdet är true skapas Cosmos DB-databasen och -samlingen | false |
Måldatabasen och containern finns redan. |
| Välj inställning från "local.setting.json" | CosmosDbConnectionString |
Namnet på en programinställning som innehåller anslutningssträngen för Azure Cosmos DB konto. |
| Partitionsnyckel (valfritt) | lämna tomt | Krävs endast när utdatabindningen skapar containern. |
| Samlingsdataflöde (valfritt) | lämna tomt | Krävs endast när utdatabindningen skapar containern. |
En bindning läggs till i bindings matrisen i function.json, som bör se ut så här:
{
"type": "cosmosDB",
"direction": "out",
"name": "outputDocument",
"databaseName": "my-database",
"collectionName": "my-container",
"createIfNotExists": "false",
"connectionStringSetting": "CosmosDbConnectionString"
}
Lägg till kod som använder utdatabindning
Lägg till kod som använder documentsOut utdatabindningsobjektet för att skapa ett JSON-dokument. Lägg till den här koden innan metoden returnerar.
if (!string.IsNullOrEmpty(name))
{
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
}
Nu bör funktionen se ut så här:
[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[CosmosDB(
databaseName: "my-database",
collectionName: "my-container",
ConnectionStringSetting = "CosmosDbConnectionString")]IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
if (!string.IsNullOrEmpty(name))
{
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
}
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}. This HTTP triggered function executed successfully.";
return new OkObjectResult(responseMessage);
}
Lägg till kod som använder outputDocument utdatabindningsobjektet på context.bindings för att skapa ett JSON-dokument. Lägg till den här koden före context.res -instruktionen.
if (name) {
context.bindings.outputDocument = JSON.stringify({
// create a random ID
id: new Date().toISOString() + Math.random().toString().substr(2,8),
name: name
});
}
Nu bör funktionen se ut så här:
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully."
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
if (name) {
context.bindings.outputDocument = JSON.stringify({
// create a random ID
id: new Date().toISOString() + Math.random().toString().substr(2,8),
name: name
});
}
context.res = {
// status: 200, /* Defaults to 200 */
body: responseMessage
};
}
Den här koden returnerar nu MultiResponse ett -objekt som innehåller både ett dokument och ett HTTP-svar.
Köra funktionen lokalt
Visual Studio Koden integreras med Azure Functions Core-verktyg så att du kan köra det här projektet på din lokala utvecklingsdator innan du publicerar till Azure.
Du anropar funktionen genom att trycka på F5 för att starta funktionsappsprojektet. Utdata från Core Tools visas på panelen Terminal. Din app startar i terminalpanelen. Du kan se URL-slutpunkten för den HTTP-utlösta funktionen som körs lokalt.

Om du har problem med att Windows på en dator kontrollerar du att standardterminalen för Visual Studio Code inte är inställd på WSL Bash.
När Core Tools är igång går du till området Azure: Funktioner. Under Funktioner expanderar du Lokal Project > Functions. Högerklicka (välj Windows) eller Ctrl - klicka (macOS) på
HttpExamplefunktionen och välj Kör funktion nu....
I Enter request body (Ange begärandetext) trycker du på Retur för att skicka ett meddelande om begäran till funktionen.
När funktionen körs lokalt och returnerar ett svar utlöses ett meddelande i Visual Studio Code. Information om funktionskörningen visas i terminalpanelen.
Tryck på Ctrl + C för att stoppa Core Tools och koppla från felsökningsprogrammet.
Köra funktionen lokalt
Precis som i föregående artikel trycker du på F5 för att starta funktionsappsprojektet och Core Tools.
När Core Tools är igång går du till området Azure: Funktioner. Under Funktioner expanderar du Lokal Project > Functions. Högerklicka (Ctrl-klicka på Mac) på funktionen
HttpExampleoch välj Kör funktion nu....
I Ange begärandetext visas brödtextvärdet för begärandemeddelandet.
{ "name": "Azure" }Tryck på Retur för att skicka det här begärandemeddelandet till din funktion.När ett svar returneras trycker du på Ctrl + C för att stoppa Core Tools.
Kontrollera att ett JSON-dokument har skapats
På den Azure Portal går du tillbaka till ditt Azure Cosmos DB konto och väljer Datautforskaren.
Expandera databasen och containern och välj Objekt för att visa de dokument som skapats i containern.
Kontrollera att ett nytt JSON-dokument har skapats av utdatabindningen.
Distribuera om och verifiera den uppdaterade appen
I Visual Studio Code trycker du på F1 för att öppna kommandopaletten. I kommandopaletten söker du efter och väljer
Azure Functions: Deploy to function app....Välj den funktionsapp som du skapade i den första artikeln. Eftersom du omdistribuerar projektet till samma app väljer du Distribuera för att stänga varningen om att skriva över filer.
När distributionen är klar kan du använda funktionen Kör nu... igen för att utlösa funktionen i Azure.
Kontrollera återigen dokumenten som skapats i Azure Cosmos DB containern för att verifiera att utdatabindningen genererar ett nytt JSON-dokument igen.
Rensa resurser
I Azure refererar resurser till funktionsappar, funktioner, lagringskonton och så vidare. De grupperas i resursgrupper och du kan ta bort allt i en grupp genom att ta bort gruppen.
Du skapade resurser för att slutföra de här snabbstarterna. Det är möjligt att du debiteras för de här resurserna beroende på din kontostatus och dina servicepriser. Om du inte behöver resurserna längre så visar vi hur du tar bort dem här:
I Visual Studio Code, trycker du på F1 för att öppna kommando paletten. I paletten kommando söker du efter och väljer
Azure Functions: Open in portal.Välj Function-appen och tryck på RETUR. Sidan Function-appen öppnas i Azure Portal.
På fliken Översikt väljer du den namngivna länken bredvid resurs grupp.
Granska listan över resurser som ingår och verifiera att det är dem som du vill ta bort på sidan Resursgrupp.
Välj Ta bort resursgrupp och följ instruktionerna.
Borttagningen kan ta några minuter. När du är färdig visas ett meddelande i några sekunder. Du kan även välja klockikonen längst upp på sidan för att se meddelandet.
Nästa steg
Du har uppdaterat den HTTP-utlösta funktionen för att skriva JSON-dokument till en Azure Cosmos DB container. Nu kan du lära dig mer om att utveckla funktioner med Visual Studio Code: