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
290
.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
250
Semantic Kernel の Agent 機能試してみた!
okazuki
1
740
.NET Aspire を始めよう
okazuki
0
390
空のプロジェクトから始める Blazor
okazuki
1
510
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
850
Other Decks in Technology
See All in Technology
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
190
更新系と状態
uhyo
8
2.2k
より良い開発者体験を実現するために~開発初心者が感じた生成AIの可能性~
masakiokuda
0
230
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
570
AI-in-the-Enterprise|OpenAIが公開した「AI導入7つの教訓」——ChatGPTで変わる企業の未来とは?
customercloud
PRO
0
110
AIとSREで「今」できること
honmarkhunt
3
690
日経電子版 for Android の技術的課題と取り組み(令和最新版)/android-20250423
nikkei_engineer_recruiting
1
610
Cross Data Platforms Meetup LT 20250422
tarotaro0129
1
920
グループ ポリシー再確認 (2)
murachiakira
0
210
Как мы автоматизировали интеграционное тестирование с Gonkey и не пожалели. Паша Егорычев, Кирилл Поляков
lamodatech
0
1.7k
Perl歴約10年のエンジニアがフルスタックTypeScriptに出会ってみた
papix
1
260
コードや知識を組み込む / Incorporating Codes and Knowledge
ks91
PRO
0
160
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Thoughts on Productivity
jonyablonski
69
4.6k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
A better future with KSS
kneath
239
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Writing Fast Ruby
sferik
628
61k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
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.