Slide 1

Slide 1 text

.NET Aspireのクラウド対応検証:Azureと他環境での実践 1 Japan Azure User Group 14周年イベント

Slide 2

Slide 2 text

山田顕人 == Kento.Yamada 自己紹介 2 ● .NETラボ運営、Azure PoC部、Multi Cloud (MSP) Developer ● 通信キャリア => クラウドインテグレーターの企業にジョインしてそろそろ2年 ● MSP向け運用分析プラットフォームの開発・次世代監視基盤の開発・新しいサービスの検証 ● 受賞歴 ○ LINE API Expert ○ Microsoft MVP for Developer Technologies ○ Google Cloud Partner Tech Blog Challenge 2023 Cloud AI/ML 部門受賞 ○ LAPRAS OUTPUT AWARD 2024 01

Slide 3

Slide 3 text

今日話すこと ● オブザーバビリティとは ● Open Telemetryってなに ● .Otelと.NET Aspireの関係 ● 補足:eBPF ● .NET Aspireとは ● .NET Aspireの特徴 ● 動かし方3選 ● どういう環境で動作するか 3 ● 今回検討したクラウド環境 ● 実際に起動してみた(結論) ● GitHub Codespacesで動かす ● AWSで構成する ● Azureで構成する ● これまでの気づきなど ● まとめ ● 最近の話 ● 余談

Slide 4

Slide 4 text

言葉の成り立ち 「オブザーバビリティ:Observability」 「Observe:観察する」と「Ability:能力」を組み合わせた造語 日本語では、「可観測性」や「観察する能力」 可観測性:アプリケーションの状態を監視、測定、理解する能力 オブザーバビリティとは 4

Slide 5

Slide 5 text

補足:オブザーバビリティと監視は異なるもの オブザーバビリティは複数の監視を組み合わせてシステムの健全性を推し測る考え方 モニタリング(NPM,APM)と従来の監視は異なる。 5 メトリクス ログ トレース イベント オブザーバビリティ 監視 監視 監視 監視 オブザーバビリティは複数の項目(多層)によるもの(多層監視)

Slide 6

Slide 6 text

オープンソースのオブザーバビリティフレームワーク ベンダーに依存しないAPI・ソフトウェア開発キット(SDK) 計装:テレメトリーデータを取得するための実装 Open Telemetryってなに 6 引用:OpenTelemetry

Slide 7

Slide 7 text

OTelと.NET Aspireの関係 7 ひとことでいうとオブザーバビリティが共通点 OTel .NET Aspire オブザーバビリティ .NETでOTelの実装を可能としているのが.NET Aspire

Slide 8

Slide 8 text

補足:eBPF(Extended Berkeley Packet Filter) ● コンテナの可観測性を高める手段、カーネルイベントの観測 ● ネットワークのトレーサビリティ、セキュリティ、パフォーマンスを高めるツー ルとして有名 Retina:Kubernetes 用 eBPF 分散ネットワーク監視ツール https://azure.microsoft.com/en-us/blog/microsoft-open-sources-retina-a-cloud-native-container-n etworking-observability-platform/ 8

Slide 9

Slide 9 text

.NET Aspireとは 9 引用.NET Aspire overview https://learn.microsoft.com/ja-jp/dotnet/aspire/get-started/aspire-overview .NET Aspire = 分散アプリケーションをモニタリングするための.NETツール

Slide 10

Slide 10 text

.NET Aspireの特徴 10 Smart Defaults Developer Dashboard Orchestration Service Discovery Components Deployment 全ての規模のアプリケーションに適用可能 どんなアプリケーションでも利用できる。(Python,Node.js)

Slide 11

Slide 11 text

主な動かし方3選 ● Visual Studioでプロジェクトを構成して起動する ● Visual Studio Codeでプロジェクトを構成して起動する ● .NET CLIでプロジェクトを構成して起動する Visual Studioによるハンズオンは動画で紹介されています。 Let's Learn .NET: Aspire 11 引用:昼休みに .NET Aspire をさわってみよう配信 - connpass

Slide 12

Slide 12 text

どういう環境で動作するか 前提 ● .NET8 ● Docker Desktop やPodmanといったコンテナを起動できるソフト ● IDE ○ Visual Studio ○ Visual Studio Code ■ C# Dev Kit: Extensionが入っているといい 👉.NETが動作するコンテナが用意できれば、だいたい起動可能 ※想定通り動くとは限らない 12

