Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
.NET Aspire を使おう!
Search
Kazuki
June 26, 2024
Technology
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
.NET Aspire を使おう!
第3回 Azure Travelers 勉強会 山形の旅での登壇資料です。
https://jat.connpass.com/event/308087/
Kazuki
June 26, 2024
More Decks by Kazuki
See All by Kazuki
GitHub Copilot CLI の 個人的な好きなところ
okazuki
1
670
.NET ユーザーにやさしい GitHub Copilot の使い方
okazuki
0
610
Durable Task Extension for Microsoft Agent Framework はいいぞ
okazuki
2
430
正式リリースされた Semantic Kernel の Agent Framework 全部紹介!
okazuki
1
3.2k
.NET のUnified AI Building Blocks 入門...!
okazuki
0
360
Semantic Kernel の Agent 機能試してみた!
okazuki
1
1.1k
.NET Aspire を始めよう
okazuki
0
550
空のプロジェクトから始める Blazor
okazuki
1
750
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
950
Other Decks in Technology
See All in Technology
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
2
200
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
310
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
11
7k
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
130
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
250
DatabricksにおけるMCPソリューション
taka_aki
1
240
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
210
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
120
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
2
3.5k
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
140
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Leo the Paperboy
mayatellez
8
1.9k
Abbi's Birthday
coloredviolet
3
8.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
The agentic SEO stack - context over prompts
schlessera
0
840
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Producing Creativity
orderedlist
PRO
348
40k
Transcript
#AzureTravelers .NET Aspire を使おう! 2024/06/22 日本マイクロソフト Kazuki Ota
#AzureTravelers 自己紹介 名前: 大田 一希 (Kazuki Ota) 所属: 日本マイクロソフト 役職:
クラウド ソリューション アーキテクト エバンジェリスト(AI & AppDev) 好き: C#、Azure PaaS 系サービス 苦手: パクチー、インテリセンスの弱い言語 趣味: ゲーム、絵を描くこと X(旧 Twitter): @okazuki Zenn: https://zenn.dev/okazuki
#AzureTravelers 宣伝 1 C# ユーザーのための Web アプリ開発パターン 1冊プレゼント用に持ってきてます
#AzureTravelers 宣伝 2 この後登壇の mihohoi さんと .NET の YouTube チャンネルで
.NET Aspire をします! Let's Learn .NET: Aspire (日本語) (youtube.com) vs
#AzureTravelers 本セッションのゴール .NET 開発者向け .NET Aspire を自分のプロジェクトに 追加してもいいかなって思ってもらう 非 .NET
開発者向け .NET Aspire みたいなものが自分の 好きな言語にも欲しい!!って思ってもらう
#AzureTravelers .NET Aspire とは
#AzureTravelers .NET Aspire とは 以下のようなアプリケーションを開発するための便利機能詰め合わせ 分散アプリケーション 監視可能なアプリケーション .NET
Aspire overview - .NET Aspire | Microsoft Learn
#AzureTravelers .NET Aspire の代表的な機能 ローカル開発向けのオーケストレーション機能 複数プロジェクト (サービス) からなるアプリケーションのローカル環境での実行を容易にす
るための仕組み .NET Aspire ホスティング パッケージで色々なサービスに対応 サービスを名前指定で HTTP 通信をするためのサービス検出機能 コンポーネント Redis や PostgreSQL や Azure Storage Account などの一般的なサービスと リトライや OpenTelemetry などを構成済みの状態で接続するための NuGet パッケージ群 各種ツール Visual Studio、Visual Studio Code、dotnet CLI による開発支援機能 Visual Studio、Azure Developer CLI による Azure Container Apps へのデプロイ OSS の Aspire8 project による Kubernetes へのデプロイ
#AzureTravelers .NET Aspire を構成するもの ローカル開発向けのオーケストレーション機能 複数プロジェクト (サービス) からなるアプリケーションのローカル環境での実行を容易にす
るための仕組み .NET Aspire ホスティング パッケージで色々なサービスに対応 コンポーネント Redis や PostgreSQL や Azure Storage Account などの一般的なサービスとのシームレスな接 続を実現するための NuGet パッケージ群 各種ツール Visual Studio、Visual Studio Code、dotnet CLI による開発支援機能 Visual Studio、Azure Developer CLI による Azure Container Apps へのデプロイ OSS の Aspire8 project による Kubernetes へのデプロイ これらを全て もしくは部分的に使える
#AzureTravelers .NET Aspire の各種機能の紹介
#AzureTravelers オーケストレーション機能 ローカル開発用のオーケストレーション機能 • 複数プロジェクト・サービスの一括起動 こんなに沢山のものを AppHost プロジェクトを 起動するだけで一括実行 ダッシュボードで
起動状況などを確認
#AzureTravelers .NET Aspire ダッシュボード 起動したサービスの状態の可視化 ✓ 各サービスのエンドポイント確認 ✓ 各サービスの環境変数の確認 ✓
各サービスの死活監視 ✓ OpenTelemetry のトレースの確認 ✓ OpenTelemetry のメトリックの確認 ✓ アプリのログの確認
#AzureTravelers アプリ モデル サービス間の依存関係を C# で定義したもの • .NET Aspire の肝の
1 つ • AppHost プロジェクトの Program.cs で記載
#AzureTravelers アプリ モデル サービス間の依存関係を C# で定義したもの • .NET Aspire の肝の
1 つ • AppHost プロジェクトの Program.cs で記載 var builder = DistributedApplication.CreateBuilder(args); var cache = builder.AddRedis("cache"); var apiService = builder .AddProject<Projects.AspireApp3_ApiService>("apiservice"); builder.AddProject<Projects.AspireApp3_Web>("webfrontend") .WithExternalHttpEndpoints() .WithReference(cache) .WithReference(apiService); builder.Build().Run(); • AddXXXX というメソッドでアプリモデルに追加 • 引数で名前を指定 • AddProject でプロジェクトを登録 • AppHost プロジェクトに参照を追加するとプ ロジェクト名の型が生成される • 「Addサービス名」で各種サービスを登録 • サービスはホスティングパッケージという NuGet パッケージで追加する
#AzureTravelers アプリ モデル サービス間の依存関係を C# で定義したもの • .NET Aspire の肝の
1 つ • AppHost プロジェクトの Program.cs で記載 var builder = DistributedApplication.CreateBuilder(args); var cache = builder.AddRedis("cache"); var apiService = builder .AddProject<Projects.AspireApp3_ApiService>("apiservice"); builder.AddProject<Projects.AspireApp3_Web>("webfrontend") .WithExternalHttpEndpoints() .WithReference(cache) .WithReference(apiService); builder.Build().Run(); • WithXXXX というメソッドで依存関係などの設定 を追加する • WithReference で依存関係を定義 • WithExternalHttpEndpoints で外部公開の HTTP エンドポイントの存在を明示
#AzureTravelers アプリ モデル ローカル開発時に一括実行 DistributedApplication (アプリ モデル) "cache": Redis のコンテナ
"apiservice": .NET プロジェクト https://localhost:7829 で起動 "webfrontend": .NET プロジェクト https://localhost:8080 で起動 外部公開用 HTTP エンドポイント 参照 参照
#AzureTravelers アプリ モデル ローカル開発時に一括実行
#AzureTravelers アプリ モデル ローカル実行時に環境変数の自動設定 DistributedApplication (アプリ モデル) "cache": Redis のコンテナ
"apiservice": .NET プロジェクト https://localhost:7829 で起動 "webfrontend": .NET プロジェクト https://localhost:8080 で起動 外部公開用 HTTP エンドポイント 参照 参照 以下の環境変数をデバッグ実行時に自動設定 • ConnectionStrings__cache=tcp://localhost:XXXX • Services__apiservice__https__0=https://localhost:7829
#AzureTravelers アプリ モデル アプリ モデルを元にクラウドへデプロイ デプロイ Azure Container Apps Kubernetes
#AzureTravelers アプリ モデル アプリ モデルを元にクラウドへデプロイ デプロイ Azure Container Apps Kubernetes
デプロイの機能を使わずに従来通りのデプロイも可能
#AzureTravelers 参考: アプリ モデルに追加可能なもの ✓ Azure のリソース • 「Aspire.Hosting.Azure.サービス名」パッケージで Azure
リソースを指定可能 • 例: Aspire.Hosting.Azure.Redis パッケージを追加することで Redis を Azure Cache for Redis を指定可能 ✓ 任意のコンテナー イメージ • AddContainer メソッドで追加可能 • AddRedis は AddContaienr を使いやすくしたラッパーメソッド ✓ 実行可能ファイル ✓ Bicep ✓ Node.js や npm • Aspire.Hosting.NodeJs パッケージを追加することで指定可能 • ユースケース • フロントエンドは React や Vue などで作ってバックエンドを .NET で作るケース • フロントエンドは .NET で作ってバックエンドは Node.js で作るケース
#AzureTravelers サービスのデフォルトの構成 ServiceDefaults プロジェクトで提供されるデフォルトの構成 • OpenTelemetry の構成 • サービス検出の構成 •
サービス検出を使用した HttpClient の構成 • ローカル開発用のヘルスチェック エンドポイントの構成 ServiceDefaults プロジェクトの Extensions.cs にコードで定義される 以下の 2 つの拡張メソッドを通して提供される • AddServiceDefaults 拡張メソッド • MapDefaultEndpoints 拡張メソッド
#AzureTravelers サービス検出 別のサービスを呼び出す際に名前でアクセス可能にする機能 .NET でのサービス検出 - .NET | Microsoft Learn
apiservice エンドポイント: https://localhost:8080 webfrontend 呼び出す 例: webfrontend から apiservice を呼び出す場合
#AzureTravelers サービス検出 サービス名でアクセス可能になる .NET でのサービス検出 - .NET | Microsoft Learn
通常 var response = await httpClient.GetAsync("https://localhost:8080/api/xxxxx"); サービス検出機能を使う場合 var response = await httpClient.GetAsync("https://apiservice/api/xxxxx"); ホスト名 + ポートではなく名前でアクセス可能になる
#AzureTravelers サービス検出 実際のエンドポイントは以下の命名規約で構成に設定する • Services__<<サービス名>>__<<エンドポイント名>>__<<連番>> • 例: Services__apiservice__https__0=https://localhost:8080 .NET でのサービス検出
- .NET | Microsoft Learn .NET Aspire は上記構成をアプリ モデルに従って自動で設定してくれる
#AzureTravelers .NET Aspire コンポーネント .NET Aspire 用に最適な構成が行われたクライアントを DI コンテナに追加する ヘルパー
ライブラリ • 「Aspire.サービス名.機能名」という名前のNuGet パッケージとして提供 • 例: Aspire.StackExchange.Redis, Aspire.Npgsql, Aspire.Oracle.EntityFrameworkCore リトライや OpenTelemetry などが構成されたクライアントを簡単に追加可能 以下のようなコードで "cache" という名前のアプリ モデルに登録された Redis に接続可能な クライアントが構成される builder.AddRedis("cache"); builder.AddRedisOutput("cache");
#AzureTravelers .NET Aspire を使う場合に マイクロサービス化は必須…?
#AzureTravelers 個人的な見解 いいえ! 普通に開発する際にも便利に使える
#AzureTravelers 単一プロジェクトでも便利 普通は DB などを利用しますよね? DB をローカル PC にセットアップして… 環境構築手順書を整備して…
キャッシュも使うから Redis もいるか… 環境変数の命名規約も決めて…
#AzureTravelers .NET Aspire を使えば楽が出来そう • .NET Aspire を使えば関係するミドルウェアも一括実行 • 手順書が以下の内容で
OK • Visual Studio のインストール • Azure Developer CLI インストール • Docker Desktop のインストール • git clone してプロジェクト開いて実行
#AzureTravelers まとめ
#AzureTravelers .NET Aspire とは 以下のようなアプリケーションを開発するための便利機能詰め合わせ 分散アプリケーション 監視可能なアプリケーション 重要な概念・機能
アプリ モデル ダッシュボード サービス検出 .NET Aspire コンポーネント デプロイ支援機能
#AzureTravelers © Copyright Microsoft Corporation. All rights reserved.