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
July 27, 2024
Technology
0
310
.NET Aspire を始めよう
.NETラボ 勉強会 2024年7月の「.NET Aspire を始めよう」の登壇資料です。
https://dotnetlab.connpass.com/event/323373/
Kazuki
July 27, 2024
Tweet
Share
More Decks by Kazuki
See All by Kazuki
Semantic Kernel の Agent 機能試してみた!
okazuki
1
420
空のプロジェクトから始める Blazor
okazuki
1
380
.NET Aspire を使おう!
okazuki
0
150
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
810
Other Decks in Technology
See All in Technology
TypeScript、上達の瞬間
sadnessojisan
49
14k
Mastering Quickfix
daisuzu
2
370
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
400
組織成長を加速させるオンボーディングの取り組み
sudoakiy
3
350
偶有的複雑性と戦うためのアーキテクチャとチームトポロジー
knih
4
2.7k
CysharpのOSS群から見るModern C#の現在地
neuecc
2
4k
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
LINEヤフーにおけるPrerender技術の導入とその効果
narirou
2
2.4k
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
atsushii
0
170
静的解析で実現した効率的なi18n対応の仕組みづくり
minako__ph
2
1.7k
コンパウンド戦略に向けた技術選定とリアーキテクチャ
kworkdev
PRO
1
1.8k
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
280
Featured
See All Featured
Building Adaptive Systems
keathley
38
2.3k
The Invisible Side of Design
smashingmag
298
50k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Navigating Team Friction
lara
183
14k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Language of Interfaces
destraynor
154
24k
Being A Developer After 40
akosma
87
590k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Transcript
#dotnetlab .NET Aspire を始めよう 2024/07/27 日本マイクロソフト Kazuki Ota
#dotnetlab 自己紹介 名前: 大田 一希 (Kazuki Ota) 所属: 日本マイクロソフト 役職:
クラウド ソリューション アーキテクト エバンジェリスト(AI & AppDev) 好き: C#、Azure PaaS 系サービス 苦手: パクチー、インテリセンスの弱い言語 趣味: ゲーム、絵を描くこと X(旧 Twitter): @okazuki
#dotnetlab 本セッションのゴール .NET Aspire を自分のプロジェクトに 追加してもいいかなって思ってもらう
#dotnetlab .NET Aspire とは
#dotnetlab .NET Aspire とは 以下のようなアプリケーションを開発するための便利機能詰め合わせ 分散アプリケーション 本番運用に耐えうるアプリケーション
監視可能なアプリケーション リトライ etc... .NET Aspire overview - .NET Aspire | Microsoft Learn
#dotnetlab .NET 自体が持つ機能 .NET 自体が既に、これらをサポートする機能を持っている サービス検出 OpenTelemetry リトライ メトリクス コンテナ
サポート ヘルスチェック 必要なものを、いい感じに設定するにはそれなりの労力がかかる… などなど…
#dotnetlab そこで .NET Aspire ですよ!!
#dotnetlab .NET Aspire の機能 .NET Aspire の基本的な機能 サービスの規定値 (Smart Defaults)
開発ダッシュボード (Developer Dashboard) オーケストレーション (Orchestration) サービス検出 (Service Discovery) コンポーネント (Components) デプロイ (Deployment)
#dotnetlab .NET Aspire の機能 .NET Aspire の基本的な機能 サービスの規定値 (Smart Defaults)
開発ダッシュボード (Developer Dashboard) オーケストレーション (Orchestration) サービス検出 (Service Discovery) コンポーネント (Components) デプロイ (Deployment) これらを全て もしくは部分的に使える
#dotnetlab .NET Aspire の機能紹介
#dotnetlab サービスの規定値 | Service Defaults 全てのアプリケーションに必要な規定値を提供 • リトライ • OpenTelemetry
の構成 • ヘルスチェック エンドポイントの構成 • 開発用途のものが提供される • 本番用は要件に応じて自分で実装が必要 • サービス検出 • 後ほど個別に取り上げます 実態は上記の構成をアプリケーションに追加する小さなコード
#dotnetlab 開発ダッシュボード | Developer dashboard 起動したサービスの状態の可視化 ✓ 各サービスのエンドポイント確認 ✓ 各サービスの環境変数の確認
✓ 各サービスの死活監視 ✓ トレースの確認 ✓ メトリックの確認 ✓ アプリのログの確認
#dotnetlab オーケストレーション | Orchestration アプリ ホスト プロジェクトで定義されたアプリ モデルの内容に 従ってプロジェクトなどを一括起動する機能 Before
After マルチ スタートアップ プロジェクトを構成して実行 アプリ ホスト プロジェクトを 起動すると一括で実行される
#dotnetlab アプリ モデル アプリ ホスト プロジェクトの Program.cs で DistributedApplicationBuilder を使って組み立てる
var builder = DistributedApplication.CreateBuilder(args); builder.AddProject<Projects.Backend>("backend"); builder.AddProject<Projects.Frontend>("frontend"); builder.Build().Run(); Backend プロジェクトを "backend" という名前で登録 BlazorApp11 プロジェクトを "frontend" という名前で登録
#dotnetlab サービス検出 | Service Discovery サービスのエンドポイントを名前でアクセスできるようにする機能 • アプリ モデルで定義した名前でアクセス可能 var
builder = DistributedApplication.CreateBuilder(args); var backend = builder.AddProject<Projects.Backend>("backend"); builder.AddProject<Projects.Frontend>("frontend") .WithReference(backend) .WithExternalHttpEndpoints(); builder.Build().Run(); WithReference メソッドで依存関係を定義 この例では frontend から backend を呼ぶということを設定 client.BaseAddress = new Uri("https+http://backend"); このような URL でアクセスできるようになる AppHost frontend
#dotnetlab サービス検出 | Service Discovery 実際のエンドポイントの値は環境変数に以下のような命名規約の値で設定 Services__backend__http__0=http://localhost:xxxx Services__backend__https__0=https://localhost:yyyy IHostApplicationBuilder AddServiceDefaults(
this IHostApplicationBuilder builder) { // 省略 builder.Services.AddServiceDiscovery(); builder.Services.ConfigureHttpClientDefaults(http => { // 省略 http.AddServiceDiscovery(); }); // 省略 } サービスの規定値 でサービス検出も有効化するコードが組み込まれている ServiceDefaults frontend の環境変数
#dotnetlab オーケストレーション | Orchestration .NET Aspire ホスティング パッケージを使うことでプロジェクト以外にも様々な ものをオーケストレーション可能 •
実態は Aspire.Hosting で始まる名前の NuGet パッケージ群 • アプリ ホスト プロジェクトに追加して使用 var cache = builder.AddRedis("cache"); var backend = builder.AddProject<Projects.Backend>("backend") .WithReference(cache); アプリホストプロジェクトに NuGet で Azure.Hosting.Redis パッケージを追加 AddRedis メソッドでアプリ モデルに Redis を 追加して WithReference で関連性を定義
#dotnetlab オーケストレーション | Orchestration .NET Aspire ホスティング パッケージを使うことでプロジェクト以外にも様々な ものをオーケストレーション可能 •
実態は Aspire.Hosting で始まる名前の NuGet パッケージ群 • アプリ ホスト プロジェクトに追加して使用 var cache = builder.AddRedis("cache"); var backend = builder.AddProject<Projects.Backend>("backend") .WithReference(cache); アプリホストプロジェクトに NuGet で Azure.Hosting.Redis パッケージを追加 AddRedis メソッドでアプリ モデルに Redis を 追加して WithReference で関連性を定義 Redis の Docker コンテナが起動 backend に接続文字列が追加
#dotnetlab オーケストレーション | Orchestration その他、様々なものに対応 • AddContainer: 任意のコンテナ イメージを追加 •
AddDockerfile: 任意の Dockerfile を追加 • AddExecutable: 任意の exe を追加 • AddNodeApp、AddNpmApp: Node.js や JavaScript フロントエンドを追加 • AddPythonProject: Python のアプリを追加 • AddConnectionString: 構成ファイル内の接続文字列を追加 • AddParameter: 構成ファイル内のパラメーターを追加 • など…
#dotnetlab コンポーネント | Components 各種サービスのためのクライアント ライブラリ • Redis、PostgreSQL、SQL Server、Azure OpenAI
Service など • リトライや OpenTelemetry などの構成が組 み込まれている • NuGet パッケージで配布 • コンポーネントの一覧 .NET Aspire コンポーネントの概要 - .NET Aspire |Microsoft Learn • .NET Aspire ホスティング パッケージとあわ せて使うと強力!
#dotnetlab コンポーネント | Components Redis Cache を HTTP レスポンスの出力キャッシュにする場合 Redis
を使うプロジェクトに Aspire.StackExchange.Redis.Out putCaching パッケージを追加 var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); builder.AddRedisOutputCache("cache"); builder.Services.AddOutputCache( options => options.AddBasePolicy( policy => policy.Expire(TimeSpan.FromSeconds(5)))); // 省略 var app = builder.Build(); app.MapDefaultEndpoints(); app.UseOutputCache(); // 省略 コンポーネントを使うコード (緑部分) と ASP.NET Core のキャッシュの 構成 (赤部分) のコードを追加
#dotnetlab コンポーネント | Components Redis Cache を HTTP レスポンスの出力キャッシュにする場合 Redis
を使うプロジェクトに Aspire.StackExchange.Redis.Out putCaching パッケージを追加 var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); builder.AddRedisOutputCache("cache"); builder.Services.AddOutputCache( options => options.AddBasePolicy( policy => policy.Expire(TimeSpan.FromSeconds(5)))); // 省略 var app = builder.Build(); app.MapDefaultEndpoints(); app.UseOutputCache(); // 省略 コンポーネントを使うコード (緑部分) と ASP.NET Core のキャッシュの 構成 (赤部分) のコードを追加 出力キャッシュが構成され、分散トレーシングなどにも対応
#dotnetlab デプロイ | Deployment Azure Developer CLI や Visual Studio
を使った Azure Container Apps へのデプロイが可能 デプロイ Azure Container Apps AppHost プロジェクト frontend backend cache Azure Dev CLI Visual Studio
#dotnetlab デプロイ | Deployment 従来通りのデプロイも可能 • 1 つ 1 つのアプリは単純な
.NET アプリ • デプロイをして環境変数を設定するだけで動作可能 • GitHub Actions などでの自動化も可能 • 従来通りのデプロイでも Azure Developer CLI の使用でも • Aspir8 を使った Kubernates へのデプロイ • prom3theu5/aspirational-manifests: Handle deployments of .NET Aspire AppHost Projects (github.com) • AWS CDK にも対応 • Deploy .NET Aspire to AWS Using CDK | by Rishupal Singh | Jul, 2024 | Medium • Add AWS CDK support by vlesierse · Pull Request #2225 · dotnet/aspire (github.com)
#dotnetlab クイック スタート .NET Aspire Starter アプリケーション 既存プロジェクトに .NET Aspire
を追加可能 フロントエンド バックエンドなどを含んだ 基本的なアプリケーション プロジェクトの右クリックメニューから 「追加」→「.NET Orchestrator サポート」
#dotnetlab まとめ
#dotnetlab .NET Aspire とは 以下のようなアプリケーションを開発するための便利機能詰め合わせ 分散アプリケーション 本番運用に耐えうるアプリケーション .NET
Aspire の機能 サービスの規定値 (Smart Defaults) 開発ダッシュボード (Developer Dashboard) オーケストレーション (Orchestration) サービス検出 (Service Discovery) コンポーネント (Components) デプロイ (Deployment)
#dotnetlab まとめ 気になった人は 是非 .NET Aspire を使ってみてください
#dotnetlab 参考情報 • マイクロソフト上坂さんの Qiita の記事 • .NET Aspire って何?
- 概要 #.NETAspire – Qiita • Microsoft Learn 公式ドキュメント • .NET Aspire documentation | Microsoft Learn • Microsoft Learn のトレーニングの .NET Aspire のラーニング パス • .NET Aspire を使用して分散アプリを構築する - Training | Microsoft Learn • eShop Reference Application – "AdventureWorks" • dotnet/eShop: A reference .NET application implementing an eCommerce site (github.com)
#dotnetlab © Copyright Microsoft Corporation. All rights reserved.