既存のマイクロサービスと .NET Web アプリがある場合は、それに .NET Aspire を追加し、含まれるすべての機能と利点を取得できます。 この記事では、.NET Aspire オーケストレーションを単純で既存の .NET 9 プロジェクトに追加します。 次の方法について学習します。
- 既存のマイクロサービス アプリの構造を理解します。
- 既存のプロジェクトを.NET.NET Aspireオーケストレーションに登録します。
- 登録がプロジェクトで行う変更について説明します。
- .NET .NET Aspire プロジェクトを開始します。
前提 条件
.NET .NET Aspireを使用するには、次のものがローカルにインストールされている必要があります。
- .NET 8.0 または .NET 9.0
- OCI 準拠のコンテナー ランタイム。次に例を示します。
- Docker デスクトップ または Podman. 詳細については、「コンテナーのランタイム」を参照してください。
- 次のような統合開発者環境 (IDE) またはコード エディター。
- Visual Studio 2022 バージョン 17.9 以降 (任意)
-
Visual Studio Code (省略可能)
- C# Dev Kit: 拡張 (省略可能)
- JetBrains Rider と .NET.NET Aspire プラグイン(オプション)
詳細については、
作業の開始
まず、ソリューションのコードを取得します。
コマンド プロンプトを開き、コードを格納する場所にディレクトリを変更します。
.NET 9 のソリューション例を複製するには、次の
git clone
コマンドを使用します。git clone https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops.git eShopLite
サンプル アプリを調べる
この記事では、3 つのプロジェクトを含む .NET 9 ソリューションを使用します。
-
データ エンティティ: このプロジェクトはクラス ライブラリの例です。 Web アプリと Web API で使用される
Product
クラスを定義します。 - Products: この例の Web API は、カタログ内の製品とそのプロパティの一覧を返します。
- ストア: この例 Blazor Web App は、Web サイトの訪問者に製品カタログを表示します。
サンプル アプリのアーキテクチャ
サンプル アプリの構造をより深く理解するには、単純な 3 層アーキテクチャを示す次の図を検討してください。
この階層化された設計により、懸念事項が明確に分離され、アプリの保守とスケーリングが容易になります。
サンプル アプリを実行する
プロジェクトを開いてデバッグを開始し、既定の動作を確認します。
Visual Studio を起動し、次に [ファイル>開く>プロジェクト/ソリューション] を選択します。
複製したソリューションの最上位フォルダーに移動し、[
eShopLite.sln ] を選択し、[を開く]選択します。 ソリューション エクスプローラー で、eShopLite ソリューションを右クリックし、[スタートアップ プロジェクトの構成]選択します。 複数のスタートアッププロジェクトを選択します。
[アクション] 列で、Products プロジェクトと Store プロジェクトの両方の「開始」として [開始] を選択します。
[OK] を選択.
ソリューションのデバッグを開始するには、F5
押すか、[スタート] 選択します。 ブラウザーで次の 2 つのページが開きます。
- ページは、Products Web APIの呼び出しから受け取った製品を、JSON形式で表示します。
- ページには、Web サイトのホームページが表示されます。 左側のメニューで、[製品
選択して、Web API から取得したカタログを表示します。
デバッグを停止するには、ブラウザーを閉じます。
Visual Studio Code を開始し、複製したフォルダーを開きます。 リポジトリを複製したターミナルから、次のコマンドを実行します。
code .
実行とデバッグ メニュー項目を選択するか、Ctrl+と+Shiftを押しながら D を押します。
launch.json ファイルを作成リンクを選択します。
次の JSON をコピーしてこのファイルに貼り付け、保存します。
{ "version": "0.2.0", "compounds": [ { "name": "Run all", "configurations": [ "Run products", "Run store", ] } ], "configurations": [ { "name": "Run products", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Products/Products.csproj" }, { "name": "Run store", "type": "dotnet", "request": "launch", "projectPath": "${workspaceFolder}/Store/Store.csproj" } ] }
ソリューションのデバッグを開始するには、F5
押すか、[スタート] 選択します。 ブラウザーで次の 2 つのページが開きます。
- ページは、Products Web APIの呼び出しから受け取った製品を、JSON形式で表示します。
- ページには、Web サイトのホームページが表示されます。 左側のメニューで、[製品
選択して、Web API から取得したカタログを表示します。
デバッグを停止するには、ブラウザーを閉じ、[ 停止] ボタンを 2 回選択します (実行中のデバッグ インスタンスごとに 1 回)。
ターミナル ウィンドウを開き、新しく複製されたリポジトリにディレクトリを変更します。
Products アプリを起動するには、次のコマンドを実行します。
dotnet run --project ./Products/Products.csproj
ブラウザー ページが開き、製品の JSON が表示されます。
別のターミナル ウィンドウで、もう一度ディレクトリを複製されたリポジトリに変更します。
次のコマンドを実行して、ストア アプリを起動します。
dotnet run --project ./Store/Store.csproj
ブラウザーで、Web サイトのホームページを表示するページが開きます。 左側のメニューで、[製品
選択して、Web API から取得したカタログを表示します。 デバッグを停止するには、ブラウザーを閉じ、両方のターミナル Ctrl+C を押します。
使用するツールに関係なく、複数のプロジェクトを手動で開始したり、それらの間の接続を構成したりするのは面倒です。 さらに、 Store プロジェクトには Products API の明示的なエンドポイント構成が必要です。これは、煩雑でエラーが発生しやすいものです。 ここで、 .NET.NET Aspire はプロセスを簡素化し、合理化します。
ストア Web アプリに .NET.NET Aspire を追加する
次に、Web ユーザー インターフェイスを実装する Store プロジェクトをオーケストレーション .NET.NET Aspire 登録します。
Visual Studioのソリューション エクスプローラーで、ストアプロジェクトを右クリックし、追加を選択して、次に.NET.NET AspireOrchestrator サポートを選択します。
Add .NET.NET Aspire Orchestrator サポートダイアログで、OKを選択します。
これで、次の 2 つの新しいプロジェクトがソリューションに追加されます。
- eShopLite.AppHost: アプリのさまざまなプロジェクトとサービスに接続して構成するように設計されたオーケストレーター プロジェクト。 オーケストレーターは、スタートアップ プロジェクトとして設定され、eShopLite.Store プロジェクトによって異なります。
eShopLite.ServiceDefaults : ソリューション内のプロジェクト全体で再利用される構成を管理するための共有プロジェクトで、回復性、 サービス検出 、テレメトリ関連します。
eShopLite.AppHost プロジェクトで、Program.cs ファイルを開きます。 .NET オーケストレーションに .NET Aspire プロジェクトを登録する次のコード行に注目してください。
builder.AddProject<Projects.Store>("store");
詳細については、AddProjectを参照してください。
Products プロジェクトを .NET.NET Aspireに追加するには:
Visual Studioの ソリューション エクスプローラー内で、Products プロジェクトを右クリックし、[追加]を選択し、[.NETOrchestrator サポート.NET Aspire]を選択します。
Orchestrator プロジェクト .NET.NET Aspire が既に存在することを示すダイアログボックスで、OKを選択します。
eShopLite.AppHost プロジェクトで、Program.cs ファイルを開きます。 .NET オーケストレーションに .NET Aspire プロジェクトを登録する次のコード行に注目してください。
builder.AddProject<Projects.Products>("products");
また、eShopLite.AppHost プロジェクトは、ストア と Products プロジェクトの両方に依存していることにも注目してください。
アプリ ホスト プロジェクトを作成する
既存のプロジェクトを調整するには、新しい アプリ ホスト プロジェクトを作成する必要があります。 使用可能な テンプレートから新しい を作成するには、次の .NET Aspire CLI コマンドを使用します。
dotnet new aspire-apphost -o eShopLite.AppHost
アプリ ホスト プロジェクトを既存のソリューションに追加します。
次の CLI コマンドを使用して、プロジェクト参照として Store プロジェクトを .NET プロジェクトに追加します。
使用可能なテンプレートの詳細については、テンプレート
サービスの既定のプロジェクトを作成する
アプリ ホスト プロジェクトが作成されたら、新しい サービスの既定値 プロジェクトを作成する必要があります。 使用可能な
dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults
ソリューションにプロジェクトを追加するには、次の .NET CLI コマンドを使用します。
dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
アプリ ホスト プロジェクトを更新して、プロジェクト参照を Products プロジェクトに追加します。
dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Products/Products.csproj
dotnet add ./Store/Store.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
少し異なるパスを持つ同じコマンドを使用して、Products プロジェクトの サービスの既定 プロジェクトへの参照を追加する必要があります。
dotnet add ./Products/Products.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj
Store と Products プロジェクトの両方で、Program.cs ファイルを更新し、var builder = WebApplication.CreateBuilder(args);
行の直後に次の行を追加します。
builder.AddServiceDefaults();
アプリ ホスト プロジェクトを更新する
Program.cs プロジェクトの ファイルを開き、その内容を次の C# コードに置き換えます。
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.Store>("store");
builder.AddProject<Projects.Products>("products");
builder.Build().Run();
上記のコード:
- 新しい DistributedApplicationBuilder インスタンスを作成します。
- オーケストレーターに Store プロジェクトを追加します。
- Products プロジェクトをオーケストレーターに追加します。
- オーケストレーターをビルドして実行します。
サービスの検出
この時点で、両方のプロジェクトが .NET.NET Aspire オーケストレーションの一部ですが、Store プロジェクトは、を通じて、.NET バックエンド アドレスに依存する必要があります。 サービス検出を有効にするには、Program.cs プロジェクトで ファイルを開き、builder
が Products プロジェクトへの参照を追加するようにコードを更新します。
var builder = DistributedApplication.CreateBuilder(args);
var products = builder.AddProject<Projects.Products>("products");
builder.AddProject<Projects.Store>("store")
.WithExternalHttpEndpoints()
.WithReference(products)
.WaitFor(products);
builder.Build().Run();
上記のコードは、Store プロジェクトが Products プロジェクトに依存していることを表しています。 詳細については、「.NET.NET Aspire アプリ ホスト: リソースを参照する」を参照してください。 この参照は、実行時に Products プロジェクトのアドレスを検出するために使用されます。 さらに、ストア プロジェクトは、外部 HTTP エンドポイントを使用するように構成されています。 後でこのアプリをデプロイする場合は、外部に公開されるように、WithExternalHttpEndpoints の呼び出しが必要になります。 最後に、 WaitFor API は、 Store アプリが Products アプリが要求を処理する準備が整うのを待機することを保証します。
次に、appsettings.json プロジェクトの を次の JSONで更新します。
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ProductEndpoint": "http://products",
"ProductEndpointHttps": "https://products"
}
両方のエンドポイントのアドレスで、アプリ ホストのオーケストレーターに追加された "products" 名が使用されるようになりました。 これらの名前は、Products プロジェクトのアドレスを検出するために使用されます。
登録されているアプリを調べる
ソリューションを開始し、.NET.NET Aspire が提供する新しい動作を調べてみましょう。
手記
eShopLite.AppHost プロジェクトが新しいスタートアップ プロジェクトであることに注意してください。
- Visual Studioで、デバッグを開始するには、F5 キー 押してプロジェクトVisual Studio ビルドします。
- デスクトップのDocker 開始ダイアログ ボックスが表示されたら、はいを選択します。 Visual Studio Docker エンジンを起動し、必要なコンテナーを作成します。 デプロイが完了すると、.NET.NET Aspire ダッシュボードが表示されます。
- ダッシュボードで、製品の プロジェクトのエンドポイントを選択します。 新しいブラウザー タブが表示され、製品カタログが JSON 形式で表示されます。
- ダッシュボードで、ストア プロジェクトのエンドポイントを選択します。 新しいブラウザー タブが表示され、Web アプリのホーム ページが表示されます。
- 左側のメニューで、製品を選択します。 製品カタログが表示されます。
- デバッグを停止するには、ブラウザーを閉じます。
前に作成した launch.json ファイルを削除します。このファイルは目的を果たしません。 代わりに、アプリ ホスト プロジェクトを開始し、他のプロジェクトを調整します。
次のコマンドを実行して、アプリ ホスト プロジェクトを起動します。
dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
手記
Docker Desktop (または Podman) が実行されていない場合は、エラーが発生します。 コンテナー ランタイムを起動し、もう一度やり直してください。
- ダッシュボードで、製品の プロジェクトのエンドポイントを選択します。 新しいブラウザー タブが表示され、製品カタログが JSON 形式で表示されます。
- ダッシュボードで、ストア プロジェクトのエンドポイントを選択します。 新しいブラウザー タブが表示され、Web アプリのホーム ページが表示されます。
- 左側のメニューで、製品を選択します。 製品カタログが表示されます。
- デバッグを停止するには、ブラウザーを閉じます。
おめでとうございます。既存の Web アプリに .NET.NET Aspire オーケストレーションを追加しました。 .NET Aspire 統合を追加し、.NET Aspire ツールを使用して、クラウドネイティブの Web アプリ開発を効率化できるようになりました。
.NET Aspire