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
400
.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
GitHub Copilot CLI の 個人的な好きなところ
okazuki
0
370
.NET ユーザーにやさしい GitHub Copilot の使い方
okazuki
0
490
Durable Task Extension for Microsoft Agent Framework はいいぞ
okazuki
2
380
正式リリースされた Semantic Kernel の Agent Framework 全部紹介!
okazuki
1
3k
.NET のUnified AI Building Blocks 入門...!
okazuki
0
330
Semantic Kernel の Agent 機能試してみた!
okazuki
1
1k
.NET Aspire を始めよう
okazuki
0
520
空のプロジェクトから始める Blazor
okazuki
1
700
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
930
Other Decks in Technology
See All in Technology
AlloyDB 奮闘記
hatappi
0
150
OCI技術資料 : コンピュート・サービス 概要
ocise
4
54k
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
230
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
190
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
230
S3はフラットである –AWS公式SDKにも存在した、 署名付きURLにおけるパストラバーサル脆弱性– / JAWS DAYS 2026
flatt_security
0
1.8k
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
890
Everything Claude Code を眺める
oikon48
12
7.8k
It’s “Time” to use Temporal
sajikix
3
220
ReactのdangerouslySetInnerHTMLは“dangerously”だから危険 / Security.any #09 卒業したいセキュリティLT
flatt_security
0
320
"作る"から"使われる"へ:Backstage 活用の現在地
sbtechnight
0
190
生成AI活用でQAエンジニアにどのような仕事が生まれるか/Support Required of QA Engineers for Generative AI
goyoki
1
270
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
52k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
[SF Ruby Conf 2025] Rails X
palkan
2
840
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
85
A Modern Web Designer's Workflow
chriscoyier
698
190k
Agile that works and the tools we love
rasmusluckow
331
21k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
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.