Slide 13

Slide 13 text

今回動作環境として検討したクラウド環境 ● AWS ● Azure ● Google Cloud(今回は尺の関係で説明が難しいかもしれない) 代表的なコンテナサービスだけで実際に動かしてみることにした。 なお、今回はDeveloper Dashboardをさまざまなところで起動する。 次のスライドで動作環境やサービス選定の前提を説明 13

Slide 14

Slide 14 text

前提1 14 リポジトリ渡す からよしなに やって! はいよ。 仮想マシンで 動かすぜ! セルフホスト サービス利用 楽 苦 仮想マシンによる起動は除く。できれば、VMセルフホストは避けたい。(何か見た)

Slide 15

Slide 15 text

前提2 15 各ベンダーのKubernetesで起動した場合を除く ※個々の制約事項を説明するの難しいため割愛 あと、大きく話が脱線しそう&やってみたら簡単すぎて話にならなさそう。

Slide 16

Slide 16 text

実際に起動してみた(結論) 16 項目 結果 GitHub Codespaces ⚪ Google Cloud △ AWS ⚪ Azure ◎ 以下の観点で評価 ● 手軽に起動できるかどうか ● 比較的に低コストで起動できるか ● 起動手段がどれくらいあるか

Slide 17

Slide 17 text

まずはDeveloper DashboardをGitHub Codespacesで動かす(デモあり) 17 問題なく動作するデモ

Slide 18

Slide 18 text

GitHub Codespacesで起動した場合 18 GitHub Codespacesで動作するアプリケーションでのみ有効であること ちょっと試すケースでは一番早い! 以下のケースでは利用が難しい(かもしれない) ● 特定のクラウド環境でのみアプリケーションを起動することが前提あるいは必須 ● アプリケーションが特定のバックエンドインフラにアクセスする必要がある

Slide 19

Slide 19 text

AWSで起動した場合 19 アーキテクチャ次第でさまざまな構成が検討できる! .NETの対応が他よりも比較的に遅い サービス別の考慮事項については次のスライド .NET Aspireを起動してみたサービス ● AWS App Runner ● Amazon ECS

Slide 20

Slide 20 text

ECS Aspire and App Runner Blazor(デモあり) 20 AWS Cloud AWS App Runner Virtual private cloud (VPC) Amazon ECS .NET Aspire .NET App 開発者 ユーザ なお、ユーザが直接ECSにアクセスすることは基本ないのでロードバランサーが必要

Slide 21

Slide 21 text

ECS Aspire and ECS Blazor(デモなし) 21 AWS Cloud Virtual private cloud (VPC) .NET Aspire .NET App 開発者 ユーザ なお、ユーザが直接ECSにアクセスすることは基本ないのでロードバランサーが必要 本番環境ならサブネットを分けたほうがよい。 ECS Task ECS Task

Slide 22

Slide 22 text

ECS Container Aspire and ECS Container Blazor(デモなし) 22 AWS Cloud Virtual private cloud (VPC) 開発者 ユーザ なお、ユーザが直接ECSにアクセスすることは基本ないのでロードバランサーが必要 ECS Task .NET Aspire .NET App

Slide 23

Slide 23 text

ECSで.NET Aspireを起動した場合 23 (起動方法や構成にもよるが)ECSの場合は自由度が高い ● 1つのECSタスクで処理 VS ECSタスク間で処理 ○ ECSタスク = docker composeのような単位 ● ⭐テレメトリデータの受信に対してECSにセキュリティグループが必要 ○ App RunnerからECSにテレメトリデータを送信できる ● ⭐IPアドレスを固定する必要アリ ○ ECSのタスクにIPを固定する機能はないのでサービスディスカバリが必要 細かい話: 外部(社外)からアクセスできないような仕組み (AWS WAFあるいはセキュリティグループなど)

Slide 24

Slide 24 text

App Runner Aspire and ECS Blazor(デモなし) 24 AWS Cloud AWS App Runner Virtual private cloud (VPC) Amazon ECS .NET App .NET Aspire App Runner、ECS間をプライベートつなぐ場合 App Runnerがプライベートアクセスになるので前段にプロキシが必要(App Runnerがパブリックにならない) プライベートアクセスがないとプライベートIPもないのでECSとの通信は不可 なお、ユーザが直接ECSにアクセスすることは基本ないのでロードバランサーが必要 プロキシ プライベートアクセス 開発者 ユーザ

