Grundlagen-Tutorial / Entwicklerjournal
Azure Functions von Anfang an: lokale HTTP-Function mit .NET-Isolated-Worker erstellen, JSON verarbeiten, veröffentlichen und sicher überwachen.
1. Was ist eine Azure Function?
Azure Functions führt kleine bis mittelgroße Programme ereignisgesteuert aus, etwa nach einer HTTP-Anfrage, Queue-Nachricht oder Zeitplanung. Du verwaltest weniger Serverinfrastruktur, musst aber weiterhin Laufzeit, Netzwerk, Identität und Kosten planen. Eine Function kann eine API-Endpunktlogik bereitstellen, ist aber nicht automatisch öffentlich sicher.
2. Was benötigst du?
Installiere ein aktuell unterstütztes .NET SDK, Visual Studio Code oder Visual Studio, Azure Functions Core Tools und bei Deployment die Azure CLI. Erstelle eine Azure-Testumgebung. Wähle eine von Azure Functions unterstützte Kombination aus .NET-Version und Worker-Modell.
3. Projekt erstellen
Für C# nutze den .NET-Isolated-Worker. Mit Azure Functions Core Tools kannst du ein Projekt erzeugen und eine HTTP-Trigger-Function hinzufügen. Die verfügbaren Kommandooptionen können mit der Core-Tools-Version variieren.
func init MyFirstFunction --worker-runtime dotnet-isolated
cd MyFirstFunction
func new --template "HTTP trigger" --name Hello
4. Wie funktioniert ein HTTP-Trigger?
Der HTTP-Trigger empfängt eine Anfrage und gibt eine HTTP-Antwort zurück. AuthenticationLevel.Function verwendet einen Functions-Schlüssel, der nur einen grundlegenden Schutz darstellt. Für vertrauliche Unternehmens-APIs sollte die Identität von Clients zusätzlich über Entra ID oder eine geeignete Gateway-Schicht geprüft werden.
5. Ein minimales C#-Beispiel
Das folgende Beispiel liest JSON aus einer HTTP-Anfrage und beantwortet gültige Eingaben mit einer kleinen JSON-Antwort. Es speichert keine Daten und verwendet bewusst keinen echten externen Dienst. Die Paketversionen müssen zum gewählten Worker-SDK passen.
using System.Net;
using System.Text.Json;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
public record HelloInput(string? Name);
public class HelloFunction
{
[Function("Hello")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "post",
Route = "hello")] HttpRequestData request)
{
HelloInput? input;
try
{
input = await JsonSerializer.DeserializeAsync<HelloInput>(
request.Body,
new JsonSerializerOptions
{ PropertyNameCaseInsensitive = true });
}
catch (JsonException)
{
return request.CreateResponse(HttpStatusCode.BadRequest);
}
if (string.IsNullOrWhiteSpace(input?.Name))
return request.CreateResponse(HttpStatusCode.BadRequest);
var response = request.CreateResponse(HttpStatusCode.OK);
await response.WriteAsJsonAsync(new { message = $"Hello, {input.Name}" });
return response;
}
}
6. Lokal ausführen und testen
Starte die Function über func start und kontrolliere die angezeigte lokale URL. Sende per curl einen POST mit Content-Type application/json. Teste außerdem leere und fehlerhafte JSON-Daten. Lokale Zugriffsschlüssel- und Authentifizierungsregeln unterscheiden sich von einer produktiven Umgebung.
func start
curl -i -X POST http://localhost:7071/api/hello -H "Content-Type: application/json" -d '{"name":"World"}'
7. In Azure veröffentlichen
Erstelle Function App, Hosting-Plan, Storage-Ressource und Application Insights passend zum gewählten Bereitstellungsmodell. Deploye mit einem unterstützten Verfahren, beispielsweise über Azure Functions Core Tools oder eine CI/CD-Pipeline. Prüfe nach dem Publish die effektiven App Settings und die Laufzeitversion.
8. Managed Identity und Key Vault
Aktiviere eine Managed Identity und vergebe nur die erforderlichen Azure-Rollen. Nutze sie für Azure-Ressourcenzugriffe; andere Geheimnisse können aus Key Vault kommen. Lege weder API-Schlüssel noch Client-Secrets in lokale Commit-Dateien oder Container-Images. Schütze die HTTP-Function über geeignete Authentifizierung und Netzwerkregeln.
9. Monitoring und Kosten
Nutze Application Insights beziehungsweise die unterstützte Telemetrieintegration. Überwache Laufzeiten, Fehlerraten und externe Abhängigkeiten. Kosten hängen vom Hosting-Plan und unterstützenden Diensten ab; selbst bei wenigen Aufrufen können Storage, Logging oder Netzwerkkomponenten Gebühren verursachen.
10. Tests und typische Probleme
Prüfe 400 bei ungültigem JSON, die Behandlung leerer Inhalte, die korrekte Content-Type-Antwort, Authentifizierungsfehler, Kaltstartzeiten und Neustarts. Ein erfolgreicher lokaler Test ersetzt keinen produktionsnahen Integrationstest.
Kommentare (0)
Noch keine Kommentare. Schreibe den ersten Beitrag zur Diskussion.