.NET Aspire とは
Microsoft Azure やアマゾン ウェブ サービス (AWS) などのクラウド エコシステムは、Web アプリケーションや Web サービス向けの IT 業界および一般的なホスティング ソリューションに深く組み込まれています。 クラウド ホスティング システムがアプリケーションの既定の選択肢である可能性があるため、作成するアプリケーションがそれらを最大限に活用するように設計されていることを確かめる必要があります。
クラウドネイティブ アプリケーションは、クラウドで実行するように特別に設計するものです。 多くの場合、アプリケーションでは、パフォーマンス、スケーラビリティ、信頼性が最適になるように、特定のアーキテクチャ パターンが示されます。
あなたはアウトドア用の衣料品や機器の会社で働いているとします。 取締役はあなたに、会社の主要な顧客向けサイト用の新しい eShop Web アプリを開発するよう求めました。 チームはマイクロサービス モデルに精通しており、あなたは .NET Aspire を使用することでプロジェクトがより容易になるかどうかを知りたいと考えています。
このユニットでは、クラウドネイティブ アーキテクチャについてさらに学び、それらの構築に関わる可能性がある課題を確認します。 また、.NET Aspire がこれらの課題にどのように対処できるについても確認します。
クラウドネイティブ アプリケーションとは
クラウドネイティブ アプリケーションは、最適なパフォーマンス、可用性、回復性を実現するためにクラウド インフラストラクチャを最適に使用するように設計されたものです。 クラウドネイティブ ソフトウェア アーキテクチャには、次の 6 つの柱があります。
- クラウド インフラストラクチャ。 クラウドネイティブ アプリケーションは、オンプレミスのサーバー ファームではなく、クラウド ホスティング ソリューションにデプロイされます。
- マイクロサービス。 クラウドネイティブ アプリケーションはマイクロサービスのセットとして実装され、それぞれがビジネス機能のごく一部を実装します。
- コンテナー。 マイクロサービスとアプリケーションの他の部分は、一貫性のある実行環境を確保するために、コンテナーで開発およびデプロイされます。
- バッキング サービス。 データベースやキャッシュ サービスなどの補助的なリソースを使用して、マイクロサービスに共通の機能を提供できます。
- 最新のデザイン。 クラウドネイティブ アプリケーションは、継続的インテグレーションと継続的デプロイ (CI/CD)、破棄可能性、ポート バインドなどの原則を含む、12 要素アプリケーション手法に準拠しています。
- 自動化 クラウドネイティブ アプリケーションでは、コードとしてのインフラストラクチャ (IaC) を使用して、プラットフォームのプロビジョニングとデプロイを自動化します。
機敏性を提供するために、クラウドネイティブ アプリケーションはマイクロサービス セットで構成されます。 各マイクロサービス:
- 完全な機能の 1 つの部分を実装します。
- 独自のプロセスで実行され、他のものから分離され、専用コンテナー内で頻繁に実行されます。
- 別のチームによって構築されます。
- 他のものと通信しますが、疎結合されています。
各チームは、マイクロサービスを実装するために優先する言語とテクノロジを選択します。 各マイクロサービスは、他のものとは別にデプロイされ、スケーリングされます。
次の図は、従来のモノリシック Web アプリケーションとマイクロサービスで構成される Web アプリケーションの違いを示しています。
クラウドネイティブ アプリでは、ビジネスにとって多くの利点を実現できます。 次に例を示します。
- クラウドでアプリをホストすることで、ホスティング サーバー、オペレーティング システム、サポート サービスなどのインフラストラクチャを自分で構築して維持する必要がなくなります。
- 各マイクロサービスは個別に開発されるため、他のチームやメジャー バージョンのマイルストーンを待つことなく、新しい機能を継続的にデプロイできます。
- 各マイクロサービスは 1 つまたは複数のコンテナーで実行されるため、環境はすべてのテスト、ステージング、運用環境で同じになることがわかります。
- Kubernetes などのコンテナー オーケストレーション システムを使用して、追加のインスタンスを迅速にデプロイして、追加の需要に対応できます。
クラウドネイティブ アプリケーションによって提示される課題
複数のマイクロサービスで構成され、多くの機能を備えたクラウドネイティブ アプリケーションは複雑になり、モノリシック アプリでは発生しない課題が提示される可能性があります。 次に例を示します。
- アプリ定義。 慎重に文書化しない限り、開発者が完全なクラウドネイティブ アプリを構成するコンポーネントを理解するのは困難な場合があります。
- 通信。 各マイクロサービスは、ユーザー要求への応答を作成するために、メッセージまたはデータを他のマイクロサービスと交換する必要がある場合があります。 このような通信を有効にする必要はありますが、マイクロサービスを互いに密に結合しない方法で行う必要があります。 また、需要が高い場合やサービス障害が発生した場合でも、通信の信頼性を維持する必要があります。
- 回復性。 ホスティング サービスを 100% 利用することはできません。 まれにマイクロサービスが使用できない場合は、アプリが障害を確実に処理し、サービスが返すまで要求を保持することを確かめる必要があります。
- 分散データ。 各マイクロサービスは、独自のデータ ストレージ層を実装し、他のものと同じデータベース サーバーを使用しない場合があります。 複数のマイクロサービスからのデータのクエリを実行する方法と、トランザクションを実装する方法を検討する必要があります。
- シークレット。 アプリが任意の種類の機密データを処理する場合、各マイクロサービスは、応答を返す前に受信するすべての要求を認証する必要があります。 多くの場合、非対称および対称暗号化キーなどのシークレットは、データを保護し、呼び出し元のユーザーとマイクロサービスを確実に特定するために使用されます。 これらのシークレットをクラウドネイティブ アプリに格納して交換する方法を検討する必要があります。
- 開発者のオンボード。 新しい開発者がアプリのアーキテクチャと、それを使う作業の方法を短期間で理解できることが必要です。 あなたは、多くのクロスドメインの知識やローカル セットアップがなくても新しい開発者が仕事に必要な情報すべてを得られるようにする必要があります。
最近、クラウドネイティブ アプリケーションの設計が人気を集めていますが、このセクションのような課題が、一部のチームによるこのパターンの採用を妨げています。 たとえば、.NET には、これらの問題を解決するために必要なすべての機能がありますが、ソリューションにはトレーニングとカスタム コードへの多大な投資が必要な場合があります。
.NET Aspire とは
.NET Aspire は、開発者がクラウドネイティブ アプリケーションを迅速かつ簡単に作成できるように設計された、.NET 用に構築された新しいクラウド対応スタックです。 これまでの課題に対処する .NET Aspire の機能を見てみましょう。
オーケストレーション
マイクロサービスとその疎結合性により、デプロイされたアプリの柔軟性は向上しますが、構成が困難になる可能性があります。 アプリを構成するサービスのリストが明確でなくなり、マイクロサービスが利用できるエンドポイントを特定するのが難しい場合があります。 .NET Aspire では、以下のためのオーケストレーション機能が提供されます。
- アプリケーションを構成する .NET プロジェクト、コンテナー、実行可能ファイル、クラウド リソースをすべてのチームに対して明確に示すことができます。
- マイクロサービスでは、すべてのアプリケーションのコンポーネントのエンドポイントを自動的に検出できます。 .NET Aspire では、接続文字列を管理し、必要に応じてそれらをマイクロサービスに挿入することで、このサービス検出を実行します。
.NET Aspire ソリューションを作成すると、<SolutionName>.AppHost という新しいプロジェクトがソリューションに示されます。 このプロジェクトではアプリのオーケストレーションが実装されるため、それがソリューションのスタートアップ プロジェクトであることを確かめる必要があります。
コンポーネント
マイクロサービスには、通常、機能を支える複雑なバッキング サービスの機能要件があります。 次に例を示します。
- データ ストレージ。 製品カタログ、ショッピング カート、ID ストア、およびその他の機能をサポートするためにデータを保持するには、マイクロサービスで構造化または半構造化ストアにデータを格納する必要があります。
- キャッシュ。 パフォーマンスを最大化するために、マイクロサービスでは、後続の同様の要求をより迅速に満たすことができるように、部分的または完全な応答をキャッシュに格納できます。
- メッセージング。 疎結合マイクロサービスは相互に通信する必要があります。トラフィックが多い場合やネットワーク状況が困難な場合でも、この通信の信頼性が高いことを確かめる必要があります。 メッセージをキューに入れ、送信側から受信側に配布するサービスは、一般的な要件です。
.NET Aspire では、スタックに .NET Aspire コンポーネントが含まれているため、これらのバッキング サービスを各マイクロサービスに実装するのは簡単です。 各コンポーネントは、ソリューションに追加できる NuGet パッケージであり、バッキング サービスに標準インターフェイスを実装します。 この標準インターフェイスにより確実に、マイクロサービスがそのバッキング サービスに一貫してシームレスに接続されます。
すぐに使える .NET Aspire コンポーネントには、次のものが含まれます。
- PostgreSQL、SQL Database、Azure Cosmos DB、MongoDB のコンポーネントなどのデータ ストレージ コンポーネント。
- Redis のコンポーネントなどのキャッシュ コンポーネント。
- RabbitMQ や Azure Service Bus のコンポーネントなどのメッセージング コンポーネント。
重要
.NET Asper には、Azure Storage や Azure Service Bus のような、Azure サービスで動作する多くのコンポーネントが含まれていますが、.NET Asperer アプリには Azure は必要なく、RabbitMQ や MongoDB のような、Azure 外部のバッキング サービスでも同様に機能します。
ツール
.NET Aspire により、Visual Studio で開発者が使用できるツールも追加されます。 次に例を示します。
- 新しいプロジェクト テンプレートを使用すると、ウィザードのいくつかの手順で .NET Aspire ソリューションを作成できます。
- .NET Aspire ダッシュボードは、Visual Studio からソリューションを開始するたびに表示される Web インターフェイスです。 このダッシュボードには、アプリのすべてのマイクロサービスとバッキング サービスが表示され、テスト用に呼び出すことができます。 また、パフォーマンスと監視ツールも表示されます。
- 追加のメニュー項目が表示されます。これを使用して、.NET Aspire コンポーネントの追加、.NET Aspire オーケストレーター サポートのプロジェクトの登録、その他のタスクの完了を行うことができます。
Note
このモジュールの後半で、.NET Aspire ツールについてさらに学習します。