Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
mit Azure Functions können Sie Azure Dienste und andere Ressourcen mit Funktionen verbinden, ohne ihren eigenen Integrationscode schreiben zu müssen. Diese Bindungen, die sowohl Eingabe als auch Ausgabe darstellen, werden innerhalb der Funktionsdefinition deklariert. Daten von Bindungen werden der Funktion als Parameter bereitgestellt. Ein Trigger ist ein spezieller Typ von Eingabebindung. Eine Funktion hat zwar nur einen Trigger, kann aber mehrere Ein- und Ausgabebindungen haben. Weitere Informationen finden Sie unter Azure Functions Trigger und Bindungen Konzepte.
In diesem Artikel erfahren Sie, wie Sie Visual Studio Code verwenden, um Azure Cosmos DB mit der Funktion zu verbinden, die Sie im vorherigen Schnellstartartikel erstellt haben. Die Ausgabebindung, die Sie dieser Funktion hinzufügen, schreibt Daten aus der HTTP-Anforderung in ein JSON-Dokument, das in einem Azure Cosmos DB-Container gespeichert ist.
Bevor Sie beginnen, müssen Sie den Schnellstart: Erstellen einer C#-Funktion in Azure mit Visual Studio Code abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.
Bevor Sie beginnen, müssen Sie den Schnellstart: Erstellen einer JavaScript-Funktion in Azure mit Visual Studio Code abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.
Hinweis
Dieser Artikel unterstützt Node.js v4 für Funktionen.
Bevor Sie beginnen, müssen Sie den Schnellstart: Erstellung einer Python-Funktion in Azure mithilfe von Visual Studio Code abschließen. Wenn Sie ressourcen bereits am Ende dieses Artikels bereinigt haben, führen Sie die Schritte erneut durch, um die Funktions-App und die zugehörigen Ressourcen in Azure neu zu erstellen.
Konfigurieren Ihrer Umgebung
Bevor Sie anfangen, stellen Sie sicher, dass Sie die Erweiterung Azure Databases für Visual Studio Code installiert haben.
Erstellen Ihres Azure Cosmos DB-Kontos
Jetzt erstellen Sie ein Azure Cosmos DB-Konto als serverlose Kontotyp. Dieser verbrauchsbasierte Modus macht Azure Cosmos DB eine starke Option für serverlose Workloads.
Wählen Sie in Visual Studio Code View>Befehlspalette... suchen Sie dann in der Befehlspalette nach
Azure Databases: Create Server...Geben Sie nach entsprechender Aufforderung Folgendes ein:
Prompt Auswahl Select an Azure Database Server Wählen Sie Core (NoSQL) aus, um eine Dokumentdatenbank zu erstellen, die Sie abfragen können, indem Sie entweder die SQL-Syntax verwenden oder einen Query Copilot verwenden, der natürliche Sprachaufforderungen in Abfragen konvertiert (Preview). Learn Sie mehr über den Azure Cosmos DB. Kontoname Geben Sie einen eindeutigen Namen ein, um Ihr Azure Cosmos DB-Konto zu identifizieren. Der Kontoname darf nur Kleinbuchstaben, Ziffern und Bindestriche (-) enthalten und muss zwischen 3 und 31 Zeichen lang sein. Select a capacity model. (Wählen Sie ein Kapazitätsmodell aus.) Wählen Sie Serverless aus, um ein Konto im Modus serverless zu erstellen. Select a resource group for new resources. (Wählen Sie eine Ressourcengruppe für neue Ressourcen aus.) Wählen Sie die Ressourcengruppe aus, in der Sie im vorherigen Artikel Ihre Funktions-App erstellt haben. Auswählen eines Standorts für neue Ressourcen Wählen Sie einen geografischen Standort aus, um Ihr Azure Cosmos DB-Konto zu hosten. Verwenden Sie den Standort, der Ihnen oder Ihren Benutzern am nächstgelegenen ist, um den schnellsten Zugriff auf Ihre Daten zu erhalten. Nachdem Ihr neues Konto bereitgestellt wurde, wird im Infobereich eine Meldung angezeigt.
Erstellen einer Azure Cosmos DB-Datenbank und eines Containers
Wählen Sie das symbol Azure in der Aktivitätsleiste aus, erweitern Sie Resources>Azure Cosmos DB, klicken Sie mit der rechten Maustaste auf Ihr Konto (STRG+Auswählen unter macOS), und wählen Sie Datenbank erstellen... .
Geben Sie nach entsprechender Aufforderung Folgendes ein:
Prompt Auswahl Datenbankname Geben Sie my-databaseein.Geben Sie eine ID für Ihre Sammlung ein Geben Sie my-containerein.Geben Sie den Partitionsschlüssel für die Sammlung ein Geben Sie /idals partitionsschlüssel ein.Wählen Sie OK aus, um den Container und die Datenbank zu erstellen.
Aktualisieren der Einstellungen Ihrer Funktions-App
Im vorhergehenden Schnellstartartikel haben Sie eine Function App in Azure erstellt. In diesem Artikel aktualisieren Sie Ihre App so, dass JSON-Dokumente in den von Ihnen erstellten Azure Cosmos DB-Container geschrieben werden. Um eine Verbindung mit Ihrem Azure Cosmos DB-Konto herzustellen, müssen Sie die connection string zu Ihren App-Einstellungen hinzufügen. Anschließend laden Sie die neue Einstellung in Ihre local.settings.json Datei herunter, damit Sie bei der lokalen Ausführung eine Verbindung mit Ihrem Azure Cosmos DB-Konto herstellen können.
Klicken Sie in Visual Studio Code mit der rechten Maustaste auf Ihr neues Azure Cosmos DB-Konto, und wählen Sie Copy Connection String aus.
Drücken Sie F1, um die Befehlspalette zu öffnen, und suchen Sie dann nach dem Befehl
Azure Functions: Add New Setting....Wählen Sie die im vorherigen Artikel erstellte Funktions-App aus. Geben Sie nach entsprechender Aufforderung Folgendes ein:
Prompt Auswahl Geben Sie den Namen der neuen App-Einstellung ein Geben Sie CosmosDbConnectionStringein.Geben Sie den Wert für "CosmosDbConnectionString" ein. Fügen Sie die connection string Ihres kopierten Azure Cosmos DB-Kontos ein. Alternativ können Sie auch Microsoft Entra Identity konfigurieren. Dadurch wird eine Anwendungseinstellung namens "connection
CosmosDbConnectionString" in Ihrer Funktions-App in Azure erstellt. Jetzt können Sie diese Einstellung in Ihre Datei local.settings.json herunterladen.Drücken Sie F1 erneut, um die Befehlspalette zu öffnen, und suchen Sie dann nach dem Befehl
Azure Functions: Download Remote Settings....Wählen Sie die im vorherigen Artikel erstellte Funktions-App aus. Wählen Sie Ja, alle aus, um die vorhandenen lokalen Einstellungen zu überschreiben.
Hierdurch werden alle Einstellungen von Azure auf Ihr lokales Projekt heruntergeladen, einschließlich der neuen Verbindungszeichenfolge-Einstellung. Die meisten heruntergeladenen Einstellungen werden bei der lokalen Ausführung nicht verwendet.
Registrieren von Bindungserweiterungen
Da Sie eine Azure Cosmos DB-Ausgabebindung verwenden, müssen Sie die entsprechende Bindungenerweiterung installiert haben, bevor Sie die project ausführen.
Mit Ausnahme von HTTP- und Timertriggern werden Bindungen als Erweiterungspakete implementiert. Führen Sie den folgenden Befehl dotnet add package im Terminalfenster aus, um das Azure Cosmos DB-Erweiterungspaket zu Ihrem project hinzuzufügen.
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.CosmosDB
Ihr Projekt wurde konfiguriert, um Extension Bundles zu verwenden, die einen vordefinierten Satz von Erweiterungspaketen automatisch installieren.
Die Verwendung von Erweiterungspaketen ist in der Datei host.json im Stammverzeichnis der project aktiviert, die wie folgt angezeigt wird:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
},
"extensions": {
"cosmosDB": {
"connectionMode": "Gateway"
}
}
}
Ihr Projekt wurde konfiguriert, um Extension Bundles zu verwenden, die einen vordefinierten Satz von Erweiterungspaketen automatisch installieren.
Die Verwendung von Erweiterungspaketen ist in der Datei host.json im Stammverzeichnis der project aktiviert, die wie folgt angezeigt wird:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
Jetzt können Sie ihrer project die Azure Cosmos DB-Ausgabebindung hinzufügen.
Hinzufügen einer Ausgabebindung
In einem C#-Klassenbibliothek-Projekt werden die Bindungen als Bindungsattribute für die Funktionsmethode definiert.
Öffnen Sie die Datei HttpExample.cs project, und fügen Sie die folgenden Klassen hinzu:
public class MultiResponse
{
[CosmosDBOutput("my-database", "my-container",
Connection = "CosmosDbConnectionSetting", CreateIfNotExists = true)]
public MyDocument Document { get; set; }
public IActionResult HttpResponse { get; set; }
}
public class MyDocument {
public string id { get; set; }
public string message { get; set; }
}
Die MyDocument-Klasse definiert ein Objekt, das in die Datenbank geschrieben wird. Die Connection-String für das Speicherkonto wird von der Eigenschaft Connection festgelegt. In diesem Fall können Sie Connection weglassen, da Sie bereits das Standardkonto storage verwenden.
Mit der MultiResponse-Klasse können Sie in die angegebene Auflistung in der Azure Cosmos DB schreiben und eine HTTP-Erfolgsmeldung zurückgeben. Da Sie ein MultiResponse-Objekt zurückgeben müssen, müssen Sie auch die Methodensignatur aktualisieren.
Bestimmte Attribute geben den Namen des Containers und den Namen seiner übergeordneten Datenbank an. Die Verbindungszeichenfolge für Ihr Azure Cosmos DB-Account wird durch CosmosDbConnectionString festgelegt.
Bindungsattribute werden direkt in Ihrem Funktionscode definiert. Die ausgabekonfiguration Azure Cosmos DB beschreibt die felder, die für eine Azure Cosmos DB-Ausgabebindung erforderlich sind.
Für dieses MultiResponse-Szenario müssen Sie der Funktion eine Ausgabebindung vom Typ extraOutputs hinzufügen.
app.http('HttpExample', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
Fügen Sie der Bindungskonfiguration die folgenden Eigenschaften hinzu:
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
Bindungsattribute werden direkt in der Datei function_app.py definiert. Sie verwenden den cosmos_db_output-Dekorateur, um eine Azure Cosmos DB-Ausgabebindung hinzuzufügen:
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database",
container_name="my-container", connection="CosmosDbConnectionString")
In diesem Code identifiziert arg_name den Bindungsparameter, auf den in Ihrem Code verwiesen wird, database_name und container_name die Datenbank- und Auflistungsnamen, in die die Bindung schreibt, und connection ist der Name einer Anwendungseinstellung, die den Verbindungsstring für das Azure Cosmos DB-Konto enthält, der sich in der CosmosDbConnectionString-Einstellung in der Datei local.settings.json befindet.
Hinzufügen von Code, der die Ausgabebindung verwendet
Ersetzen Sie die vorhandene Run Methode durch den folgenden Code:
[Function("HttpExample")]
public MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var message = "Welcome to Azure Functions!";
// Return a response to both HTTP trigger and Azure Cosmos DB output binding.
return new MultiResponse()
{
Document = new MyDocument
{
id = System.Guid.NewGuid().ToString(),
message = message
},
HttpResponse = new OkObjectResult(message)
};
}
Fügen Sie Code hinzu, der das extraInputs-Ausgabebindungsobjekt für context verwendet, um ein JSON-Dokument an die benannte Ausgabebindungsfunktion sendToCosmosDb zu senden. Fügen Sie diesen Code vor der return-Anweisung hinzu.
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: name,
});
Die Funktion sollte nun wie folgt aussehen:
const { app, output } = require('@azure/functions');
const sendToCosmosDb = output.cosmosDB({
databaseName: 'my-database',
containerName: 'my-container',
createIfNotExists: false,
connection: 'CosmosDBConnectionString',
});
app.http('HttpExampleToCosmosDB', {
methods: ['GET', 'POST'],
extraOutputs: [sendToCosmosDb],
handler: async (request, context) => {
try {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text());
if (!name) {
return { status: 404, body: 'Missing required data' };
}
// Output to Database
context.extraOutputs.set(sendToCosmosDb, {
// create a random ID
id:
new Date().toISOString() + Math.random().toString().substring(2, 10),
name: 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.';
// Return to HTTP client
return { body: responseMessage };
} catch (error) {
context.log(`Error: ${error}`);
return { status: 500, body: 'Internal Server Error' };
}
},
});
Dieser Code gibt nun ein MultiResponse-Objekt zurück, das sowohl ein Dokument als auch eine HTTP-Antwort enthält.
Aktualisieren Sie function_app.py , um dem folgenden Code zu entsprechen. Fügen Sie dem Parameter outputDocument die Funktionsdefinition und outputDocument.set() unter der if name:-Anweisung hinzu:
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.FUNCTION)
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
@app.cosmos_db_output(arg_name="outputDocument", database_name="my-database", container_name="my-container", connection="CosmosDbConnectionString")
def test_function(req: func.HttpRequest, msg: func.Out[func.QueueMessage],
outputDocument: func.Out[func.Document]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
logging.info('Python Cosmos DB trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
outputDocument.set(func.Document.from_dict({"id": name}))
msg.set(name)
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
Das Dokument {"id": "name"} wird in der Datenbanksammlung erstellt, die in der Bindung angegeben ist.
Lokales Ausführen der Funktion
Visual Studio Code lässt sich in Azure Functions Core-Tools integrieren, damit Sie dieses Projekt auf Ihrem lokalen Entwicklungscomputer ausführen können, bevor Sie es nach Azure veröffentlichen. Wenn Sie core Tools noch nicht lokal installiert haben, werden Sie aufgefordert, sie beim ersten Ausführen des project zu installieren.
Um die Funktion aufzurufen, drücken Sie F5, um das Funktionsanwendungsprojekt zu starten. Im Terminalbereich wird die Ausgabe aus den Core Tools angezeigt. Ihre App wird im Terminal-Bereich gestartet. Der lokal ausgeführte URL-Endpunkt Ihrer über HTTP ausgelösten Funktion wird angezeigt.
Wenn Sie noch keine Core Tools installiert haben, wählen Sie Install aus, um Core Tools zu installieren, wenn Sie dazu aufgefordert werden.
Wenn Probleme bei der Ausführung unter Windows auftreten, stellen Sie sicher, dass das Standardterminal für Visual Studio Code nicht auf WSL Bash festgelegt ist.Wechseln Sie, wenn die Core-Tools ausgeführt werden, zum Bereich Azure: Functions. Unter Functions erweitern Sie Local Project>Functions. Klicken Sie unter Windows mit der rechten Maustaste (unter macOS STRG+Mausklick) auf die Funktion
HttpExample, und wählen Sie Funktion jetzt ausführen... aus.
Drücken Sie in Anforderungstext eingeben die EINGABETASTE, um eine Anforderungsnachricht an Ihre Funktion zu übermitteln.
Wenn die Funktion lokal ausgeführt wird und eine Antwort zurückgibt, wird eine Benachrichtigung in Visual Studio Code ausgelöst. Informationen zur Funktionsausführung werden im Terminalbereich angezeigt.
Drücken Sie STRG+C, um die Core Tools zu beenden und die Verbindung mit dem Debugger zu trennen.
Lokales Ausführen der Funktion
Wie im vorherigen Artikel drücken Sie F5, um das Funktions-App-Projekt und die Core-Tools zu starten.
Wechseln Sie bei ausgeführten Kerntools zum Bereich Azure: Functions. Unter Functions erweitern Sie Local Project>Functions. Klicken Sie mit der rechten Maustaste (unter macOS STRG+Mausklick) auf die Funktion
HttpExample, und wählen Sie Funktion jetzt ausführen... aus.
In Enter-Anfrageinhalt sehen Sie den Wert des Anfrageinhalts
{ "name": "Azure" }. Drücken Sie die EINGABETASTE, um diese Anforderungsnachricht an Ihre Funktion zu senden.Drücken Sie nach der Rückgabe einer Antwort STRG+C, um Core Tools zu beenden.
Überprüfen, ob ein JSON-Dokument erstellt wurde
Gehen Sie zurück im Azure-Portal zu Ihrem Azure Cosmos DB-Konto, und wählen Sie Data Explorer aus.
Erweitern Sie die Datenbank und den Container, und wählen Sie die Option Elemente aus, um die in Ihrem Container erstellten Dokumente aufzulisten.
Überprüfen Sie, ob ein neues JSON-Dokument von der Ausgabebindung erstellt wurde.
Erneutes Bereitstellen und Überprüfen der aktualisierten App
Drücken Sie in Visual Studio Code F1, um die Befehlspalette zu öffnen. Suchen Sie in der Befehlspalette nach
Azure Functions: Deploy to function app....Wählen Sie die im ersten Artikel erstellte Funktions-App aus. Da Sie Ihr Projekt in derselben App erneut deployen, wählen Sie Deploy aus, um die Warnung zum Überschreiben von Dateien zu schließen.
Nach Abschluss der Bereitstellung können Sie die Funktion Execute Function Now verwenden, um die Funktion in Azure auszulösen. Dieser Befehl ruft automatisch den Funktionszugriffsschlüssel ab und verwendet ihn beim Aufrufen des Endpoints des HTTP-Triggers.
Überprüfen Sie erneut die dokumente, die in Ihrem Azure Cosmos DB-Container erstellt wurden um zu überprüfen, ob die Ausgabebindung erneut ein neues JSON-Dokument generiert.
Bereinigen von Ressourcen
In Azure beziehen sich Ressourcen auf Funktions-Apps, Funktionen, Speicherkonten und so weiter. Sie werden in Ressourcengruppen zusammengefasst, und sämtliche Inhalte einer Gruppe können durch das Löschen der Gruppe gelöscht werden.
Im Rahmen dieser Schnellstartanleitungen haben Sie Ressourcen erstellt. Je nach Ihrem Kontostatus und den Servicepreisen könnten Ihnen für diese Ressourcen Kosten berechnet werden. Nicht mehr benötigte Ressourcen können wie folgt gelöscht werden:
Drücken Sie in Visual Studio Code F1, um die Befehlspalette zu öffnen. Suchen Sie in der Befehlspalette nach
Azure: Open in portal.Wählen Sie Ihre Funktions-App aus, und drücken Sie die EINGABETASTE. Die Seite der Funktions-App wird im Azure portal geöffnet.
Wählen Sie auf der Registerkarte Übersicht den benannten Link neben Ressourcengruppe aus.
Überprüfen Sie auf der Seite Ressourcengruppe die Liste mit den enthaltenen Ressourcen, und vergewissern Sie sich, dass es sich dabei um die Ressourcen handelt, die Sie löschen möchten.
Klicken Sie auf Ressourcengruppe löschen, und folgen Sie den Anweisungen.
Der Löschvorgang kann einige Minuten dauern. Nach Abschluss des Vorgangs wird kurz eine Benachrichtigung angezeigt. Sie können auch am oberen Seitenrand auf das Glockensymbol klicken, um die Benachrichtigung anzuzeigen.
Nächste Schritte
Sie haben Ihre HTTP-ausgelöste Funktion aktualisiert, um JSON-Dokumente in einen Azure Cosmos DB-Container zu schreiben. Jetzt erfahren Sie mehr über die Entwicklung von Funktionen mithilfe von Visual Studio Code: