Verbinding maken Azure Functions voor Azure Cosmos DB met behulp van Visual Studio Code

Met Azure Functions kunt u Azure-services en andere resource verbinden met services zonder dat u zelf integratiecode moet schrijven. Deze zogenaamde bindingen, die zowel invoer als uitvoer vertegenwoordigen, worden gedeclareerd binnen de functiedefinitie. Gegevens van bindingen worden als parameters doorgegeven aan de functie. Een trigger is een speciaal type invoerbinding. Hoewel een functie slechts één trigger heeft, kan deze meerdere invoer- en uitvoerbindingen hebben. Zie Azure Functions triggers and bindings concepts (Concepten van Azure Functions-triggers en -bindingen) voor meer informatie.

In dit artikel wordt beschreven hoe u Visual Studio code gebruikt om verbinding Azure Cosmos DB maken met de functie die u in het vorige quickstart-artikel hebt gemaakt. De uitvoerbinding die u aan deze functie toevoegt, schrijft gegevens van de HTTP-aanvraag naar een JSON-document dat is opgeslagen in een Azure Cosmos DB container.

Voordat u begint, moet u de quickstart: Een C#-functie in Azure makenmet behulp van Visual Studio Code. Als u de resources na voltooiing van dat artikel al had opgeruimd, doorloopt u de stappen voor het maken van de functie-app en de bijbehorende resources opnieuw in Azure.

Voordat u begint, moet u de quickstart: Een JavaScript-functie in Azure makenmet behulp van Visual Studio Code . Als u de resources na voltooiing van dat artikel al had opgeruimd, doorloopt u de stappen voor het maken van de functie-app en de bijbehorende resources opnieuw in Azure.

Uw omgeving configureren

Voordat u aan de slag gaat, moet u de Azure Databases-extensie voor Visual Studio Code installeren.

Uw Azure Cosmos DB maken

Belangrijk

Azure Cosmos DB serverloos is nu algemeen beschikbaar. Deze op verbruik gebaseerde modus maakt Azure Cosmos DB een sterke optie voor serverloze workloads. Als u Azure Cosmos DB serverloze modus wilt gebruiken, kiest u Serverloos als capaciteitsmodus bij het maken van uw account.

  1. Kies Visual Studio Code het pictogram Azure in de activiteitenbalk.

  2. Klik in het gebied Azure: Databases met de rechtermuisknop (Ctrl+klik op macOS) op het Azure-abonnement waar u de functie-app in het vorige artikel hebt gemaakt en selecteer Server maken...

    Een nieuw account Azure Cosmos DB maken op Visual Studio code

  3. Geef de volgende informatie op bij de prompts:

    Prompt Selectie
    Een Azure Database-server selecteren Kies Core (SQL) ervoor om een documentdatabase te maken die u kunt opvragen met behulp van een SQL syntaxis. Meer informatie over de Azure Cosmos DB SQL API.
    Accountnaam Voer een unieke naam in om uw Azure Cosmos DB-account te identificeren. De accountnaam moet tussen de 3 en 31 tekens lang zijn en mag alleen kleine letters, cijfers en afbreekstreepjes bevatten.
    Een capaciteitsmodel selecteren Selecteer Serverloos om een account te maken in de modus serverloos.
    Selecteer een resourcegroep voor nieuwe resources Kies de resourcegroep waarin u de functie-app in het vorige artikel hebt gemaakt.
    Een locatie voor nieuwe resources selecteren Selecteer een geografische locatie waar u het Azure Cosmos DB-account wilt hosten. Gebruik de locatie die het dichtst bij u of uw gebruikers ligt om de snelste toegang tot uw gegevens te krijgen.

    Nadat uw nieuwe account is ingericht, wordt er een bericht weergegeven in het systeemgebied.

Een database Azure Cosmos DB container maken

  1. Klik met de rechtermuisknop op uw account en selecteer Database maken....

  2. Geef de volgende informatie op bij de prompts:

    Prompt Selectie
    Databasenaam Typ my-database.
    Voer en id in voor uw verzameling Typ my-container.
    Voer de partitiesleutel voor de verzameling in Typ /id als de partitiesleutel.
  3. Selecteer OK om de container en database te maken.

De instellingen van uw functie-app bijwerken

