含まれているもの: ホスティング統合 —および—
Client 統合
Azure Database for PostgreSQL—フレキシブル Server は、オープンソースの Postgres データベース エンジンに基づくリレーショナル データベース サービスです。 これは、予測可能なパフォーマンス、セキュリティ、高可用性、動的なスケーラビリティを備えたミッション クリティカルなワークロードを処理できる、フル マネージドのサービスとしてのデータベースです。 .NET AspireAzurePostgreSQL 統合により、既存の AzurePostgreSQL データベースに接続したり、.NETを使用して docker.io/library/postgres
から新しいインスタンスを作成したりできます。
ホスティング統合
.NET AspireAzurePostgreSQL ホスティング統合は、PostgreSQL フレキシブル サーバーとデータベースを AzurePostgresFlexibleServerResource および AzurePostgresFlexibleServerDatabaseResource の種類としてモデル化します。 ホスティング統合で本質的に使用できるその他の種類は、次のリソースで表されます。
これらの型と API にアクセスして、アプリ ホスト プロジェクト内のリソースとして表現するには、📦Aspire.Hosting.Azure.PostgreSQL NuGet パッケージをインストールします。
dotnet add package Aspire.Hosting.Azure.PostgreSQL
詳細については、「dotnet add package」を参照してください。
AzurePostgreSQL ホスティング統合は 📦Aspire.Hosting に依存しています。NuGet パッケージPostgreSQL を拡張して Azureをサポートします。 .NET AspirePostgreSQL 統合 と .NET AspirePostgreSQLEntity Framework Core 統合を使用して実行できることはすべて、この統合でも実行。
サーバー リソース AzurePostgreSQL 追加する
.NET AspireAzurePostgreSQL ホスティング統合をインストールしたら、アプリ ホスト プロジェクトで AddAzurePostgresFlexibleServer 拡張メソッドを呼び出します。
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddAzurePostgresFlexibleServer("postgres");
var postgresdb = postgres.AddDatabase("postgresdb");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(postgresdb);
上記の AddAzurePostgresFlexibleServer
の呼び出しでは、PostgresSQL サーバー リソースを AzurePostgres フレキシブル Serverとしてデプロイするように構成します。
大事な
既定では、AddAzurePostgresFlexibleServer
は Microsoft Entra ID 認証を構成します。 これには、これらのリソースに接続する必要があるアプリケーションを変更する必要があります。 詳細については Client の統合を参照してください。
ヒント
AddAzurePostgresFlexibleServerを呼び出すと、暗黙的に AddAzureProvisioningが呼び出されます。これによって、アプリの起動時に Azure リソースを動的に生成するためのサポートが追加されます。 アプリは、適切なサブスクリプションと場所を構成する必要があります。 詳細については、「ローカル プロビジョニング: 構成」を参照してください。
プロビジョニングによって生成されたBicep
Bicepを初めて使用する場合、それは Azure リソースを定義するためのドメイン固有の言語です。 .NET.NET Aspireでは、プロビジョニング API によって Bicep が生成されるため、Bicep を手動で記述する必要はありません。 アプリを発行すると、生成された Bicep がマニフェスト ファイルと共に出力されます。 AzurePostgreSQL リソースを追加すると、次の 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
上記の Bicep は、 AzurePostgreSQL フレキシブル サーバー リソースをプロビジョニングするモジュールです。 さらに、ロールの割り当ては、別のモジュールで 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
}
PostgreSQL フレキシブル サーバーに加えて、すべての Azure IP アドレスを許可する Azure ファイアウォール規則もプロビジョニングします。 最後に、PostgreSQL サーバーの管理者が作成され、接続文字列が出力変数として出力されます。 生成された Bicep は開始点であり、C# のプロビジョニング インフラストラクチャへの変更の影響を受ける。 Bicep ファイルのカスタマイズは直接上書きされるため、C# プロビジョニング API を通じて変更を加えて、生成されたファイルに反映されるようにします。
プロビジョニング インフラストラクチャをカスタマイズする
すべての .NET AspireAzure リソースは、AzureProvisioningResource 型のサブクラスです。 この型では、Azure API を使用して ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) リソースを構成する fluent API を提供することで、生成された Bicep をカスタマイズできます。 たとえば、kind
、consistencyPolicy
、locations
などを構成できます。 次の例では、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");
});
上記のコード:
- ConfigureInfrastructure API への呼び出しを連鎖させます。
infra
パラメーターは、AzureResourceInfrastructure 型のインスタンスです。- プロビジョニング可能なリソースは、GetProvisionableResources() メソッドを呼び出すことによって取得されます。
- 1つのPostgreSqlFlexibleServerが取得されました。
sku
は PostgreSqlFlexibleServerSkuTier.Burstableで設定されます。- 高可用性プロパティは、スタンバイ可用性ゾーン PostgreSqlFlexibleServerHighAvailabilityMode.ZoneRedundantの
"2"
で設定されます。 - フレキシブルサーバーに、キーが
ExampleKey
で値がExample value
のタグが追加されます。
PostgreSQL フレキシブル サーバー リソースをカスタマイズするために、さらに多くの構成オプションを使用できます。 詳細については、
既存の AzurePostgreSQL フレキシブル サーバーに接続する
接続する既存の AzurePostgreSQL フレキシブル サーバーがある場合があります。 AzurePostgresFlexibleServerResourceが既存のリソースであることを注釈する呼び出しをチェーンします。
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...
フレキシブル サーバー リソースAzurePostgreSQL既存のリソースとして扱う方法の詳細については、「既存のAzure リソースを使用する」を参照してください。
手記
または、 AzurePostgreSQL フレキシブル サーバー リソースを表す代わりに、接続文字列をアプリ ホストに追加することもできます。 このアプローチは弱く型指定されており、ロールの割り当てやインフラストラクチャのカスタマイズでは機能しません。 詳細については、「Azureを使用して既存の リソースを追加する」を参照してください。
コンテナーとしてリソース AzurePostgreSQL 実行する
AzurePostgreSQL ホスティング統合では、PostgreSQL サーバーをローカル コンテナーとして実行できます。 これは、PostgreSQL リソースをプロビジョニングしたり、既存の AzureAzure サーバーに接続したりする必要がないように、開発およびテストのために PostgreSQL サーバーをローカルで実行する場合に役立ちます。
PostgreSQL サーバーをコンテナーとして実行するには、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);
上記のコードでは、コンテナー内でローカルに実行するように AzurePostgreSQL フレキシブル Server リソースを構成します。
ヒント
RunAsContainer
メソッドは、ローカルの開発とテストに役立ちます。 API は、基になる PostgresServerResource 構成をカスタマイズできる省略可能なデリゲートを公開します。 たとえば、pgAdmin と pgWeb を追加し、データ ボリュームまたはデータ バインド マウントを追加し、init バインド マウントを追加できます。 詳細については、「.NET AspirePostgreSQL ホスティング統合の」セクションを参照してください。
パスワード認証を使用するように AzurePostgreSQL サーバーを構成する
既定では、AzurePostgreSQL サーバーは Microsoft Entra ID 認証 使用するように構成されています。 パスワード認証を使用する場合は、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);
前のコードでは、パスワード認証を使用するように AzurePostgreSQL サーバーを構成します。 username
パラメーターと password
パラメーターがパラメーターとしてアプリ ホストに追加され、パスワード認証を使用するように WithPasswordAuthentication
Azure サーバーを構成するために PostgreSQL メソッドが呼び出されます。 詳細については、「外部パラメーター
Client 統合
.NET AspireAzurePostgreSQL クライアント統合を開始するには、📦Aspire.Azureをインストールします。クライアントを使用するプロジェクト (つまり、PostgreSQL クライアントを使用するアプリケーションのプロジェクト) の Npgsql NuGet パッケージ。 PostgreSQL クライアント統合は、との対話に使用できる PostgreSQL インスタンスを登録します。
dotnet add package Aspire.Azure.Npgsql
PostgreSQL接続は、AddAzureNpgsqlDataSource
を呼び出すことによって、クライアント統合を使用して使用できます。
builder.AddAzureNpgsqlDataSource(connectionName: "postgresdb");
ヒント
connectionName
パラメーターは、アプリ ホスト プロジェクトに PostgreSQL サーバー リソースを追加するときに使用する名前と一致する必要があります。
前のコード スニペットは、AddAzureNpgsqlDataSource
メソッドを使用して、NpgsqlDataSource
認証 (Azure) を使用する インスタンスを登録する方法を示しています。 この "postgresdb"
接続名は、接続文字列の構成値に対応します。
ビルダーに NpgsqlDataSource
を追加した後、依存関係の挿入を使用して NpgsqlDataSource
インスタンスを取得できます。 たとえば、サンプル サービスからデータ ソース オブジェクトを取得するには、それをコンストラクター パラメーターとして定義し、ExampleService
クラスが依存関係挿入コンテナーに登録されていることを確認します。
public class ExampleService(NpgsqlDataSource dataSource)
{
// Use dataSource...
}
依存関係の挿入の詳細については .NET を参照してください (依存関係の挿入).
キー付きのNpgsqlクライアントを追加する
接続名が異なる複数の NpgsqlDataSource
インスタンスを登録する場合があります。 キー付き Npgsql クライアントを登録するには、AddKeyedAzureNpgsqlDataSource
メソッドを呼び出します。
builder.AddKeyedAzureNpgsqlDataSource(name: "sales_db");
builder.AddKeyedAzureNpgsqlDataSource(name: "inventory_db");
その後、依存関係の挿入を使用して NpgsqlDataSource
インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。
public class ExampleService(
[FromKeyedServices("sales_db")] NpgsqlDataSource salesDataSource,
[FromKeyedServices("inventory_db")] NpgsqlDataSource inventoryDataSource)
{
// Use data sources...
}
キー付きサービスの詳細については、「.NET 依存関係の挿入: キー付きサービスの」を参照してください。
設定
.NET AspireAzure Npgsql 統合には、プロジェクトの要件と規則に基づいてデータベース接続を構成するための複数のオプションが用意されています。
接続文字列を使用する
ConnectionStrings
構成セクションで定義されている接続文字列を使用する場合は、AddAzureNpgsqlDataSource
を呼び出すときに接続文字列の名前を指定します。
builder.AddAzureNpgsqlDataSource("postgresdb");
接続文字列は、 ConnectionStrings
構成セクションから取得されます。たとえば、次の JSON 構成を考えてみましょう。
{
"ConnectionStrings": {
"postgresdb": "Host=myserver;Database=test"
}
}
接続文字列を構成する方法の詳細については、 Npgsql 接続文字列のドキュメントを参照してください。
手記
ユーザー名とパスワードは、設定で指定された資格情報から自動的に推論されます。
構成プロバイダーを使用する
.NET AspireAzure Npgsql 統合では、Microsoft.Extensions.Configurationがサポートされます。 AzureNpgsqlSettings
キーを使用して、構成からAspire:Azure:Npgsql
を読み込みます。 たとえば、使用可能なオプションの一部を構成する次の appsettings.json ファイルについて考えてみます。
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
インライン デリゲートを使用する
コードで設定を構成するには、 Action<AzureNpgsqlSettings> configureSettings
デリゲートを渡して、一部またはすべてのオプションをインラインで設定します。たとえば、コードから正常性チェックを無効にすることができます。
builder.AddAzureNpgsqlDataSource(
"postgresdb",
settings => settings.DisableHealthChecks = true);
接続を確立するには、 AzureNpgsqlSettings.Credential
プロパティを使用します。 資格情報が構成されていない場合は、DefaultAzureCredential が使用されます。 接続文字列にユーザー名とパスワードが含まれている場合、資格情報は無視されます。
Client 統合ヘルスチェック
既定では、.NET.NET Aspireクライアント統合 すべてのサービスで 正常性チェック 有効になっています。 同様に、多くの .NET.NET Aspireホスティング統合 もヘルスチェックエンドポイントを有効にします。 詳細については、以下を参照してください。
- C#でのアプリ正常性チェック .NET
- ASP.NET Core における健康診断
- 基になる
NpgSqlHealthCheck
データベースに対してコマンドが正常に実行できることを確認する Postgresを追加します。 /health
HTTP エンドポイントと統合します。このエンドポイントは、アプリがトラフィックを受け入れる準備ができていると見なされるために、登録されているすべての正常性チェックに合格する必要があります
可観測性とテレメトリ
.NET.NET Aspire 統合により、ログ記録、トレース、メトリックの構成が自動的に設定されます。これは、監視 の柱とも呼ばれます。 統合の可観測性とテレメトリの詳細については、統合の概要 .NET.NET Aspire 参照してください。 バッキング サービスによっては、一部の統合でこれらの機能の一部のみがサポートされる場合があります。 たとえば、一部の統合ではログ記録とトレースがサポートされますが、メトリックはサポートされません。 テレメトリ機能は、「構成」セクションに記載されている手法を使用して無効にすることもできます。
伐採
.NET AspirePostgreSQL 統合では、次のログ カテゴリが使用されます。
Npgsql.Connection
Npgsql.Command
Npgsql.Transaction
Npgsql.Copy
Npgsql.Replication
Npgsql.Exception
追跡
.NET AspirePostgreSQL 統合では、OpenTelemetryを使用して次のトレース アクティビティが出力されます。
Npgsql
メトリック
.NET AspirePostgreSQL 統合では、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
参照
.NET Aspire