integrace .NET AspireAzurePostgreSQL
zahrnuje:integrace hostování a Client integrace
Azure Database for PostgreSQL– flexibilní Server je relační databázová služba založená na opensourcovém databázovém stroji Postgres. Jedná se o plně spravovanou databázi jako službu, která dokáže zpracovávat důležité úlohy s předvídatelným výkonem, zabezpečením, vysokou dostupností a dynamickou škálovatelností. Integrace .NET AspireAzurePostgreSQL poskytuje způsob, jak se připojit k existujícím databázím AzurePostgreSQL nebo vytvořit nové instance z .NET pomocí image kontejnerudocker.io/library/postgres
.
Integrace hostování
Integrace hostování .NET AspireAzurePostgreSQL modeluje PostgreSQL flexibilní server a databázi jako typy AzurePostgresFlexibleServerResource a AzurePostgresFlexibleServerDatabaseResource. Další typy, které jsou ze své podstaty dostupné v integraci hostování, jsou reprezentovány v následujících prostředcích:
Pokud chcete získat přístup k těmto typům a rozhraním API pro jejich vyjádření jako prostředků v projektu hostitele aplikace , nainstalujte balíček NuGet 📦Aspire.Hosting.Azure.PostgreSQL:
dotnet add package Aspire.Hosting.Azure.PostgreSQL
Další informace naleznete na dotnet add package.
Integrace hostování AzurePostgreSQL závisí na 📦Aspire.hostování.PostgreSQL balíčku NuGet, pro rozšíření podpory Azure. Všechno, co můžete dělat s integrací .NET AspirePostgreSQL a integrací .NET AspirePostgreSQLEntity Framework Core, s touto integrací můžete také provádět.
Přidání prostředku serveru AzurePostgreSQL
Po instalaci integrace hostování .NET AspireAzurePostgreSQL volejte metodu rozšíření AddAzurePostgresFlexibleServer v hostitelském projektu aplikace:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Předchozí volání AddAzurePostgresFlexibleServer
nakonfiguruje prostředek serveru PostgreSQL tak, aby byl nasazen jako flexibilní AzurePostgresServer.
Důležitý
Ve výchozím nastavení AddAzurePostgresFlexibleServer
konfiguruje ověřování ID Microsoft Entra. To vyžaduje změny aplikací, které se k těmto prostředkům potřebují připojit. Další informace najdete v tématu Client integrace.
Spropitné
Když voláte AddAzurePostgresFlexibleServer, implicitně vyvolá volání funkce AddAzureProvisioning– což přidává podporu pro dynamické vytváření prostředků Azure při startu aplikace. Aplikace musí nakonfigurovat příslušné předplatné a umístění. Další informace naleznete v tématu Místní zřizování: Konfigurace.
Vygenerované nastavení Bicep
Pokud jste noví v Bicep, je to jazyk specifický pro doménu, určený k definování Azure prostředků. S .NET.NET Aspirenemusíte psát Bicep ručně, protože zřizovací API generuje Bicep za vás. Když publikujete aplikaci, vygenerovaný Bicep je výstupem společně se souborem manifestu. Když přidáte prostředek AzurePostgreSQL, vygeneruje se následující Bicep:
přepnout AzurePostgreSQL Bicep.
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param principalId string
param principalType string
param principalName string
resource postgres_flexible 'Microsoft.DBforPostgreSQL/flexibleServers@2024-08-01' = {
name: take('postgresflexible-${uniqueString(resourceGroup().id)}', 63)
location: location
properties: {
authConfig: {
activeDirectoryAuth: 'Enabled'
passwordAuth: 'Disabled'
}
availabilityZone: '1'
backup: {
backupRetentionDays: 7
geoRedundantBackup: 'Disabled'
}
highAvailability: {
mode: 'Disabled'
}
storage: {
storageSizeGB: 32
}
version: '16'
}
sku: {
name: 'Standard_B1ms'
tier: 'Burstable'
}
tags: {
'aspire-resource-name': 'postgres-flexible'
}
}
resource postgreSqlFirewallRule_AllowAllAzureIps 'Microsoft.DBforPostgreSQL/flexibleServers/firewallRules@2024-08-01' = {
name: 'AllowAllAzureIps'
properties: {
endIpAddress: '0.0.0.0'
startIpAddress: '0.0.0.0'
}
parent: postgres_flexible
}
resource postgres_flexible_admin 'Microsoft.DBforPostgreSQL/flexibleServers/administrators@2024-08-01' = {
name: principalId
properties: {
principalName: principalName
principalType: principalType
}
parent: postgres_flexible
dependsOn: [
postgres_flexible
postgreSqlFirewallRule_AllowAllAzureIps
]
}
output connectionString string = 'Host=${postgres_flexible.properties.fullyQualifiedDomainName};Username=${principalName}'
Předchozí bicep je modul, který zřizuje flexibilní server AzurePostgreSQL s následujícími výchozími nastaveními:
-
authConfig
: Konfigurace ověřování serveru PostgreSQL. Výchozí hodnota jeActiveDirectoryAuth
povolená aPasswordAuth
zakázaná. -
availabilityZone
: Zóna dostupnosti serveru PostgreSQL. Výchozí hodnota je1
. -
backup
: Konfigurace zálohování serveru PostgreSQL. Výchozí hodnota jeBackupRetentionDays
nastavená na7
aGeoRedundantBackup
nastavená naDisabled
. -
highAvailability
: Konfigurace vysoké dostupnosti serveru PostgreSQL. Výchozí hodnota jeDisabled
. -
storage
: Konfigurace úložiště serveru PostgreSQL. Výchozí hodnota jeStorageSizeGB
nastavená na32
. -
version
: Verze serveru PostgreSQL. Výchozí hodnota je16
. -
sku
: Skladová položka serveru PostgreSQL. Výchozí hodnota jeStandard_B1ms
. -
tags
: Značky serveru PostgreSQL. Výchozí hodnotaaspire-resource-name
je nastavena na název prostředku Aspire, v tomto případěpostgres-flexible
.
Kromě flexibilního serveru PostgreSQL také zřídí pravidlo firewallu Azure, které povolí všechny IP adresy Azure. Nakonec se pro server PostgreSQL vytvoří správce a připojovací řetězec se vypíše jako výstupní proměnná. Vygenerovaný Bicep je výchozím bodem a můžete ho přizpůsobit tak, aby splňoval vaše konkrétní požadavky.
Přizpůsobení infrastruktury zabezpečení
Všechny zdroje .NET AspireAzure jsou podtřídy typu AzureProvisioningResource. Tento typ umožňuje přizpůsobení vygenerovaného Bicepu tím, že poskytuje plynulé rozhraní API pro konfiguraci Azure prostředků pomocí ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) API. Můžete například nakonfigurovat kind
, consistencyPolicy
, locations
atd. Následující příklad ukazuje, jak přizpůsobit prostředek AzureAzure Cosmos DB:
builder.AddAzureCosmosDB("cosmos-db")
.ConfigureInfrastructure(infra =>
{
var flexibleServer = infra.GetProvisionableResources()
.OfType<PostgreSqlFlexibleServer>()
.Single();
flexibleServer.Sku = new PostgreSqlFlexibleServerSku
{
Tier = PostgreSqlFlexibleServerSkuTier.Burstable,
};
flexibleServer.HighAvailability = new PostgreSqlFlexibleServerHighAvailability
{
Mode = PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundant,
StandbyAvailabilityZone = "2",
};
flexibleServer.Tags.Add("ExampleKey", "Example value");
});
Předchozí kód:
- Zřetězí volání rozhraní API ConfigureInfrastructure:
- Parametr
infra
je instance typu AzureResourceInfrastructure. - Dostupné prostředky se načtou voláním metody GetProvisionableResources().
- Načte se jeden PostgreSqlFlexibleServer.
-
sku
je nastaven s PostgreSqlFlexibleServerSkuTier.Burstable. - Vlastnosti vysoké dostupnosti jsou nastaveny s PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundant v zóně pohotovostní dostupnosti
"2"
. - Štítek se přidá na flexibilní server s klíčem
ExampleKey
a hodnotouExample value
.
- Parametr
K dispozici je mnoho dalších možností konfigurace pro přizpůsobení prostředku flexibilního serveru PostgreSQL. Další informace najdete v tématu Azure.Provisioning.PostgreSql. Další informace najdete v tématu Azure. Přizpůsobení zajišťování.
Připojení k existujícímu flexibilnímu serveru AzurePostgreSQL
Možná máte existující AzurePostgreSQL flexibilní server, ke kterému se chcete připojit. Místo zavedení nového flexibilního serverového prostředku AzurePostgreSQL můžete k hostiteli aplikace přidat připojovací řetězec. Pokud chcete přidat připojení k existujícímu AzurePostgreSQL flexibilnímu serveru, zavolejte metodu AddConnectionString:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddConnectionString("postgres");
builder.AddProject<Projects.WebApplication>("web")
.WithReference(postgres);
// After adding all resources, run the app...
Poznámka
Připojovací řetězce se používají k reprezentaci široké škály informací o připojení, včetně databázových připojení, zprostředkovatelů zpráv, identifikátorů URI koncových bodů a dalších služeb. V .NET.NET Aspire terminologii se výraz "připojovací řetězec" používá k reprezentaci jakéhokoli druhu informací o připojení.
Připojovací řetězec se konfiguruje v konfiguraci hostitele aplikace, obvykle v části Tajné kódy uživatelův části ConnectionStrings
. Hostitel aplikace vloží tento připojovací řetězec jako proměnnou prostředí do všech závislých prostředků, například:
{
"ConnectionStrings": {
"postgres": "Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;"
}
}
Závislý prostředek má přístup k vložení připojovacího řetězce voláním metody GetConnectionString a zadáním názvu připojení jako parametr, v tomto případě "postgres"
. Rozhraní API GetConnectionString
je zkratka pro IConfiguration.GetSection("ConnectionStrings")[name]
.
Spusťte prostředek AzurePostgreSQL jako kontejner
Integrace hostování AzurePostgreSQL podporuje spuštění serveru PostgreSQL jako místního kontejneru. To je užitečné v situacích, kdy chcete spustit PostgreSQL server místně pro účely vývoje a testování, abyste se vyhnuli nutnosti zřídit Azure prostředek nebo se připojit k existujícímu serveru AzurePostgreSQL.
Pokud chcete spustit PostgreSQL server jako kontejner, zavolejte metodu RunAsContainer:
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres")
.RunAsContainer();
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Předchozí kód nakonfiguruje prostředek AzurePostgreSQL Flexibilní Server tak, aby běžel místně v kontejneru.
Spropitné
Metoda RunAsContainer
je užitečná pro místní vývoj a testování. Rozhraní API zveřejňuje volitelný delegát, který umožňuje přizpůsobit základní konfiguraci PostgresServerResource, jako je přidání nástroje pgAdmin, pgWeb, přidání datového svazku nebo připojení datové vazby a přidání připojení inicializační vazby. Další informace najdete v části .NET AspirePostgreSQL integrace hostování.
Nakonfigurujte server AzurePostgreSQL tak, aby používal ověřování heslem.
Ve výchozím nastavení je server AzurePostgreSQL nakonfigurovaný tak, aby používal ověřování ověřování Microsoft Entra ID. Pokud chcete použít ověřování heslem, můžete server nakonfigurovat tak, aby používal ověřování heslem zavoláním metody WithPasswordAuthentication:
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres")
.WithPasswordAuthentication(username, password);
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Předchozí kód nakonfiguruje server AzurePostgreSQL tak, aby používal ověřování heslem. Parametry username
a password
se přidají do hostitele aplikace jako parametry a volá se metoda WithPasswordAuthentication
pro konfiguraci AzurePostgreSQL serveru tak, aby používal ověřování heslem. Další informace naleznete v tématu Externí parametry.
integrace Client
Pokud chcete začít s integrací klienta .NET AspirePostgreSQL, nainstalujte 📦Aspire. Npgsql balíček NuGet v projektu využívajícím klienta, tj. projekt aplikace, která používá klienta PostgreSQL. Integrace klienta PostgreSQL registruje instanci NpgsqlDataSource, kterou můžete použít k interakci s PostgreSQL.
dotnet add package Aspire.Npgsql
Přidání klienta Npgsql
V souboru Program.cs klientského projektu vyvolejte metodu rozšíření AddNpgsqlDataSource na libovolném IHostApplicationBuilder a zaregistrujte NpgsqlDataSource
k použití pomocí kontejneru pro injektáž závislostí. Metoda přebírá parametr názvu připojení.
builder.AddNpgsqlDataSource(connectionName: "postgresdb");
Spropitné
Parametr connectionName
se musí shodovat s názvem použitým při přidávání prostředku serveru PostgreSQL v projektu hostitele aplikace. Další informace najdete v tématu Přidání prostředku serveru PostgreSQL.
Po přidání NpgsqlDataSource
do tvůrce můžete získat instanci NpgsqlDataSource
pomocí injektáže závislostí. Pokud například chcete načíst objekt zdroje dat z ukázkové služby, definujte ho jako parametr konstruktoru a ujistěte se, že je třída ExampleService
zaregistrovaná v kontejneru injektáže závislostí:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
Další informace o injektáži závislostí najdete v tématu .NET injektáž závislostí.
Přidání klienta Npgsql s klíči
Mohou nastat situace, kdy budete chtít zaregistrovat více instancí NpgsqlDataSource
s různými názvy připojení. Pokud chcete zaregistrovat klienty Npgsql s klíči, zavolejte metodu AddKeyedNpgsqlDataSource:
builder.AddKeyedNpgsqlDataSource(name: "chat");
builder.AddKeyedNpgsqlDataSource(name: "queue");
Potom můžete načíst instance NpgsqlDataSource
pomocí injekce závislostí. Pokud například chcete načíst připojení z ukázkové služby:
public class ExampleService(
[FromKeyedServices("chat")] NpgsqlDataSource chatDataSource,
[FromKeyedServices("queue")] NpgsqlDataSource queueDataSource)
{
// Use data sources...
}
Další informace o klíčových službách najdete v tématu .NET injektáž závislostí: klíčové služby.
Konfigurace
Integrace .NET AspirePostgreSQL poskytuje několik přístupů a možností konfigurace, které splňují požadavky a konvence projektu.
Použijte připojovací řetězec
Při použití připojovacího řetězce z oddílu konfigurace ConnectionStrings
můžete při volání metody AddNpgsqlDataSource zadat název připojovacího řetězce:
builder.AddNpgsqlDataSource("postgresdb");
Připojovací řetězec se následně načte z oddílu konfigurace ConnectionStrings
:
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=postgresdb"
}
}
Další informace naleznete v ConnectionString.
Použití zprostředkovatelů konfigurace
Integrace .NET AspirePostgreSQL podporuje Microsoft.Extensions.Configuration. Načte NpgsqlSettings z appsettings.json nebo jiných konfiguračních souborů pomocí klíče Aspire:Npgsql
. Příklad appsettings.json, který konfiguruje některé z možností:
Následující příklad ukazuje soubor appsettings.json, který konfiguruje některé z dostupných možností:
{
"Aspire": {
"Npgsql": {
"ConnectionString": "Host=myserver;Database=postgresdb",
"DisableHealthChecks": false,
"DisableTracing": true,
"DisableMetrics": false
}
}
}
Kompletní schéma integrace klienta PostgreSQLJSON naleznete v části Aspire.Npgsql/ConfigurationSchema.json.
Použití vložených delegátů
Můžete také předat delegáta Action<NpgsqlSettings> configureSettings
a nastavit některé nebo všechny možnosti přímo v kódu, například zakázat zdravotní kontroly:
builder.AddNpgsqlDataSource(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Kontroly stavu
Integrace .NET.NET Aspire ve výchozím nastavení umožňují kontroly stavu pro všechny služby. Další informace naleznete v přehledu integrací .NET.NET Aspire.
- Přidá
NpgSqlHealthCheck
, který ověří, že příkazy lze úspěšně spustit na podkladové Postgres databázi. - Integruje se s koncovým bodem HTTP
/health
, který stanoví, že všechny registrované kontroly stavu musí být úspěšné, aby byla aplikace považována za připravenou k přijímání provozu.
Pozorovatelnost a telemetrie
.NET .NET Aspire integrace automaticky nastaví konfigurace protokolování, trasování a metrik, které se někdy označují jako pilířů pozorovatelnosti. Další informace o pozorovatelnosti a telemetrii integrace najdete v přehledu integrace .NET.NET Aspire. V závislosti na zálohovací službě můžou některé integrace podporovat pouze některé z těchto funkcí. Například některé integrace podporují protokolování a trasování, ale ne metriky. Funkce telemetrie je také možné zakázat pomocí technik uvedených v části Konfigurace.
Protokolování
Integrace .NET AspirePostgreSQL používá následující kategorie protokolů:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Trasování
Integrace .NET AspirePostgreSQL s použitím OpenTelemetryvygeneruje následující aktivity trasování:
Npgsql
Metriky
Integrace .NET AspirePostgreSQL pomocí OpenTelemetryvygeneruje následující metriky:
- 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
Přidat ověřeného klienta Npgsql Azure
Ve výchozím nastavení se při volání AddAzurePostgresFlexibleServer
v PostgreSQL hostování integrace nakonfiguruje 📦Azure. Identita balíčku NuGet pro povolení ověřování:
dotnet add package Azure.Identity
Připojení PostgreSQL je možné využívat pomocí integrace klienta a Azure.Identity:
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));
});
Předchozí fragment kódu ukazuje použití třídy DefaultAzureCredential z balíčku Azure.Identity k ověření pomocí Microsoft Entra ID a načtení tokenu pro připojení k databázi PostgreSQL. Metoda UsePeriodicPasswordProvider slouží k poskytnutí tokenu tvůrci připojovacího řetězce.
Viz také
- PostgreSQL docs
- Azure Databáze pro PostgreSQL
- .NET Aspire PostgreSQL integrace
- integrace .NET.NET Aspire
- .NET Aspire GitHub úložiště