In het vorige quickstart-artikel hebtu een functie-app gemaakt in Azure. In dit artikel gaat u uw app bijwerken om JSON-documenten te schrijven naar Azure Cosmos DB container die u zojuist hebt gemaakt. Als u verbinding wilt maken met Azure Cosmos DB-account, moet u de connection string toevoegen aan uw app-instellingen. Vervolgens downloadt u de nieuwe instelling naar het bestand local.settings.json, zodat u verbinding kunt maken met uw Azure Cosmos DB-account wanneer u lokaal wordt uitgevoerd.

  1. Klik Visual Studio Code met de rechtermuisknop (Ctrl+klik op macOS) op uw nieuwe Azure Cosmos DB-account en selecteer Verbindingsreeks kopiëren.

    De Azure Cosmos DB connection string

  2. Druk op F1 om het opdrachtenpalet te openen, zoek en voer de opdracht Azure Functions: Add New Setting... uit.

  3. Kies de functie-app die u in het vorige artikel hebt gemaakt. Geef de volgende informatie op bij de prompts:

    Prompt Selectie
    Naam van nieuwe app-instelling invoeren Typ CosmosDbConnectionString.
    Voer de waarde in voor 'CosmosDbConnectionString' Plak de connection string van uw Azure Cosmos DB account dat u zojuist hebt gekopieerd.

    Hiermee maakt u een toepassingsinstelling met de naam verbinding CosmosDbConnectionString in uw functie-app in Azure. U kunt deze instelling nu downloaden naar het bestand local.settings.json.

  4. Druk nogmaals op F1 om het opdrachtenpalet te openen, zoek en voer de opdracht Azure Functions: Download Remote Settings... uit.

  5. Kies de functie-app die u in het vorige artikel hebt gemaakt. Selecteer Ja op alle om de bestaande lokale instellingen te overschrijven.

Hiermee downloadt u alle instellingen van Azure naar uw lokale project, met inbegrip van de nieuwe connection string instelling. De meeste gedownloade instellingen worden niet gebruikt wanneer ze lokaal worden uitgevoerd.

Binding-extensies registreren

Omdat u een uitvoerbinding Azure Cosmos DB, moet u de bijbehorende bindingsextensie hebben geïnstalleerd voordat u het project kunt uitvoeren.

Met uitzondering van HTTP- en timertriggers worden bindingen geïmplementeerd als uitbreidingspakketten. Voer de volgende dotnet add package-opdracht uit in het terminalvenster om het Azure Cosmos DB-extensiepakket toe te voegen aan uw project.

dotnet add package Microsoft.Azure.WebJobs.Extensions.CosmosDB 

Nu kunt u de Storage-uitvoerbinding toevoegen aan uw project.

Uw project is geconfigureerd voor het gebruik van uitbreidingsbundels, waarmee automatisch een vooraf gedefinieerde set uitbreidingspakketten wordt geïnstalleerd.

Het gebruik van uitbreidingsbundels wordt ingeschakeld in het bestand host.json in de hoofdmap van het project, dat er als volgt uitziet:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  } 
}

U kunt nu de uitvoerbinding Azure Cosmos DB project toevoegen.

Een uitvoerbinding toevoegen

In functies moet voor elk type binding een direction, typeen een unieke name worden gedefinieerd in het bestand function.json. De manier waarop u deze kenmerken definieert, is afhankelijk van de taal van uw functie-app.

In een bibliotheekproject van de C#-klasse worden de bindingen gedefinieerd als bindingseigenschappen in de functiemethode. Het bestand function.json dat wordt vereist door Functions, wordt automatisch gegenereerd op basis van deze kenmerken.

Open het projectbestand HttpExample.cs en voeg de volgende parameter toe aan de methodedefinitie Run:

[CosmosDB(databaseName: "my-database", collectionName: "my-container",
    ConnectionStringSetting = "CosmosDbConnectionString"
    )]IAsyncCollector<dynamic> documentsOut,

De parameter is een type, dat een verzameling JSON-documenten vertegenwoordigt die naar uw Azure Cosmos DB container worden geschreven documentsOut wanneer de functie is IAsyncCollector<T> voltooid. Specifieke kenmerken geven de namen van de container en de bovenliggende database aan. De connection string voor uw Azure Cosmos DB-account wordt ingesteld door de ConnectionStringSettingAttribute .

