.NET Aspire Azure PostgreSQL Integration
umfasst:Hosting-Integration und
Client-Integration
Azure Datenbank für PostgreSQL– Flexible Server ist ein relationaler Datenbankdienst, der auf dem Open Source-Postgres-Datenbankmodul basiert. Es ist ein vollständig verwalteter Datenbank-as-a-Service, der unternehmenskritische Workloads mit vorhersehbarer Leistung, Sicherheit, hoher Verfügbarkeit und dynamischer Skalierbarkeit verarbeiten kann. Die .NET AspireAzurePostgreSQL-Integration bietet eine Möglichkeit, eine Verbindung mit vorhandenen AzurePostgreSQL-Datenbanken herzustellen oder neue Instanzen aus .NET mit dem docker.io/library/postgres
Containerimagezu erstellen.
Hosting-Integration
Das .NET AspireAzurePostgreSQL Hostintegrationsmodell bildet einen PostgreSQL flexiblen Server und eine flexible Datenbank vom Typ AzurePostgresFlexibleServerResource und AzurePostgresFlexibleServerDatabaseResource ab. Andere Typen, die in der Hostingintegration inhärent verfügbar sind, werden in den folgenden Ressourcen dargestellt:
Um auf diese Typen und APIs zuzugreifen, um sie als Ressourcen in Ihrem App-Host Projekt auszudrücken, installieren Sie die 📦Aspire. Hosting.Azure.PostgreSQL NuGet-Paket:
dotnet add package Aspire.Hosting.Azure.PostgreSQL
Weitere Informationen finden Sie unter dotnet add package.
Die AzurePostgreSQL-Hosting-Integration hat eine Abhängigkeit von dem -📦-Aspire-Hosting-PostgreSQL--NuGet-Paket, das erweitert wird, um Azurezu unterstützen. Alles, was Sie mit der .NET AspirePostgreSQL Integration und .NET AspirePostgreSQLEntity Framework Core Integration tun können, können Sie auch mit dieser Integration tun.
Serverressource AzurePostgreSQL hinzufügen
Nachdem Sie die .NET AspireAzurePostgreSQL Hostingintegration installiert haben, rufen Sie die AddAzurePostgresFlexibleServer Erweiterungsmethode in Ihrem App-Hostprojekt auf:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Durch den vorherigen Aufruf von AddAzurePostgresFlexibleServer
wird die PostgresSQL-Serverressource so konfiguriert, dass sie als AzurePostgres Flexible Serverbereitgestellt wird.
Wichtig
Standardmäßig konfiguriert AddAzurePostgresFlexibleServer
die Authentifizierung über Microsoft Entra ID. Dies erfordert Änderungen an Anwendungen, die eine Verbindung mit diesen Ressourcen herstellen müssen. Weitere Informationen finden Sie unter Client Integration.
Trinkgeld
Wenn Sie AddAzurePostgresFlexibleServeraufrufen, wird implizit AddAzureProvisioningaufgerufen, wodurch die Unterstützung zur dynamischen Generierung von Azure-Ressourcen während des App-Starts hinzugefügt wird. Die App muss das entsprechende Abonnement und den entsprechenden Standort konfigurieren. Weitere Informationen finden Sie unter Lokale Bereitstellung: Konfiguration.
Client Integration
Um mit der .NET AspirePostgreSQL-Clientintegration zu beginnen, installieren Sie das 📦Aspire.Npgsql NuGet-Paket im clientnutzenden Projekt, das heißt, dem Projekt für die Anwendung, die den PostgreSQL-Client verwendet. Die PostgreSQL Clientintegration registriert eine NpgsqlDataSource Instanz, die Sie für die Interaktion mit PostgreSQLverwenden können.
dotnet add package Aspire.Npgsql
Hinzufügen des Npgsql-Clients
Rufen Sie in der Program.cs-Datei Ihres clientnutzenden Projekts die AddNpgsqlDataSource-Erweiterungsmethode für jedes IHostApplicationBuilder auf, um eine NpgsqlDataSource
für die Verwendung über den Abhängigkeitsinjektionscontainer zu registrieren. Die Methode verwendet einen Verbindungsnamenparameter.
builder.AddNpgsqlDataSource(connectionName: "postgresdb");
Trinkgeld
Der parameter connectionName
muss mit dem Namen übereinstimmen, der beim Hinzufügen der PostgreSQL Serverressource im App-Hostprojekt verwendet wird. Weitere Informationen finden Sie unter Serverressource hinzufügen PostgreSQL.
Nachdem Sie NpgsqlDataSource
zum Generator hinzugefügt haben, können Sie die NpgsqlDataSource
Instanz mithilfe der Abhängigkeitseinfügung abrufen. Wenn Sie beispielsweise das Datenquellenobjekt aus einem Beispieldienst abrufen möchten, definieren Sie es als Konstruktorparameter, und stellen Sie sicher, dass die ExampleService
Klasse im Container zum Einfügen von Abhängigkeiten registriert ist:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
Weitere Informationen zur Abhängigkeitsinjektion finden Sie unter .NET Abhängigkeitsinjektion.
Hinzufügen des Npgsql-Clients mit Schlüsseln
Es kann Situationen geben, in denen Sie mehrere NpgsqlDataSource
Instanzen mit unterschiedlichen Verbindungsnamen registrieren möchten. Rufen Sie die AddKeyedNpgsqlDataSource-Methode auf, um schlüsselierte Npgsql-Clients zu registrieren:
builder.AddKeyedNpgsqlDataSource(name: "chat");
builder.AddKeyedNpgsqlDataSource(name: "queue");
Anschließend können Sie die NpgsqlDataSource
-Instanzen mithilfe von Dependency Injection abrufen. So rufen Sie beispielsweise die Verbindung aus einem Beispieldienst ab:
public class ExampleService(
[FromKeyedServices("chat")] NpgsqlDataSource chatDataSource,
[FromKeyedServices("queue")] NpgsqlDataSource queueDataSource)
{
// Use data sources...
}
Weitere Informationen zu schlüsselbasierten Diensten finden Sie unter .NET Abhängigkeitsinjektion: Dienste mit Schlüsseln.
Konfiguration
Die .NET AspirePostgreSQL-Integration bietet mehrere Konfigurationsmethoden und -optionen, um die Anforderungen und Konventionen Ihres Projekts zu erfüllen.
Verwenden Sie eine Verbindungszeichenfolge
Wenn Sie eine Verbindungszeichenfolge aus dem Konfigurationsabschnitt ConnectionStrings
verwenden, können Sie beim Aufrufen der AddNpgsqlDataSource-Methode den Namen der Verbindungszeichenfolge angeben:
builder.AddNpgsqlDataSource("postgresdb");
Anschließend wird die Verbindungszeichenfolge aus dem Konfigurationsabschnitt ConnectionStrings
abgerufen:
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=postgresdb"
}
}
Weitere Informationen finden Sie in der ConnectionString.
Verwenden von Konfigurationsanbietern
Die .NET AspirePostgreSQL-Integration unterstützt Microsoft.Extensions.Configuration. Sie lädt die NpgsqlSettings aus appsettings.json oder anderen Konfigurationsdateien mithilfe des Aspire:Npgsql
Schlüssels. Beispiel appsettings.json, das einige der Optionen konfiguriert:
Das folgende Beispiel zeigt eine appsettings.json Datei, die einige der verfügbaren Optionen konfiguriert:
{
"Aspire": {
"Npgsql": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DisableHealthChecks": false,
"DisableTracing": true,
"DisableMetrics": false
}
}
}
Für das vollständige PostgreSQL Clientintegration JSON Schema sehen Sie Aspire. Npgsql/ConfigurationSchema.json.
Verwenden von Inlinedelegatn
Sie können auch den Action<NpgsqlSettings> configureSettings
Delegat übergeben, um einige oder alle Optionen inline einzurichten, z. B. zum Deaktivieren von Integritätsprüfungen:
builder.AddNpgsqlDataSource(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Client Integrationsgesundheitsprüfungen
Standardmäßig sind bei .NET.NET AspireClient-IntegrationenGesundheitsprüfungen für alle Dienste aktiviert. Ebenso ermöglichen viele .NET.NET AspireHostingintegrationen auch Gesundheitsprüfungsendpunkte. Weitere Informationen finden Sie unter:
- Fügt die
NpgSqlHealthCheck
hinzu, die überprüft, ob Befehle erfolgreich für die zugrunde liegende Postgres Datenbank ausgeführt werden können. - Integriert in den
/health
HTTP-Endpunkt, der angibt, dass alle registrierten Gesundheitsprüfungen erfolgreich sein müssen, damit die App bereit ist, Datenverkehr zu akzeptieren.
Observability und Telemetrie
.NET .NET Aspire Integrationen richten automatisch Protokollierungs-, Ablaufverfolgungs- und Metrikkonfigurationen ein, die manchmal als die Säulen der Beobachtbarkeitbezeichnet werden. Weitere Informationen zur Integrationsobservability und Telemetrie finden Sie in der Integrationsübersicht unter .NET.NET Aspire. Abhängig vom Sicherungsdienst unterstützen einige Integrationen möglicherweise nur einige dieser Features. Beispielsweise unterstützen einige Integrationen Protokollierung und Ablaufverfolgung, aber keine Metriken. Telemetriefeatures können auch mithilfe der techniken deaktiviert werden, die im Abschnitt Configuration dargestellt werden.
Protokollierung
Die .NET AspirePostgreSQL-Integration verwendet die folgenden Protokollkategorien:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Verfolgung
Die .NET AspirePostgreSQL-Integration wird die folgenden Verfolgungsaktivitäten mithilfe von OpenTelemetryausgeben:
Npgsql
Metriken
Die .NET AspirePostgreSQL Integration gibt die folgenden Metriken mithilfe von OpenTelemetryaus:
- Npgsql:
ec_Npgsql_bytes_written_per_second
ec_Npgsql_bytes_read_per_second
ec_Npgsql_commands_per_second
ec_Npgsql_total_commands
ec_Npgsql_current_commands
ec_Npgsql_failed_commands
ec_Npgsql_prepared_commands_ratio
ec_Npgsql_connection_pools
ec_Npgsql_multiplexing_average_commands_per_batch
ec_Npgsql_multiplexing_average_write_time_per_batch
Hinzufügen eines Azure authentifizierten Clients von Npgsql
Wenn Sie AddAzurePostgresFlexibleServer
in Ihrer PostgreSQL Hostingintegration aufrufen, wird standardmäßig das 📦AzureIdentity--NuGet-Paket konfiguriert, um die Authentifizierung zu aktivieren:
dotnet add package Azure.Identity
Die PostgreSQL-Verbindung kann mithilfe der Clientintegration und Azure.Identitygenutzt werden:
builder.AddNpgsqlDataSource(
"postgresdb",
configureDataSourceBuilder: (dataSourceBuilder) =>
{
if (!string.IsNullOrEmpty(dataSourceBuilder.ConnectionStringBuilder.Password))
{
return;
}
dataSourceBuilder.UsePeriodicPasswordProvider(async (_, ct) =>
{
var credentials = new DefaultAzureCredential();
var token = await credentials.GetTokenAsync(
new TokenRequestContext([
"https://ossrdbms-aad.database.windows.net/.default"
]), ct);
return token.Token;
},
TimeSpan.FromHours(24),
TimeSpan.FromSeconds(10));
});
Im vorherigen Codeausschnitt wird veranschaulicht, wie Sie die DefaultAzureCredential-Klasse aus dem Azure.Identity-Paket verwenden, um sich mit Microsoft Entra ID zu authentifizieren und ein Token abzurufen, um eine Verbindung mit der PostgreSQL-Datenbank herzustellen. Die UsePeriodicPasswordProvider--Methode wird verwendet, um das Token für den Verbindungszeichenfolgen-Generator bereitzustellen.