Slide 25

Slide 25 text

App Runnerで.NET Aspireを起動した場合 25 App Runnerはよくも悪くもVPCがなくても起動できる。 ● テレメトリデータの送受信に対してセキュリティグループの設定が必要 ○ ECSからApp Runnerにテレメトリデータを送信できる ● ⭐App Runner コンテナの前段にプロキシを入れないといけない ● ⭐Developer Dashboardを起動したときローカルホストから通信を受けたい ○ App RunnerのインバウンドVPCアクセスを有効にする必要がある ※VPCエンドポイントが必要、コストが増える 細かい話: App Runnerが外部からアクセスできないような仕組み(先程と同様)

Slide 26

Slide 26 text

Azureで.NET Aspireを起動する場合は何がある? 26 みんなもう知ってるよね?ってことでざっと見える範囲でいくつか羅列 ● Azure Container Apps (ACA) ● Azure Kubernetes Services (AKS) 今回は検証の対象外 デプロイツール ● Azure Developer CLI

Slide 27

Slide 27 text

これまでの気づきなど 27

Slide 28

Slide 28 text

Google Cloudで.NET Aspireを起動した場合 28 CloudRun、GAEではVPCがない。というかVPCに繋ぐという発想 ● ローカルホストという概念がないため、テレメトリーデータの送信先が不明 ● サイドカーでテレメトリーデータを送信すればできそう ○ メインとなるアプリがサイドカー??? 構成が複雑になりがち&説明が難しいので今回は割愛 ていうか起動できたけど、期待通りの動作ではなかった。

Slide 29

Slide 29 text

.NET Aspireを検証しているときに環境変数で覚えておくと良いもの 29 ● DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS ○ trueにへ.NET Aspire初ログイン時に聞かれるトークンを省略する 引用:Dashboard configuration - NET Aspire

Slide 30

Slide 30 text

まとめ 30 ● .NET Aspireとオブザーバビリティ、OpenTelemetryについて説明した ● .NET Aspireは.NETさえあれば、どこでも動く ○ と思ったらGoogle Cloudで想定通り動かそうとしたらうまくいかなかった ○ AWSはかなり楽にできた。秒でできる。(大嘘) ● なんやかんやで工夫すれば起動できるAWS ● Azureではやっぱり手軽にできる ○ azdで起動するとどんなインフラができたかぱっと見わからない ● 次は各社のKubernetesサービスで検証してみたい

Slide 31

Slide 31 text

最近の話(.NET Aspire) 31

Slide 32

Slide 32 text

.NET AspireがAWS CDKに対応 32 Aspire.Hosting.AWSという名前でデプロイできるようになりました。 Aspire.Hosting.AWS https://github.com/dotnet/aspire/tree/main/src/Aspire.Hosting.AWS

Slide 33

Slide 33 text

Semantic Kernelと.NET Aspireを使用してAIアプリケーションを簡単に構築 33 SemanticKernelと.NET Aspireを利用した良い例 Build AI Applications with ease using Semantic Kernel and .NET Aspire https://devblogs.microsoft.com/semantic-kernel/build-ai-applications-with-ease-using-semantic-kernel-and-net-aspire/

Slide 34

Slide 34 text

Semantic Kernelと.NET Aspireを使用してAIアプリケーションを簡単に構築 34 OllamaとSemantic Kernelを組み合わせたRAGの話題 How to create a RAG application using .NET Aspire, Ollama, and Semantic Kernel? https://www.kallemarjokorpi.fi/blog/rag-application-with-net-aspire-and-semantic-kernel/

Slide 35

Slide 35 text

AspireShopWithSemanticKernel GitHub 35 AspireとSemantic Kernelを組み合わせたリポジトリ AspireShopWithSemanticKernel https://github.com/vicperdana/AspireShopWithSemanticKernel

Slide 36

Slide 36 text

余談 36

Slide 37

Slide 37 text

(AWS).NET8に対応していれば、GitHubからデプロイも容易 37 AWS Cloud AWS App Runner アプリケーション(.NETのプロジェクト)をデリバリーするだけで良い ランタイムはAWSが面倒をみてくれる 開発者