Specifieke kenmerken geven de naam van de container en de naam van de bovenliggende database op. De connection string voor uw Azure Cosmos DB-account wordt ingesteld door de CosmosDbConnectionString .

Bindingskenmerken worden rechtstreeks in het bestand function.json gedefinieerd. Afhankelijk van het type binding zijn er aanvullende eigenschappen vereist. In Azure Cosmos DB uitvoerconfiguratie worden de velden beschreven die zijn vereist voor een Azure Cosmos DB uitvoerbinding. De extensie maakt het eenvoudig om bindingen toe te voegen aan het bestand function.json.

Als u een binding wilt maken, klikt u met de rechtermuisknop (ctrl + klik op macOS) op het bestand function.json in uw HttpTrigger-map en kiest u Binding toevoegen... . Volg de aanwijzingen om de volgende bindingseigenschappen te definiëren voor de nieuwe binding:

Vraag Waarde Beschrijving
Bindingsrichting selecteren out De binding is een uitvoerbinding.
Binding met richting 'uit' selecteren Azure Cosmos DB De binding is een Azure Cosmos DB binding.
De naam voor het identificeren van deze binding in uw code outputDocument Naam die de bindingsparameter identificeert waar in uw code naar wordt verwezen.
De Cosmos DB database waarin gegevens worden geschreven my-database De naam van de Azure Cosmos DB database met de doelcontainer.
Databaseverzameling waarin gegevens worden geschreven my-container De naam van de Azure Cosmos DB container waarin de JSON-documenten worden geschreven.
Indien waar, worden de Cosmos-DB-database en -verzameling gemaakt false De doeldatabase en container bestaan al.
Selecteer de instelling in 'local.setting.json' CosmosDbConnectionString De naam van een toepassingsinstelling die de connection string voor het Azure Cosmos DB account.
Partitiesleutel (optioneel) leeg laten Alleen vereist wanneer de uitvoerbinding de container maakt.
Verzamelingsdoorvoer (optioneel) leeg laten Alleen vereist wanneer de uitvoerbinding de container maakt.

Er wordt een binding toegevoegd aan de matrix bindings in uw function.json, die er als volgt uit hoort te zien:

{
    "type": "cosmosDB",
    "direction": "out",
    "name": "outputDocument",
    "databaseName": "my-database",
    "collectionName": "my-container",
    "createIfNotExists": "false",
    "connectionStringSetting": "CosmosDbConnectionString"
}

Code toevoegen die gebruikmaakt van de uitvoerbinding

Voeg code toe die gebruikmaakt van documentsOut het uitvoerbindingsobject om een JSON-document te maken. Voeg deze code toe voordat de methode wordt geretourneerd.

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

Op dit moment moet uw functie er als volgt uit zien:

[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);
}

Voeg code toe die gebruikmaakt van outputDocument het uitvoerbindingsobject op context.bindings om een JSON-document te maken. Voeg deze code toe vóór de instructie context.res.

if (name) {
    context.bindings.outputDocument = JSON.stringify({
        // create a random ID
        id: new Date().toISOString() + Math.random().toString().substr(2,8),
        name: name
    });
}

Op dit moment moet uw functie er als volgt uit zien:

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
    };
}

Deze code retourneert nu MultiResponse een -object dat zowel een document als een HTTP-antwoord bevat.

De functie lokaal uitvoeren

Visual Studio Code integreert met Azure Functions Core Tools om u een project te laten uitvoeren vanaf uw lokale ontwikkelaarscomputer voordat u in Azure publiceert.

  1. Druk op F5 om het functie-app-project te starten en uw functie aan te roepen. De uitvoer van Core Tools wordt weergegeven in het deelvenster Terminal. Uw app wordt gestart in het deelvenster Terminal. Kopieer het URL-eindpunt van uw functie die lokaal wordt uitgevoerd en door HTTP is geactiveerd.

    Lokale functie versus code-uitvoer

    Als u problemen ondervindt met het uitvoeren op Windows, moet u ervoor zorgen dat de standaardterminal voor Visual Studio Code niet is ingesteld op WSL Bash.

  2. Als Core Tools actief is, gaat u naar het gebied Azure: Functions. Vouw onder Functies lokaal Project > Functies uit. Klik met de rechtermuisknop (Windows) of Ctrl- klik (macOS) op de functie en HttpExample kies Functie nu uitvoeren....

    Functie nu uitvoeren vanuit Visual Studio Code

  3. Druk in Aanvraag body invoeren op Enter om een aanvraagbericht naar uw functie te verzenden.

  4. Wanneer de functie lokaal wordt uitgevoerd en een antwoord retourneert, wordt er een melding in Visual Studio code. Informatie over de uitvoering van de functie wordt weergegeven in het deelvenster Terminal.

  5. Druk op CTRL + C om Core Tools te stoppen en de verbinding met het foutopsporingsprogramma te verbreken.

