Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obejmuje: integrację hostingu —
Client
Azure Database for PostgreSQL—Elastyczny Server to usługa relacyjnej bazy danych oparta na silniku bazy danych typu open source Postgres. Jest to w pełni zarządzana baza danych jako usługa, która może obsługiwać obciążenia o krytycznym znaczeniu z przewidywalną wydajnością, zabezpieczeniami, wysoką dostępnością i dynamiczną skalowalnością. Integracja .NET AspireAzurePostgreSQL pozwala łączyć się z istniejącymi AzurePostgreSQL bazami danych lub tworzyć nowe wystąpienia na podstawie .NETobrazu konteneradocker.io/library/postgres
.
Integracja hostingu
.NET Aspire Azure PostgreSQL integracja hostowania modeluje PostgreSQL elastyczny serwer i bazę danych jako typy AzurePostgresFlexibleServerResource i AzurePostgresFlexibleServerDatabaseResource. Inne typy, które są z natury dostępne w integracji hostingu, są reprezentowane w następujących zasobach:
Aby uzyskać dostęp do tych typów i interfejsów API do wyrażania ich jako zasobów w projekcie hosta aplikacji, zainstaluj pakiet NuGet 📦Aspire.Hosting.Azure.PostgreSQL:
dotnet add package Aspire.Hosting.Azure.PostgreSQL
Aby uzyskać więcej informacji, zobacz dotnet add package.
Integracja hostingu AzurePostgreSQL jest zależna od pakietu NuGet 📦Aspire.Hosting.PostgreSQL, rozszerzając go w celu obsługi Azure. Wszystko, co możesz zrobić z integracją .NET AspirePostgreSQL i integracją .NET AspirePostgreSQLEntity Framework Core, możesz również wykonać z tą integracją.
Dodawanie zasobu serwera AzurePostgreSQL
Po zainstalowaniu integracji hostingu .NET AspireAzurePostgreSQL wywołaj metodę rozszerzenia AddAzurePostgresFlexibleServer w projekcie hostującym aplikację.
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
Poprzednie wywołanie AddAzurePostgresFlexibleServer
konfiguruje zasób serwera PostgresSQL do wdrożenia jako AzurePostgres Elastyczny Server.
Ważny
Domyślnie AddAzurePostgresFlexibleServer
konfiguruje uwierzytelnianie identyfikatora Entra firmy Microsoft . Wymaga to zmian w aplikacjach, które muszą łączyć się z tymi zasobami. Aby uzyskać więcej informacji, zobacz Client integracja.
Napiwek
Podczas wywołania AddAzurePostgresFlexibleServernastępuje również niejawne wywołanie AddAzureProvisioning, co dodaje możliwość dynamicznego generowania zasobów Azure podczas uruchamiania aplikacji. Aplikacja musi skonfigurować odpowiednią subskrypcję i lokalizację. Aby uzyskać więcej informacji, zobacz Local provisioning: Configuration (Aprowizowanie lokalne: konfiguracja).
Bicep wygenerowany przez prowizjonowanie
Jeśli dopiero zaczynasz korzystać z aplikacji Bicep, jest to język specyficzny dla domeny do definiowania Azure zasobów. W przypadku .NET.NET Aspirenie musisz ręcznie pisać aplikacji Bicep, ponieważ interfejsy API aprowizacji generują dla Ciebie kod Bicep. Podczas publikowania aplikacji, wygenerowany plik Bicep zostaje wyeksportowany razem z plikiem manifestu. Po dodaniu zasobu AzurePostgreSQL zostanie wygenerowany następujący Bicep:
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
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
}
output connectionString string = 'Host=${postgres_flexible.properties.fullyQualifiedDomainName}'
output name string = postgres_flexible.name
Poprzedni Bicep to moduł, który dostarcza elastyczny zasób serwera AzurePostgreSQL. Ponadto w osobnym module tworzone są przypisania ról dla zasobu Azure.
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param postgres_flexible_outputs_name string
param principalType string
param principalId string
param principalName string
resource postgres_flexible 'Microsoft.DBforPostgreSQL/flexibleServers@2024-08-01' existing = {
name: postgres_flexible_outputs_name
}
resource postgres_flexible_admin 'Microsoft.DBforPostgreSQL/flexibleServers/administrators@2024-08-01' = {
name: principalId
properties: {
principalName: principalName
principalType: principalType
}
parent: postgres_flexible
}
Oprócz elastycznego serwera PostgreSQL, konfiguruje również regułę zapory Azure, która zezwala na wszystkie adresy IP Azure. Na koniec dla serwera PostgreSQL jest tworzony administrator, a parametry połączenia są zwracane jako zmienna wyjściowa. Wygenerowany Bicep jest punktem wyjścia i ma wpływ na zmiany w infrastrukturze aprowizacji w języku C#. Modyfikacje pliku Bicep, które zostaną wprowadzone bezpośrednio, będą nadpisane. Dlatego należy wprowadzać je za pośrednictwem interfejsów API aprowizowania w języku C#, aby zapewnić, że zostaną odzwierciedlone w wygenerowanych plikach.
Dostosowywanie infrastruktury aprowizacji
Wszystkie zasoby .NET AspireAzure to podklasy typu AzureProvisioningResource. Ten typ umożliwia dostosowanie wygenerowanego elementu Bicep, oferując płynny interfejs API do konfiguracji zasobów Azure za pomocą interfejsu API ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Można na przykład skonfigurować kind
, consistencyPolicy
, locations
i więcej. W poniższym przykładzie pokazano, jak dostosować zasób serwera PostgreSQL:
builder.AddAzurePostgresFlexibleServer("postgres")
.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");
});
Powyższy kod:
- Łańcuch wywołania interfejsu API ConfigureInfrastructure:
- Parametr
infra
jest wystąpieniem typu AzureResourceInfrastructure. - Zasoby możliwe do aprowizacji są pobierane przez wywołanie metody GetProvisionableResources().
- Uzyskano pojedynczy element PostgreSqlFlexibleServer.
-
sku
jest ustawione za pomocą PostgreSqlFlexibleServerSkuTier.Burstable. - Właściwości wysokiej dostępności są ustawiane za pomocą PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundant w zapasowej strefie dostępności
"2"
. - Do elastycznego serwera dodawany jest tag z kluczem
ExampleKey
i wartościąExample value
.
- Parametr
Dostępnych jest wiele opcji konfiguracji umożliwiających dostosowanie PostgreSQL zasobu serwera elastycznego. Aby uzyskać więcej informacji, zobacz Azure.Provisioning.PostgreSql i Azure. Dostosowywanie konfiguracji.
Nawiąż połączenie z istniejącym serwerem elastycznym AzurePostgreSQL
Być może masz istniejący serwer elastyczny AzurePostgreSQL, z którym chcesz nawiązać połączenie. Połącz wywołanie z adnotacją, że AzurePostgresFlexibleServerResource jest to istniejący zasób:
var builder = DistributedApplication.CreateBuilder(args);
var existingPostgresName = builder.AddParameter("existingPostgresName");
var existingPostgresResourceGroup = builder.AddParameter("existingPostgresResourceGroup");
var postgres = builder.AddAzurePostgresFlexibleServer("postgres")
.AsExisting(existingPostgresName, existingPostgresResourceGroup);
builder.AddProject<Projects.ExampleProject>()
.WithReference(postgres);
// After adding all resources, run the app...
Aby uzyskać więcej informacji na temat traktowania AzurePostgreSQL elastycznych zasobów serwera jako istniejących zasobów, zobacz Korzystanie z istniejących Azure zasobów.
Uwaga
Alternatywnie, zamiast reprezentować zasób elastycznego serwera AzurePostgreSQL, można dodać ciąg połączenia do hosta aplikacji. Takie podejście jest słabo typizowane i nie działa z przypisaniami ról ani dostosowaniami infrastruktury. Aby uzyskać więcej informacji, zobacz Dodaj istniejące zasoby Azure z parametrami połączenia.
Uruchamianie zasobu AzurePostgreSQL jako kontenera
Integracja hostowania AzurePostgreSQL obsługuje uruchamianie serwera PostgreSQL jako kontenera lokalnego. Jest to korzystne w sytuacjach, w których chcesz uruchomić serwer PostgreSQL lokalnie na potrzeby programowania i testowania, unikając konieczności aprowizacji zasobu Azure lub nawiązywania połączenia z istniejącym serwerem AzurePostgreSQL.
Aby uruchomić serwer PostgreSQL jako kontener, wywołaj metodę 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);
Powyższy kod konfiguruje zasób AzurePostgreSQL Elastyczny Server do uruchamiania lokalnego w kontenerze.
Napiwek
Metoda RunAsContainer
jest przydatna w przypadku lokalnego programowania i testowania. API udostępnia opcjonalnego delegata, który umożliwia dostosowanie podstawowej konfiguracji PostgresServerResource. Na przykład możesz dodać narzędzie pgAdmin i pgWeb, dodać wolumin danych lub powiązanie danych, oraz dodać powiązanie init. Aby uzyskać więcej informacji, zobacz sekcję dotyczącą integracji hostingu.NET AspirePostgreSQL.
Konfigurowanie serwera AzurePostgreSQL do korzystania z uwierzytelniania haseł
Domyślnie AzurePostgreSQL serwer jest skonfigurowany do używania uwierzytelniania identyfikatora Entra firmy Microsoft . Jeśli chcesz użyć uwierzytelniania za pomocą hasła, możesz skonfigurować serwer do korzystania z uwierzytelniania haseł, wywołując metodę 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);
Powyższy kod konfiguruje serwer AzurePostgreSQL do korzystania z uwierzytelniania haseł. Parametry username
i password
są dodawane do hosta aplikacji jako parametry, a metoda WithPasswordAuthentication
jest wywoływana w celu skonfigurowania serwera AzurePostgreSQL do używania uwierzytelniania haseł. Aby uzyskać więcej informacji, zobacz Parametry zewnętrzne.
integracja Client
Aby rozpocząć pracę z integracją .NET AspireAzurePostgreSQL klienta, zainstaluj pakiet NuGet 📦Aspire.Azure.Npgsql w projekcie aplikacji korzystającej z PostgreSQL klienta. Integracja PostgreSQL klienta rejestruje wystąpienie NpgsqlDataSource, którego można użyć do interakcji z PostgreSQL.
dotnet add package Aspire.Azure.Npgsql
Połączenie PostgreSQL można wykorzystać przy użyciu integracji klienta, wywołując AddAzureNpgsqlDataSource
.
builder.AddAzureNpgsqlDataSource(connectionName: "postgresdb");
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu serwera PostgreSQL w projekcie hosta aplikacji.
W poprzednim fragmencie kodu pokazano, jak za pomocą metody AddAzureNpgsqlDataSource
zarejestrować wystąpienie NpgsqlDataSource
, które korzysta z uwierzytelniania Azure (Microsoft Entra ID). Ta "postgresdb"
nazwa połączenia odpowiada wartości konfiguracji parametrów połączenia.
Po dodaniu NpgsqlDataSource
do buildera, można uzyskać instancję NpgsqlDataSource
za pomocą wstrzykiwania zależności. Na przykład aby pobrać obiekt źródła danych z przykładowej usługi, zdefiniuj go jako parametr konstruktora i upewnij się, że klasa ExampleService
jest zarejestrowana w kontenerze iniekcji zależności:
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
Aby uzyskać więcej informacji na temat wstrzykiwania zależności, zobacz .NET wstrzykiwanie zależności.
Dodaj klucz Azure klienta Npgsql
Mogą wystąpić sytuacje, w których chcesz zarejestrować wiele wystąpień NpgsqlDataSource
z różnymi nazwami połączeń. Aby zarejestrować kluczowych klientów Npgsql, wywołaj metodę AddKeyedAzureNpgsqlDataSource
.
builder.AddKeyedAzureNpgsqlDataSource(name: "sales_db");
builder.AddKeyedAzureNpgsqlDataSource(name: "inventory_db");
Następnie można uzyskać wystąpienia NpgsqlDataSource
, korzystając z wstrzykiwania zależności. Aby na przykład pobrać połączenie z przykładowej usługi:
public class ExampleService(
[FromKeyedServices("sales_db")] NpgsqlDataSource salesDataSource,
[FromKeyedServices("inventory_db")] NpgsqlDataSource inventoryDataSource)
{
// Use data sources...
}
Aby uzyskać więcej informacji na temat usług opartych na kluczach, zobacz .NET wstrzykiwanie zależności: usługi oparte na kluczach.
Konfiguracja
Integracja serwera .NET AspireAzure Npgsql oferuje wiele opcji konfigurowania połączenia bazy danych na podstawie wymagań i konwencji projektu.
Użyj łańcucha połączenia
W przypadku używania parametrów połączenia zdefiniowanych w ConnectionStrings
sekcji konfiguracji należy podać nazwę parametrów połączenia podczas wywoływania polecenia AddAzureNpgsqlDataSource
:
builder.AddAzureNpgsqlDataSource("postgresdb");
Parametry połączenia są pobierane z ConnectionStrings
sekcji konfiguracji, na przykład należy wziąć pod uwagę następującą JSON konfigurację:
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=test"
}
}
Aby uzyskać więcej informacji na temat konfigurowania parametrów połączenia, zobacz dokumentację parametrów połączenia npgsql.
Uwaga
Nazwa użytkownika i hasło są automatycznie wnioskowane z poświadczeń podanych w ustawieniach.
Korzystanie z dostawców konfiguracji
Integracja z .NET AspireAzure serwerem Npgsql obsługuje funkcję Microsoft.Extensions.Configuration. Ładuje element AzureNpgsqlSettings
z konfiguracji przy użyciu klucza Aspire:Azure:Npgsql
. Rozważmy na przykład następujący plik appsettings.json , który konfiguruje niektóre z dostępnych opcji:
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
Używaj delegatów wewnętrznych
Ustawienia w kodzie można skonfigurować, przekazując delegata Action<AzureNpgsqlSettings> configureSettings
w celu skonfigurowania niektórych lub wszystkich wbudowanych opcji, na przykład w celu wyłączenia kontroli kondycji z kodu:
builder.AddAzureNpgsqlDataSource(
"postgresdb",
settings => settings.DisableHealthChecks = true);
Użyj właściwości AzureNpgsqlSettings.Credential
, aby nawiązać połączenie. Jeśli żadne poświadczenie nie jest skonfigurowane, użyte zostanie DefaultAzureCredential. Gdy parametry połączenia zawierają nazwę użytkownika i hasło, poświadczenie jest ignorowane.
Client kontrole stanu integracji
Domyślnie .NET.NET Aspireintegracje klientów mają włączone kontrole kondycji dla wszystkich usług. Podobnie wiele .NET.NET Aspireintegracji hostingu umożliwia również punkty końcowe sprawdzania kondycji. Aby uzyskać więcej informacji, zobacz:
- Dodaje
NpgSqlHealthCheck
, który sprawdza, czy polecenia można pomyślnie wykonać wobec podstawowej bazy danych Postgres. - Integruje się z punktem końcowym HTTP
/health
, który wymaga, aby wszystkie zarejestrowane kontrole zdrowotności zostały pomyślnie zakończone, aby aplikacja została uznana za gotową do akceptowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie konfigurują konfiguracje rejestrowania, śledzenia i metryk, które są czasami nazywane filarami obserwacji. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz .NET.NET Aspire Omówienie integracji. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Logowanie
Integracja .NET AspirePostgreSQL używa następujących kategorii dzienników:
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
Śledzenie
Integracja .NET AspirePostgreSQL spowoduje generowanie następujących działań śledzenia przy użyciu OpenTelemetry:
Npgsql
Metryki
Integracja .NET AspirePostgreSQL będzie emitować następujące metryki przy użyciu OpenTelemetry:
- 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