.NET のAspire コンポーネントについて学習する
アプリ内の各マイクロサービスは一意である可能性がありますが、多くの場合、データベースやキャッシュなどのバッキング サービスには同様の要件があります。 これらのバッキング サービスとインターフェイスするコードを各マイクロサービスに記述するのは困難な場合があります。 .NET Aspire で、代わりに .NET Aspire コンポーネントを追加すると、そのコードが減ります。 マイクロサービスで必要となる可能性がある多くの一般的なバッキング要件の組み込みコンポーネントがあります。
あなたはアウトドア用の衣料品や機器の会社で働いているとします。 開発チームは、新しい eShop Web アプリ用のマイクロサービスの設計を開始しました。 各マイクロサービスには、データベース、メッセージング サービス、キャッシュなどのサービスが必要な場合があります。 .NET Aspire がこれらのサービスの操作にどのように役立つかを評価したいと考えています。
このユニットでは、.NET Aspire に既定で含まれるコンポーネントと、マイクロサービスに最適なコンポーネントを選択する方法について学習します。
.NET Aspire コンポーネントを使用する
各 .NET Aspire コンポーネントは NuGet パッケージであり、NuGet パッケージ マネージャーを使用してプロジェクトに追加できます。 Visual Studio には、[追加] >[.NET Aspire コンポーネント] という新しいメニュー項目があります。 このアクションでは、.NET Aspire コンポーネントのみを表示するためにフィルターが適用されたパッケージ マネージャーが表示されます。
Note
このコンポーネント ツールの使用方法については、このモジュールの後半の演習で確認します。
C# Dev Kit 拡張機能が搭載された Visual Studio Code も、.NET Aspire のコンポーネントの追加に対応します。
.NET CLI で .NET コンポーネントを追加することもできます。 次に例を示します。
dotnet add package Aspire.StackExchange.Redis --prerelease
AppHost プロジェクトでは、コンポーネントを登録し、それを呼び出すプロジェクトで使用する必要があります。
var cache = builder.AddRedis("cache");
builder.AddProject<Projects.AspireSample_Web>("webfrontend")
.WithReference(cache);
その後、依存関係の挿入を使って、使用側プロジェクトに追加できます。
build.AddRedisClient("cache");
その他の使用コードは、使っているコンポーネントによって異なります。
Note
各 .NET Aspire コンポーネントの種類には、通常、同等のホスティング パッケージがあります。 ホスティング パッケージでは、アプリに必要なリソースと依存関係が構成されます。それらは、使用側プロジェクトではなく、AppHost プロジェクトにインストールします。
データベース コンポーネント
クラウドネイティブ アプリでは、各マイクロサービスに、独自のデータを格納する役割があり、読み取りと書き込みに構造化または半構造化データのデータベースが必要になる場合があります。 各マイクロサービスは個別に開発されているため、アプリケーション全体のさまざまな部分で複数の異なるデータベース システムが使用されている場合があります。
.NET Aspire には、次のリレーショナル データベース サーバーのコンポーネントが含まれています。
- PostgreSQL:構造化照会言語 (SQL) の実装を含む一般的なオープンソース データベース サーバー。
- MySQL:もう 1 つのオープン ソース SQL データベース サーバー。
- SQL Database:Microsoft の SQL データベース システム。
Note
.NET Aspire の SQL Database コンポーネントは、Azure クラウドの SQL Server の実装である Microsoft SQL Server または Azure SQL Database と連携できます。 同様に、Azure には PostgreSQL と MySQL のサービスとしてのプラットフォーム (PaaS) 実装が含まれています。 データベースを実行する場所はマイクロサービス アーキテクチャ チームごとに決定されますが、.NET Aspire コンポーネントでは多くのクラウドの場所をサポートでき、特定のホスティング サービスは適用されません。
半構造化データを操作する場合、.NET Aspire には次の NoSQL システムのサポートが含まれています。
- MongoDB:クロスプラットフォームのドキュメント指向の NoSQL データベース サーバー。
- Azure Cosmos DB:Azure でホストされている Microsoft の柔軟な NoSQL データベース システム。
ストレージ コンポーネント
.NET Aspire では、ストレージ コンポーネントは、Azure Storage アカウントにファイル、データ、またはメッセージを格納する必要があるマイクロサービス用に提供されます。 Azure Storage には、3 つのサービスそれぞれに 1 つのコンポーネントがあります。 Azure Storage で行う内容に応じて、コンポーネントを選択します。
- Azure Blob Storage: このサービスを使用して、画像やビデオなどの BLOB ファイルを格納および取得します。
- Azure Table Storage: このサービスを使用して、半構造化データ テーブルに行を格納し、それらを取得します。
- Azure Queue Storage:このサービスを使用して、他のサブスクライブしているマイクロサービスに配布するためにキューにメッセージを追加します。
メッセージング関連コンポーネント
クラウドネイティブ アプリでのマイクロサービス間の通信の信頼性と柔軟性を向上させる 1 つの方法は、直接通信ではなく、キュー、トピック、サブスクリプションを提供するメッセージング ソリューションを使用することです。 .NET Aspire には、次の 3 つのメッセージング サービスのコンポーネントが含まれています。 開発者が使用するメッセージング ブローカーに基づいて、コンポーネントを選択します。
- RabbitMQ:このメッセージ ブローカーは広く使用されており、オープン ソースであり、キュー、トピック、サブスクリプションを提供するいくつかのメッセージング プロトコルがサポートされています。
- Apache Kafka:このサービスでは、メッセージを含めることができるイベントのストリームを処理し、他のシステムとの間でデータをインポートおよびエクスポートするための Kafka Connect API が含まれます。
- Azure Service Bus:このメッセージ ブローカーは Azure でホストされ、キューとサブスクリプション ベースのメッセージ配布が提供されます。
キャッシュ コンポーネント
マイクロサービスでは、ユーザーまたは別のマイクロサービスから要求を受け取るときに、複数の場所または複雑な操作からのデータを使用して応答を構築することが必要になる場合があります。 この操作には時間がかかる場合があります。 このような応答の一部をキャッシュすることで、後で同様または同一の要求が到着したときに時間を節約できます。 この方法では、キャッシュによってパフォーマンスが最適化されます。
一般的なキャッシュ サービスの 1 つが Redis です。 メッセージ ブローカーとメモリ内データベース機能がありますが、Web アプリケーションやサービスで応答をキャッシュするために最も一般的に使用されます。 .NET Aspire には、Redis で動作する 3 つの異なるコンポーネントがあります。 マイクロサービスで達成するキャッシュ タスクに基づいてコンポーネントを選択します。
- Redis コンポーネント:Redis をメモリ内データベースとして使用する場合は、このコンポーネントを使います。
- Redis 出力キャッシュ コンポーネント:Web ページ全体など、完全な HTTP 応答をキャッシュする場合は、このコンポーネントを使用します。
- Redis 分散キャッシュ コンポーネント:アプリで複数のマイクロサービスの 1 つのキャッシュを作成する場合は、このコンポーネントを使用します。
セキュリティ
クラウドネイティブ アプリケーションでは、多くの場合、データ セキュリティはビジネスに不可欠なトピックです。 顧客はあなたを信頼して個人および機密データを提供する場合があるため、暗号化されており、傍受や改ざんから保護されていることを保証する必要があります。 デジタル署名と暗号化では、秘密キーを格納し、暗号化解除のためにそれらを取得する必要があります。 Azure Key Vault は、キーやその他のシークレット (パスワードや証明書など) を安全に格納できる 1 つの場所です。
.NET Aspire には Azure Key Vault コンポーネントが含まれているため、Azure Key Vault にシークレットを簡単に格納し、それらを取得できます。