Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart gebruikt u Visual Studio Code om een app te bouwen die reageert op databasewijzigingen in een No SQL-database in Azure Cosmos DB. Nadat u de code lokaal hebt getest, implementeert u deze in een nieuwe serverloze functie-app die u maakt in een Flex Consumption-abonnement in Azure Functions.
De projectbron maakt gebruik van de extensie Azure Developer CLI (azd) met Visual Studio Code om het initialiseren en verifiëren van uw projectcode lokaal te vereenvoudigen en uw code te implementeren op Azure. Deze implementatie volgt de huidige aanbevolen procedures voor veilige en schaalbare Azure Functions-implementaties.
Hoewel het Flex Consumption-abonnement een pay-for-what-you-use factureringsmodel volgt, maakt dit codeproject extra Azure resources, waaronder een Azure Cosmos DB exemplaar. Zorg ervoor dat u resources opruimt als u klaar bent, om doorlopende kosten te voorkomen.
Dit artikel ondersteunt versie 4 van het Node.js programmeermodel voor Azure Functions.
Dit artikel ondersteunt versie 2 van het Python-programmeermodel voor Azure Functions.
Vereiste voorwaarden
Een Azure-account met een actief abonnement. Gratis een account maken
Visual Studio Code op een van de ondersteunde platforms.
De Azure Functions-extensie voor Visual Studio Code. Voor deze extensie zijn Azure Functions Core Tools vereist. Wanneer dit hulpprogramma niet lokaal beschikbaar is, probeert de extensie het te installeren met behulp van een installatieprogramma op basis van een pakket. U kunt het Core Tools-pakket ook installeren of bijwerken door het opdrachtpalet uit te voeren
Azure Functions: Install or Update Azure Functions Core Tools. Als u npm of Homebrew niet op uw lokale computer hebt geïnstalleerd, moet u Core Tools handmatig installeren of bijwerken.
C#-extensie voor Visual Studio Code.
De Java Development Kit, versie 8, 11, 17 of 21 (Linux).
Apache Maven, versie 3.0 of hoger.
-
Node.js 22.x of hoger. Gebruik de opdracht
node --versionom uw versie te controleren.
Python-versies die worden ondersteund door Azure Functions. Zie Python installeren voor meer informatie.
De Python-extensie voor Visual Studio Code.
- De Azure Developer CLI-extensie voor Visual Studio Code.
Het project initialiseren
Gebruik de Azure Developer CLI (azd) om een lokaal Azure Functions codeproject te maken op basis van een sjabloon.
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-dotnet-azd-cosmosdb -e cosmosdbchanges-dotnetMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-dotnet-azd-cosmosdb
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-java-azd-cosmosdb -e cosmosdbchanges-javaMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-java-azd-cosmosdb
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-javascript-azd-cosmosdb -e cosmosdbchanges-jsMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-javascript-azd-cosmosdb
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-powershell-azd-cosmosdb -e cosmosdbchanges-psMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-powershell-azd-cosmosdb
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-typescript-azd-cosmosdb -e cosmosdbchanges-tsMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-typescript-azd-cosmosdb
Voer vanuit een terminal deze
azd initopdracht uit om een lokaal project te maken op basis van de sjabloon:azd init --template functions-quickstart-python-azd-cosmosdb -e cosmosdbchanges-pyMet deze opdracht worden de projectbestanden opgehaald uit de template-opslagplaats en wordt het project geïnitialiseerd in een nieuwe map. In
azdwordt de omgeving gebruikt om een unieke implementatiecontext voor uw app te onderhouden en kunt u meer dan één definiëren. Het maakt ook deel uit van de naam van de resourcegroep die u in Azure maakt.Wijzig naar de projectmap:
cd functions-quickstart-python-azd-cosmosdb
Voer deze opdracht uit, afhankelijk van uw lokale besturingssysteem, om configuratiescripts de vereiste machtigingen te verlenen:
Voer deze opdracht uit met voldoende bevoegdheden:
chmod +x ./infra/scripts/*.shOpen het project in Visual Studio Code:
code .
Voordat u uw app lokaal kunt uitvoeren, moet u de resources in Azure maken. In dit project wordt geen lokale emulatie gebruikt voor Azure Cosmos DB.
Azure-resources maken
Dit project is geconfigureerd voor het gebruik van de opdracht voor het azd provision maken van een functie-app in een Flex Consumption-abonnement, samen met andere vereiste Azure-resources die voldoen aan de huidige aanbevolen procedures.
Druk in Visual Studio Code op F1 om het opdrachtenpalet te openen, de opdracht
Azure Developer CLI (azd): Sign In with Azure Developer CLIte zoeken en uit te voeren en meld u aan met uw Azure-account.Druk op F1 om het opdrachtenpalet te openen, de opdracht
Azure Developer CLI (azd): Provision Azure resources (provision)te zoeken en uit te voeren om de vereiste Azure-resources te maken:Wanneer u hierom wordt gevraagd in het terminalvenster, geeft u de volgende vereiste implementatieparameters op:
Snel Description Selecteer een Azure-abonnement dat u wilt gebruiken Kies de abonnement waarin u uw bronnen wilt maken. locatie-implementatieparameter Azure-regio waarin de resourcegroep moet worden gemaakt die de nieuwe Azure-resources bevat. Alleen regio's die momenteel ondersteuning bieden voor het Flex Consumption-abonnement, worden weergegeven. vnetEnabled-implementatieparameter Hoewel de sjabloon ondersteuning biedt voor het maken van resources in een virtueel netwerk, kiest u Falseom de implementatie en het testen te vereenvoudigen.De
azd provisionopdracht gebruikt uw reactie op deze prompts met de Bicep-configuratiebestanden om deze vereiste Azure-resources te maken en te configureren, volgens de meest recente aanbevolen procedures:- Flex Consumption-abonnement en functie-app
- Azure Cosmos DB-account
- Azure Storage (vereist) en Application Insights (aanbevolen)
- Toegangsbeleid en rollen voor uw account
- Verbindingen tussen services met beheerde identiteiten (in plaats van opgeslagen verbindingsreeksen)
Post-provision hooks genereren ook het local.settings.json-bestand dat is vereist bij het lokaal uitvoeren. Dit bestand bevat ook de instellingen die nodig zijn om verbinding te maken met uw Azure Cosmos DB-database in Azure.
Aanbeveling
Als eventuele stappen mislukken tijdens het inrichten, kunt u de
azd provisionopdracht opnieuw uitvoeren nadat u eventuele problemen hebt opgelost.Nadat de opdracht is voltooid, kunt u uw projectcode lokaal uitvoeren en activeren op de Azure Cosmos DB-database in Azure.
De functie lokaal uitvoeren
Visual Studio Code kan worden geïntegreerd met Azure Functions Core-hulpprogramma's waarmee u dit project kunt uitvoeren op uw lokale ontwikkelcomputer voordat u publiceert naar uw nieuwe functie-app in Azure.
Druk op F1 en zoek en voer de opdracht
Azurite: Startuit in het opdrachtenpalet.Als u de functie lokaal wilt starten, drukt u op F5 of het pictogram Uitvoeren en foutopsporing in de activiteitenbalk aan de linkerkant. In het terminalvenster wordt de uitvoer van Core Tools weergegeven. Uw app wordt gestart in het terminalvenster en u ziet de naam van de functie die lokaal wordt uitgevoerd.
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.
Als Core Tools nog steeds wordt uitgevoerd in Terminal, drukt u op F1 en zoekt en voert u de opdracht
NoSQL: Create Item...uit en selecteert u zowel dedocument-dbdatabase als dedocumentscontainer.Vervang de inhoud van het bestand New Item.json door deze JSON-gegevens en selecteer Opslaan:
{ "id": "doc1", "title": "Sample document", "content": "This is a sample document for testing my Azure Cosmos DB trigger in Azure Functions." }Nadat u Opslaan hebt geselecteerd, ziet u de uitvoering van de functie in de terminal en wordt het lokale document bijgewerkt met metagegevens die door de service zijn toegevoegd.
Wanneer u klaar bent, drukt u op Ctrl+C in het terminalvenster om het
func.exehostproces te stoppen.
De code bekijken (optioneel)
De functie wordt geactiveerd op basis van de wijzigingenfeed in een Azure Cosmos DB NoSQL-database.
Deze omgevingsvariabelen configureren hoe de trigger de wijzigingenfeed bewaakt:
-
COSMOS_CONNECTION__accountEndpoint: Het Eindpunt van het Cosmos DB-account -
COSMOS_DATABASE_NAME: De naam van de database die moet worden bewaakt -
COSMOS_CONTAINER_NAME: De naam van de container die moet worden bewaakt
Deze omgevingsvariabelen worden zowel in Azure (functie-app-instellingen) als lokaal (local.settings.json) gemaakt tijdens de azd provision bewerking.
De COSMOS_CONNECTION omgevingsvariabele configureert het Cosmos DB-accounteindpunt dat door de trigger wordt gebruikt. Deze omgevingsvariabele wordt zowel in Azure (functie-app-instellingen) als lokaal (local.settings.json) gemaakt tijdens de bewerking azd provision. De namen van de database en container worden gedefinieerd in de triggerconfiguratie.
U kunt de code controleren waarmee de Azure Cosmos DB-trigger wordt gedefinieerd:
using System;
using System.Collections.Generic;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
namespace Company.Function
{
public class CosmosTrigger
{
private readonly ILogger _logger;
public CosmosTrigger(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<CosmosTrigger>();
}
[Function("cosmos_trigger")]
public void Run([CosmosDBTrigger(
databaseName: "%COSMOS_DATABASE_NAME%",
containerName: "%COSMOS_CONTAINER_NAME%",
Connection = "COSMOS_CONNECTION",
LeaseContainerName = "leases",
CreateLeaseContainerIfNotExists = true)] IReadOnlyList<MyDocument> input)
{
if (input != null && input.Count > 0)
{
_logger.LogInformation("Documents modified: " + input.Count);
_logger.LogInformation("First document Id: " + input[0].id);
}
}
}
public class MyDocument
{
/// <summary>
/// The unique identifier for the document.
/// </summary>
public required string id { get; set; }
/// <summary>
/// A text field in the document.
/// </summary>
public required string Text { get; set; }
/// <summary>
/// A numeric field in the document.
/// </summary>
public int Number { get; set; }
/// <summary>
/// A boolean field in the document.
/// </summary>
public bool Boolean { get; set; }
}
}
U kunt het volledige sjabloonproject bekijken here.
package com.function;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.CosmosDBTrigger;
import com.microsoft.azure.functions.annotation.FunctionName;
public class CosmosTrigger {
@FunctionName("cosmos_trigger")
public void run(
@CosmosDBTrigger(
name = "input",
databaseName = "%COSMOS_DATABASE_NAME%",
containerName = "%COSMOS_CONTAINER_NAME%",
connection = "COSMOS_CONNECTION",
leaseContainerName = "leases",
createLeaseContainerIfNotExists = true
) Object[] items,
final ExecutionContext context
) {
if (items != null && items.length > 0) {
context.getLogger().info("Documents modified: " + items.length);
context.getLogger().info("First document Id: " + items[0].toString());
}
}
}
U kunt het volledige sjabloonproject bekijken here.
const { app } = require('@azure/functions');
app.cosmosDB('cosmos_trigger', {
connection: 'COSMOS_CONNECTION',
databaseName: '%COSMOS_DATABASE_NAME%',
containerName: '%COSMOS_CONTAINER_NAME%',
leaseContainerName: 'leases',
createLeaseContainerIfNotExists: true,
handler: (documents, context) => {
if (documents && documents.length > 0) {
context.log(`Documents modified: ${documents.length}`);
context.log(`First document Id: ${documents[0].id}`);
}
}
});
U kunt het volledige sjabloonproject bekijken here.
import { app, InvocationContext } from "@azure/functions";
export async function cosmos_trigger(documents: unknown[], context: InvocationContext): Promise<void> {
context.log(`Cosmos DB function processed ${documents.length} documents`);
if (documents && documents.length > 0) {
for (const doc of documents) {
context.log(`First document: ${JSON.stringify(doc)}`);
if (doc && typeof doc === "object" && "id" in doc) {
context.log(`First document id: ${(doc as { id?: string }).id}`);
}
}
} else {
context.log("No documents found.");
}
}
app.cosmosDB('cosmos_trigger', {
connection: 'COSMOS_CONNECTION',
databaseName: 'documents-db',
containerName: 'documents',
createLeaseContainerIfNotExists: true,
handler: cosmos_trigger
});
U kunt het volledige sjabloonproject bekijken here.
De trigger wordt gedefinieerd in dit function.json bestand:
{
"bindings": [
{
"type": "cosmosDBTrigger",
"name": "InputDocuments",
"direction": "in",
"databaseName": "%COSMOS_DATABASE_NAME%",
"containerName": "%COSMOS_CONTAINER_NAME%",
"connection": "COSMOS_CONNECTION",
"leaseContainerName": "leases",
"createLeaseContainerIfNotExists": true
}
]
}
De volgende code wordt uitgevoerd wanneer de trigger wordt uitgevoerd:
param($InputDocuments, $TriggerMetadata)
if ($InputDocuments -and $InputDocuments.Count -gt 0) {
Write-Host "Documents modified: $($InputDocuments.Count)"
Write-Host "First document Id: $($InputDocuments[0].id)"
}
U kunt het volledige sjabloonproject bekijken here.
import os
import azure.functions as func
import logging
app = func.FunctionApp()
@app.cosmos_db_trigger(
arg_name="documents",
container_name=os.environ.get("COSMOS_CONTAINER_NAME"),
database_name=os.environ.get("COSMOS_DATABASE_NAME"),
connection="COSMOS_CONNECTION",
create_lease_container_if_not_exists="true",
)
def cosmos_trigger(documents: func.DocumentList):
logging.info("Python CosmosDB triggered.")
logging.info(f"Documents modified: {len(documents)}")
if documents:
for doc in documents:
logging.info(f"First document: {doc.to_json()}")
logging.info(f"First document id: {doc.get('id')}")
else:
logging.info("No documents found.")
U kunt het volledige sjabloonproject bekijken here.
Nadat u uw functiecode lokaal hebt beoordeeld en gecontroleerd, is het tijd om het project te publiceren op Azure.
Implementeren in Azure
U kunt de azd deploy opdracht uitvoeren vanuit Visual Studio Code om de projectcode te implementeren in uw al ingerichte resources in Azure.
Druk op F1 om het commandopalet te openen.
Zoek en voer de opdracht
Azure Developer CLI (azd): Deploy to Azure (deploy)uit.Met de
azd deployopdracht wordt uw code in de implementatiecontainer verpakt en geïmplementeerd. De app wordt vervolgens gestart en uitgevoerd in het geïmplementeerde pakket.Nadat de opdracht is voltooid, wordt uw app uitgevoerd in Azure.
De functie aanroepen in Azure
Druk in Visual Studio Code op F1 en zoek en voer de opdracht
Azure: Open in portaluit in het opdrachtenpalet, selecteerFunction appen kies uw nieuwe app. Meld u indien nodig aan met uw Azure-account.Met deze opdracht opent u uw nieuwe functie-app in Azure Portal.
Selecteer op het tabblad Overzicht op de hoofdpagina de naam van uw functie-app en vervolgens het tabblad Logboeken .
Gebruik de
NoSQL: Create Itemopdracht in Visual Studio Code om opnieuw een document toe te voegen aan de container zoals voorheen.Controleer opnieuw of de functie wordt geactiveerd door een update in de bewaakte container.
Uw code opnieuw implementeren
U kunt de azd deploy opdracht zo vaak uitvoeren als nodig is om code-updates te implementeren in uw functie-app.
Opmerking
Geïmplementeerde codebestanden worden altijd overschreven door het nieuwste implementatiepakket.
Uw eerste antwoorden op prompts van azd en eventuele omgevingsvariabelen die door azd worden gegenereerd, worden lokaal opgeslagen in uw benoemde omgeving. Gebruik de azd env get-values opdracht om alle variabelen in uw omgeving te controleren die zijn gebruikt bij het maken van Azure-resources.
De hulpbronnen opschonen
Wanneer u klaar bent met het werken met uw functie-app en gerelateerde resources, kunt u deze opdracht gebruiken om de functie-app en de bijbehorende resources uit Azure te verwijderen en eventuele verdere kosten te voorkomen:
azd down --no-prompt
Opmerking
Met de --no-prompt optie krijgt u de opdracht azd om uw resourcegroep te verwijderen zonder een bevestiging van u.
Deze opdracht heeft geen invloed op uw lokale codeproject.