Erstellen serverloser Anwendungen mit Azure Functions und .NET-Lösungen
Veröffentlicht: 2023-09-21Serverless Computing ist ein Cloud-Ausführungsmodell, das es Entwicklern ermöglicht, Anwendungen und Dienste zu erstellen und auszuführen, ohne an Server denken zu müssen. Mit Serverless sind Anwendungen nicht darauf angewiesen, dass Server laufen – der Cloud-Anbieter verwaltet die Zuweisung und Bereitstellung von Servern dynamisch. Dadurch können sich Entwickler auf die Codierung der Geschäftslogik statt auf die Serververwaltung konzentrieren.
Microsoft Azure Functions ist ein serverloser Rechendienst zum Erstellen und Hosten von Webendpunkten und Hintergrundverarbeitungsjobs, ohne dass Server bereitgestellt oder verwaltet werden müssen. Mit Azure Functions können Sie Code bei Bedarf als Reaktion auf Ereignisse ausführen, ohne die Infrastruktur explizit bereitstellen oder verwalten zu müssen. In diesem Blogbeitrag untersuchen wir, wie Sie serverlose Anwendungen mit Azure Functions mithilfe von .NET-Lösungen erstellen, einschließlich der Nutzung von ASP.NET-Entwicklungsdiensten .
Was sind Azure Functions?
Mit Azure Functions können Sie Code in der Cloud ausführen, ohne Infrastruktur bereitstellen oder verwalten zu müssen. Mit Functions schreiben Sie genau den Code, den Sie für das jeweilige Problem benötigen, ohne sich um die Serververwaltung kümmern zu müssen. Azure verwaltet die gesamte Infrastruktur und Server für Sie.
Einige wichtige Aspekte und Vorteile von Azure Functions:
- Ereignisgesteuert: Funktionen werden durch Ereignisse von vielen Azure- und Drittanbieterdiensten ausgelöst. Dazu gehören HTTP-Anfragen, Timer, Warteschlangen, serverlose APIs und mehr. Als Reaktion auf diese Ereignisse können Sie Code ausführen lassen.
- Automatische Skalierung: Azure verwaltet und skaliert Funktionen automatisch basierend auf der eingehenden Anforderungsrate und der Verarbeitungslast. Sie müssen Server nicht manuell bereitstellen und skalieren.
- Bezahlung pro Ausführung: Sie zahlen nur für die Rechenressourcen, die zum Ausführen Ihres Codes erforderlich sind. Es fallen keine Leerlaufgebühren an, wenn Ihre Funktionen nicht ausgeführt werden.
- Mehrere Sprachen: Functions unterstützt C#, JavaScript, Python, PowerShell, Java und mehr. Sie können Funktionen in Ihrer bevorzugten Sprache entwickeln.
- Serverlose Erfahrung: Mit Functions konzentrieren Sie sich auf das Schreiben von Code und überlassen Azure die gesamte Serverbereitstellung, -konfiguration und -verwaltung. Sie erhalten ein echtes serverloses Erlebnis.
Lokale Entwicklung von .NET-Funktionen
Um .NET-Funktionen lokal zu entwickeln, benötigen Sie die Azure Functions Core Tools, eine Befehlszeilenschnittstelle zum Entwickeln, Testen und Bereitstellen von Azure Functions sowohl lokal als auch in Azure.
So richten Sie die Entwicklungsumgebung ein:
- Installieren Sie die neueste Version des .NET Core SDK
- Installieren Sie Azure Functions Core Tools mit dem Dotnet-Tool install -g Microsoft.Azure.WebJobs.Script.WebHost
- Erstellen Sie ein Verzeichnis für das Funktions-App-Projekt und führen Sie func init aus
- Dadurch wird ein Beispielfunktionsprojekt mit einer Funktionsvorlage erstellt
Jetzt können Sie Funktionscode hinzufügen, ihn lokal testen und mithilfe der func-CLI in Azure veröffentlichen. Fügen Sie eine run.csx-Datei für eine durch HTTP ausgelöste C#-Funktion hinzu:
Quelle {csharp}
Kopieren
#r „Newtonsoft.Json“
mit Microsoft.AspNetCore.Mvc;
Verwenden von Microsoft.Extensions.Primitives;
mit Newtonsoft.Json;
mit System.Net;
Verwenden von System.Threading.Tasks;
öffentliche statische asynchrone Aufgabe<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation(“Die HTTP-Triggerfunktion von C# hat eine Anfrage verarbeitet.“);
string name = req.Query[„name“];
string requestBody = waiting new StreamReader(req.Body).ReadToEndAsync();
dynamische Daten = JsonConvert.DeserializeObject(requestBody);
Name = Name ?? Daten?.Name;
Rückgabename != null
? (ActionResult)new OkObjectResult($“Hallo, {name}“)
: new BadRequestObjectResult(“Bitte übergeben Sie einen Namen in der Abfragezeichenfolge oder im Anforderungstext“);
}
Testen Sie es lokal, indem Sie func host start ausführen, wodurch das Funktionsgateway auf Ihrem lokalen Host gestartet wird. Jetzt können Sie es mit Postman oder Browser mit http://localhost:7071/api/HttpExample?name=John auslösen.
Auswählen von Azure Functions-Triggern und -Bindungen
Azure Functions unterstützt viele verschiedene Ereignisquellen und -ziele, sogenannte Trigger und Bindungen. Die Auswahl der richtigen Trigger und Bindungen ist je nach Anwendungsfall wichtig.
Einige häufige Auslöser in Funktionen sind:
- HTTP-Trigger: Zum Erstellen von REST-APIs und Web-Endpunkten. Code wird durch HTTP-Anfragen ausgelöst.
- Timer-Trigger: Für geplante Jobs, die nach einem Zeitplan ausgeführt werden, z. B. alle 5 Minuten.
- Warteschlangentrigger: Zur Verarbeitung von Nachrichten aus Speicherwarteschlangen.
- Blob-Trigger: Zum Reagieren auf neue oder aktualisierte Blobs in Azure Blob Storage.
Bindungen ermöglichen Funktionen die Interaktion mit externen Datenspeichern und Diensten. Zu den gängigen Bindungen gehören:
- Speicherwarteschlange: Zur Ausgabe von Nachrichten an Speicherwarteschlangen.
- Blob Storage: Zum Lesen aus und Schreiben in Azure Blob Storage.
- Cosmos DB: Zum Abfragen und Ändern von Dokumenten im Azure Cosmos DB-Datenbankdienst.
- Service Bus: Zur Verarbeitung von Nachrichten aus Azure Service Bus-Warteschlangen und -Themen.
Die Wahl des richtigen Triggers und der richtigen Bindungen hilft beim Aufbau von End-to-End-Lösungen durch die Integration verschiedener Funktionen mit Daten und Diensten.
Verwendung langlebiger Funktionen
Langlebige Funktionen ermöglichen das Schreiben zustandsbehafteter Funktionen, die eine zuverlässige Ausführung von Operationsabläufen auch bei Ausfällen oder Neustarts ermöglichen. Damit können Sie lang laufende Arbeitsabläufe als Zustandsautomaten strukturieren.
Beispielsweise können Sie mithilfe von Durable Functions einen Workflow erstellen, der aus Folgendem besteht:
- Orchestrator-Funktion: Fungiert als Zustandsmaschine, die die Ausführung von Aktivitätsfunktionen in der richtigen Reihenfolge koordiniert.
- Aktivitätsfunktionen: Kleine unabhängige Arbeitseinheiten, die von Orchestratorfunktionen aufgerufen werden können.
Zu den Vorteilen der Verwendung langlebiger Funktionen gehören:
- Zuverlässige Wiederholungsversuche: Durable Functions wiederholt Aktivitätsfunktionen automatisch, wenn diese fehlschlagen.
- Asynchrone Aufrufe: Die Orchestratorfunktion kann Aktivitätsfunktionen asynchron ausführen und auf deren Abschluss warten.
- Prüfpunkte: Der Status wird kontinuierlich mit Prüfpunkten versehen, sodass Arbeitsabläufe auch nach App-Neustarts oder Ausfällen wiederhergestellt werden können.
Sehen wir uns einen einfachen Workflow an, der zwei Aktivitäten orchestriert:
Quelle {csharp}
Kopieren
[FunctionName(“Orchestrator”)]
öffentlicher statischer asynchroner Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext-Kontext)
{
var output1 = waiting context.CallActivityAsync<string>(“DotNetActivity”, “Hello”);
var Ausgabe2 = Warten Sie auf context.CallActivityAsync<string>(“DotNetActivity”, Ausgabe1);
// Ergebnis zurückgeben
Rückgabeausgabe2;
}
[FunctionName(“DotNetActivity”)]
public static Task<string> Run(
[ActivityTrigger] String-Eingabe,
ILogger-Protokoll)
{
log.LogInformation($“DotNetActivity-Funktion verarbeitet: {input}“);
return Task.FromResult(input.ToUpper());
}
Langlebige Funktionen ermöglichen die Zerlegung komplexer Prozesse in zuverlässige Arbeitsabläufe.
Best Practices für die Azure Functions-Entwicklung
Einige Best Practices für die Entwicklung von Azure Functions:
- Verwenden Sie die Abhängigkeitsinjektion: Dependency Inject-Dienste in Funktionen für eine bessere Testbarkeit.
- Vermeiden Sie lang laufende Prozesse: Funktionen sollen Code auf kleinen Verarbeitungseinheiten ausführen. Halten Sie die Codeausführung kurz.
- Verwenden Sie unveränderliche Datentypen: Funktionen sind zustandslos. Vermeiden Sie daher veränderliche Typen/Nebeneffekte, die Probleme verursachen können.
- Zentralisierte Fehlerbehandlung: Fügen Sie eine gemeinsame Fehlerbehandlungslogik hinzu, anstatt Fehler überall einzeln zu behandeln.
- Strukturierte Protokollierung: Standardisierte Protokollierung hilft beim Debuggen, Überwachen und Audit-Trails.
- Drosselung und Wiederholungsversuche: Behandeln Sie Drosselungsfehler durch die Implementierung von Wiederholungsversuchen mit exponentiellen Backoffs.
- Versionierung: Stark versionierte Trigger, Bindungen und Ein-/Ausgaben, um Breaking Changes zu vermeiden.
- Überwachung und Instrumentierung: Verwenden Sie Tools wie Application Insights zur Protokollierung, Leistungsüberwachung und Nutzungsanalyse.
- Kontextbindungen verwenden: Nutzen Sie Kontextbindungen für den Zugriff auf Dinge wie App-Einstellungen ohne zusätzliche Abhängigkeiten.
Das Befolgen dieser Best Practices hilft beim Erstellen robuster, zuverlässiger und skalierbarer serverloser Anwendungen mit Azure Functions.
Bereitstellen von Funktionen in Azure
Sobald die Funktionen fertig sind, können Sie sie über Azure CLI, PowerShell, Visual Studio oder direkt über die Azure Functions-Kerntools-CLI in Azure bereitstellen:
Kopieren
func Azure FunctionApp Publish <Funktions-App-Name>
Dadurch wird der Funktionsprojektordner in einer Azure-Funktions-App veröffentlicht. Zu den wichtigsten Vorteilen der Bereitstellung von Funktionen in Azure gehören:
- Automatische Skalierung – Funktionen skalieren basierend auf dem eingehenden Anfragevolumen oder Zeitauslösern.
- Hohe Verfügbarkeit – Mehrere Instanzen in mehreren Rechenzentren sorgen für hohe Verfügbarkeit.
- Überwachung und Protokollierung – Verwenden Sie Tools wie Application Insights, um Leistung, Fehler usw. zu überwachen.
- Serverlose Plattform – Es müssen keine Server bereitgestellt/verwaltet werden. Sie konzentrieren sich nur auf den Code.
- Kontinuierliche Bereitstellung – Verwenden Sie CI/CD-Pipelines für die automatisierte Bereitstellung bei Codeänderungen.
Azure verwaltet die gesamte Infrastruktur, vermeidet Leerlaufkosten und bietet eine vollständig serverlose Plattform, um serverlose Anwendungen zuverlässig in großem Maßstab auszuführen.
Abschluss
Serverloses Computing mit Azure Functions ermöglicht es Entwicklern, sich auf die Geschäftslogik zu konzentrieren und gleichzeitig die gesamte Infrastruktur- und Betriebsverwaltung auf Azure auszulagern. Native .NET-Entwicklungsunterstützung, einschließlich der Option , ASP.NET Core-Entwickler einzustellen , ermöglicht die einfache Erstellung robuster serverloser Lösungen in C#. Mit Triggern, Bindungen und dauerhaften Funktionen können Entwickler durchgängige ereignisgesteuerte Architekturen und Workflows als zustandslose und zustandsbehaftete Funktionen erstellen. In Kombination mit Best Practices ermöglichen Azure Functions die einfache und skalierbare Erstellung und Bereitstellung serverloser Anwendungen in der Cloud.