Dapr を .NET Aspire で使用する
分散アプリケーション ランタイム (Dapr) は、他のサービスや依存関係と対話するためのコンジットとして機能し、それらのサービスと依存関係の詳細からアプリケーションを抽象化する開発者 API を提供します。 Dapr と .NET Aspire が連携して、ローカル開発エクスペリエンスを向上させます。 Daprで .NET Aspire を使用することで、ローカル オンボードに余分な時間を費やすのではなく、.NETベースの分散アプリケーションの作成と実装に集中できます。
このガイドでは、Daprの抽象化と .NET Aspireのクラウド テクノロジのオピニオン構成を利用して、Azureで大規模にシンプルで移植性があり、回復性があり、セキュリティで保護されたマイクロサービスを構築する方法について説明します。
前提 条件
.NET .NET Aspireを使用するには、次のものがローカルにインストールされている必要があります。
- .NET 8.0 または .NET 9.0
- OCI 準拠のコンテナー ランタイム。次に例を示します。
- デスクトップまたは
は です。 詳細については、 の「コンテナーランタイム」を参照してください。
- デスクトップまたは
- 次のような統合開発者環境 (IDE) またはコード エディター。
- Visual Studio 2022 バージョン17.9以降(オプション)
-
Visual Studio Code (省略可能)
- C# Dev Kit: 拡張 (省略可能)
- JetBrains Rider と .NET.NET Aspire プラグイン (省略可能)
詳細については、
.NET .NET Aspireの前提条件に加えて、次のものが必要です。
- Dapr バージョン 1.13 以降
dapr init
を初期化 Dapr」で説明されている を実行します。
大事な
Dapr CLI なしでアプリを実行しようとすると、次のエラーが表示されます。
Unable to locate the Dapr CLI.
作業の開始
開始するには、
dotnet add package Aspire.Hosting.Dapr
詳細については、「dotnet パッケージ の追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。
Dapr サイドカーを追加する
あなたのアプリケーションと共に実行するために、Dapr では、サイドカー パターン を使用します。 Dapr サイドカーは、軽量で移植可能でステートレスな HTTP server としてアプリと共に実行され、アプリからの受信 HTTP 要求をリッスンします。
サイドカーを .NET.NET Aspire リソースに追加するには、目的のリソースに対して WithDaprSidecar メソッドを呼び出します。
appId
パラメーターは、Dapr アプリケーションの一意の識別子ですが、任意です。
appId
を指定しない場合は、代わりに親リソース名が使用されます。
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
WithDaprSidecar
メソッドは、アプリ ID やポートなどの Dapr サイドカー オプションを構成するためのオーバーロードを提供します。 次の例では、Dapr サイドカーは、GRPC、HTTP、メトリック、および特定のアプリ ID 用の特定のポートで構成されています。
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
すべてをまとめる場合は、次の例を含む .NET.NET Aspire アプリ ホスト プロジェクトを考えてみましょう。
- 既定で Dapr サイドカーを宣言するバックエンド API。
- 特定のオプション (例: explict ポート) を持つ Dapr サイドカーを宣言するフロントエンド。
using Aspire.Hosting.Dapr;
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder
.AddProject<Projects.Dapr_ApiService>("apiservice")
.WithDaprSidecar();
DaprSidecarOptions sidecarOptions = new()
{
DaprGrpcPort = 50001,
DaprHttpPort = 3500,
MetricsPort = 9090
};
builder.AddProject<Projects.Dapr_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService)
.WithDaprSidecar(sidecarOptions);
builder.Build().Run();
.NET Aspire ダッシュボードには、Dapr サイドカーがリソースとして表示され、その状態とログが表示されます。
Dapr SDK の追加
Dapr リソースから .NET Aspire API を使用するには、📦Daprを使用します。AspNetCore/. Dapr SDK には、Dapr サイドカーと対話するための一連の API が用意されています。
手記
Dapr.AspNetCore
との Dapr 統合 (DI 統合、サブスクリプションの登録など) には、ASP.NET ライブラリを使用します。
ASP.NET 以外のアプリ (コンソール アプリなど) は、Dapr。
dotnet add package Dapr.AspNetCore
ASP.NET Core プロジェクトにインストールすると、SDK をサービス ビルダーに追加できます。
builder.Services.AddDaprClient();
DaprClient
のインスタンスをサービスに挿入して、Dapr SDK を介して Dapr サイドカーと対話できるようになりました。
using Dapr.Client;
namespace Dapr.Web;
public class WeatherApiClient(DaprClient client)
{
public async Task<WeatherForecast[]> GetWeatherAsync(
int maxItems = 10, CancellationToken cancellationToken = default)
{
List<WeatherForecast>? forecasts =
await client.InvokeMethodAsync<List<WeatherForecast>>(
HttpMethod.Get,
"apiservice",
"weatherforecast",
cancellationToken);
return forecasts?.Take(maxItems)?.ToArray() ?? [];
}
}
public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
InvokeMethodAsync
は、Dapr サイドカーに HTTP 要求を送信するメソッドです。 これは、以下を受け取る一般的なメソッドです。
- HTTP 動詞
- 呼び出すサービスのアプリID Dapr
- メソッド名
- キャンセル トークン
HTTP 動詞によっては、要求本文とヘッダーを受け取ることもできます。 ジェネリック型パラメーターは、応答本文の型です。
フロントエンド プロジェクトの完全な Program.cs ファイルには、次の情報が表示されます。
- サービス ビルダーに Daprclient が追加される
-
WeatherApiClient
Dapr を使用してバックエンド サービスを呼び出す client クラス
using Dapr.Web;
using Dapr.Web.Components;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire components.
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddOutputCache();
builder.Services.AddDaprClient();
builder.Services.AddTransient<WeatherApiClient>();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAntiforgery();
app.UseOutputCache();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.MapDefaultEndpoints();
app.Run();
たとえば、Blazor プロジェクトでは、WeatherApiClient
クラスを統合に挿入し、バックエンド サービスの呼び出しに使用できます。
@page "/weather"
@attribute [StreamRendering(true)]
@attribute [OutputCache(Duration = 5)]
@inject WeatherApiClient WeatherApi
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data loaded from a backend API service.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await WeatherApi.GetWeatherAsync();
}
}
Dapr SDK を使用すると、Dapr サイドカーが HTTP 経由で呼び出されます。 その後、Dapr サイドカーは、要求をターゲット サービスに転送します。 ターゲット サービスはサイドカーとは別のプロセスで実行されますが、サービスに関連する統合は Dapr サイドカーで実行され、サービスの検出とターゲット サービスへの要求のルーティングを担当します。
Dapr と .NET Aspire
一目で Dapr と .NET Aspire は、機能が重複しているように見える場合があります。 ただし、どちらも異なるアプローチを採用しています。 .NET .NET Aspire は、クラウド プラットフォームで分散アプリケーションを構築する方法に関するオピニオンアプローチです。 Dapr は、基になるクラウド プラットフォームの一般的な複雑さを抽象化するランタイムです。 サイドカーに依存して、構成、シークレット管理、メッセージングなどの抽象化を提供します。 基になるテクノロジは構成ファイルを使用して簡単に切り替えることができますが、コードを変更する必要はありません。
.NET Aspire では、Dapr サイドカーを構成する簡単な API を提供し、サイドカーをリソースとしてダッシュボードに公開することで、Dapr アプリケーションの設定とデバッグを容易にします。
Dapr を使用して .NET Aspire コンポーネントを調べる
Dapr には多くの 組み込みコンポーネントが用意されており、Dapr で .NET Aspire を使用すると、これらのコンポーネントを簡単に探索して構成できます。 これらのコンポーネントを .NET.NET Aspire 統合と混同しないでください。 たとえば、次の点を考えてみましょう。
- Dapr—状態ストア: AddDaprStateStore を呼び出して、構成済みの状態ストアを .NET.NET Aspire プロジェクトに追加します。
- Dapr—Pub Sub: AddDaprPubSub を呼び出して、構成済みの pub sub を .NET.NET Aspire プロジェクトに追加します。
- Dapr—コンポーネント: AddDaprComponent を呼び出して、構成済みの統合を .NET.NET Aspire プロジェクトに追加します。
次の手順
.NET Aspire