De functie lokaal uitvoeren

  1. Druk, net als in het vorige artikel, op F5 om het functie-app-project en Core Tools te starten.

  2. Als Core Tools actief is, gaat u naar het gebied Azure: Functions. Vouw onder Functies de functie Lokaal Project > functies uit. Klik met de rechtermuisknop op de functie (Ctrl-klik op Mac) HttpExample en kies Functie nu uitvoeren....

    Functie nu uitvoeren vanuit Visual Studio Code

  3. In Aanvraag body invoeren ziet u de berichtwaarde van de aanvraag van { "name": "Azure" } . Druk op Enter om dit aanvraagbericht naar uw functie te verzenden.

  4. Nadat een antwoord is geretourneerd, drukt u op Ctrl + C om Core Tools te stoppen.

Controleren of er een JSON-document is gemaakt

  1. Ga op Azure Portal pagina terug naar uw Azure Cosmos DB account en selecteer Data Explorer.

  2. Vouw uw database en container uit en selecteer Items om de documenten weer te geven die in uw container zijn gemaakt.

  3. Controleer of er een nieuw JSON-document is gemaakt door de uitvoerbinding.

    Controleren of er een nieuw document is gemaakt in de Azure Cosmos DB container

De bijgewerkte app opnieuw implementeren en verifiëren

  1. Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Deploy to function app....

  2. Kies de functie-app die u in het eerste artikel hebt gemaakt. Omdat u uw project opnieuw implementeert voor dezelfde app, selecteert u Implementeren om de waarschuwing over het overschrijven van bestanden te negeren.

  3. Nadat de implementatie is voltooid, kunt u opnieuw de functie Nu uitvoeren gebruiken om de functie in Azure te activeren.

  4. Controleer opnieuw de documenten die zijn gemaakt in Azure Cosmos DB container om te controleren of de uitvoerbinding opnieuw een nieuw JSON-document genereert.

Resources opschonen

In Azure verwijzen Resources naar functie-apps, functies, opslagaccounts enzovoort. Deze zijn gegroepeerd in resourcegroepen. U kunt alle resources in een groep verwijderen door de groep zelf te verwijderen.

U hebt resources gemaakt om deze snelstartgidsen te voltooien. Deze resources kunnen bij u in rekening worden gebracht, afhankelijk van de accountstatus en serviceprijzen. Als u de resources niet meer nodig hebt, kunt u ze als volgt verwijderen:

  1. Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen. In het opdrachtenpalet zoekt en selecteert u Azure Functions: Open in portal.

  2. Kies uw functie-app en druk op Enter. De functie-app wordt geopend in de Azure-portal.

  3. Selecteer op het tabblad Overzicht de benoemde koppeling naast Resourcegroep.

    Selecteer op de pagina Functie-app de resourcegroep die u wilt verwijderen.

  4. Bekijk op de pagina Resourcegroep de lijst met opgenomen resources en controleer of dit de resources zijn die u wilt verwijderen.

  5. Selecteer Resourcegroep verwijderen en volg de instructies.

    Verwijderen kan enkele minuten duren. Wanneer dit is voltooid, verschijnt een aantal seconden een melding in beeld. U kunt ook het belpictogram boven aan de pagina selecteren om de melding te bekijken.

Volgende stappen

U hebt de http-geactiveerde functie bijgewerkt om JSON-documenten te schrijven naar Azure Cosmos DB container. Nu kunt u meer informatie vinden over het ontwikkelen van functies met Visual Studio Code: