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
0
210
.NET Aspire を使おう!
第3回 Azure Travelers 勉強会 山形の旅での登壇資料です。
https://jat.connpass.com/event/308087/
Kazuki
June 26, 2024
Tweet
Share
More Decks by Kazuki
See All by Kazuki
.NET のUnified AI Building Blocks 入門...!
okazuki
0
220
Semantic Kernel の Agent 機能試してみた!
okazuki
1
540
.NET Aspire を始めよう
okazuki
0
340
空のプロジェクトから始める Blazor
okazuki
1
430
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
830
Other Decks in Technology
See All in Technology
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
340
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
120
OPENLOGI Company Profile for engineer
hr01
1
18k
新しいスケーリング則と学習理論
taiji_suzuki
9
3.8k
comilioとCloudflare、そして未来へと向けて
oliver_diary
5
400
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
710
MasterMemory v3 最速確認会
yucchiy
0
340
Git scrapingで始める継続的なデータ追跡 / Git Scraping
ohbarye
4
110
AWS re:Invent 2024 ふりかえり勉強会
yhana
0
710
深層学習と3Dキャプチャ・3Dモデル生成(土木学会応用力学委員会 応用数理・AIセミナー)
pfn
PRO
0
430
カップ麺の待ち時間(3分)でわかるPartyRockアップデート
ryutakondo
0
110
20240522 - 躍遷創作理念 @ PicCollage Workshop
dpys
0
310
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Become a Pro
speakerdeck
PRO
26
5.1k
A Tale of Four Properties
chriscoyier
157
23k
Raft: Consensus for Rubyists
vanstee
137
6.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Bash Introduction
62gerente
610
210k
A designer walks into a library…
pauljervisheath
205
24k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Mobile First: as difficult as doing things right
swwweet
222
9k
4 Signs Your Business is Dying
shpigford
182
22k
Unsuck your backbone
ammeep
669
57k
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.