$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
.NET Aspire を使おう!
Search
Kazuki
June 26, 2024
Technology
0
160
.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
140
Semantic Kernel の Agent 機能試してみた!
okazuki
1
430
.NET Aspire を始めよう
okazuki
0
310
空のプロジェクトから始める Blazor
okazuki
1
390
Semantic Kernel を使って ChatGPT Plugins をアプリに組み込んでみよう
okazuki
1
810
Other Decks in Technology
See All in Technology
iOS 18 から追加された SwiftUI の傾向について調べてみる
swiftty
2
110
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
colopl
0
770
Bytebaseで実現する データベース管理の効率化
shogo452
1
290
Oracle Cloud Infrastructure:2024年11月度サービス・アップデート
oracle4engineer
PRO
0
130
4年で17倍に成長したエンジニア組織を支えるアーキテクチャの過去と未来
sansantech
PRO
1
4.8k
最強DB講義 #35 大規模言語モデルに基づく検索モデル
mpkato
1
120
メインテーマはKubernetes
nwiizo
2
320
クラウドネイティブなNewSQLで実現するミッションクリティカルなアプリケーションの運用
yuyu_hf
PRO
1
160
Kubernetesを知る
logica0419
17
4.4k
AWS認定試験の長文問題を早く解くコツ
keke1234ke
0
140
asumikamというカンファレンスオーガナイザの凄さを語る / The Brilliance of Asumikam
tomzoh
1
170
GDGoC開発体験談 - Gemini生成AI活用ハッカソン / GASとFirebaseで挑むパン屋のフードロス解決 -
hotekagi
1
450
Featured
See All Featured
Facilitating Awesome Meetings
lara
50
6.1k
The Cost Of JavaScript in 2023
addyosmani
45
6.9k
Being A Developer After 40
akosma
87
590k
Building Adaptive Systems
keathley
38
2.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
470
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Raft: Consensus for Rubyists
vanstee
136
6.7k
Thoughts on Productivity
jonyablonski
67
4.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
RailsConf 2023
tenderlove
29
920
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
What's new in Ruby 2.0
geeforr
343
31k
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.