狠狠撸
Submit Search
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
?
3 likes
?
2,862 views
Takayoshi Tanaka
Visual Studio 2019 Launch イベントでの登壇資料。
Read less
Read more
1 of 55
Download now
Download to read offline
More Related Content
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
1.
.NET Core向けコンテナ およびデバッグ関連の Visual Studio
2019の機能 2019/04/21 Visual Studio 2019 Launch Event in Tokyo. @tanaka_733 Microsoft MVP for Azure
2.
自己紹介 @tanaka_733 https://www.tanaka733.net/ ?Microsoft MVP
for Azure ?New Relic ?C#, Q#, .NET Core, Visual StudioおよびVS拡張 kubernetes/OpenShift on Azure など
3.
質問受け付けます! slido.com #vs2019c
4.
今日のテーマ Visual Studio 2019の顿辞肠办别谤サポート ?
(おまけ)ASP.NET Core Webプロジェクトの新機能 ? Visual Studio 2017からの変更点 ? コンテナオーケストレーターサポートの追加 Visual Studio 2019のデバッグ新機能 ? スナップショットデバッガーなどの紹介 ? AKSでのデバッグなど
5.
(補足).NET Core 3.0 /
ASP.NET Core 3.0 .NET Core 3.0は今年後半リリース ? 詳細な日程はBuild 2019にて発表予定 ? https://devblogs.microsoft.com/dotnet/announcing-net-core-3-preview-3/ Visual Studio 2019では.NET Core 3.0 Previewを利用できる ASP.NET Core 3.0も.NET Core 3.0と同時の予定 ? 3.0から.NET Coreのみサポート(.NET Frameworkは非サポート) ? https://docs.microsoft.com/ja-jp/aspnet/core/?view=aspnetcore-2.2 ? ASP.NET Core 3.0 に関連するVSの新機能はまだなさそう
6.
ASP.NET Core関連新機能 デバッグの新機能まわりがうまく動かなかったのでお詫びに…
7.
ASP.NET Core関連の新機能 プロジェクトテンプレート選択UXの刷新 ユーザーシークレット機能のサポート cshtmlからの参照検索 LibManによるクライアント側ライブラリの管理
8.
プロジェクトテンプレート まず、ASP.NET Core か ASP.NET
Web (.NET Framework)かを選択。 同じ「ASP.NET Core」でも言語 でテンプレートが異なるので注意
9.
プロジェクトテンプレート
10.
ユーザーシークレット ? 開発時用の機能 ?
運用環境で使うのはNG ? 機密情報をソースコードリポジトリの外に ? 実体は %APPDATA% ? ソースコード自体は開発環境と運用環境で変更なし ? 運用環境では、機密情報を保持できる適切なストレージ(Azure Key Vaultなど)を利用
11.
ユーザーシークレット csprojへの追加および、%APPDATA%内にファイル作成をしてくれる ASP.NET Coreプロセスはこのファイルを参照して読み込んでくれる
12.
ユーザーシークレット 作成されたsecrets.jsonにキー?値のペアを保存 あくまで平文であることに注意。 ? 開発時の機密情報なので、開発マシンのユーザーでログインできる人はアクセスできてよいという前提
13.
ユーザーシークレット ASP.NET Core 2.0以降ではデフォルトの設定で、環境がDevelopmentの場合 IConfigurationからユーザーシークレットを取得可能 より詳細な設定は https://docs.microsoft.com/ja-jp/aspnet/core/security/app- secrets?view=aspnetcore-2.2&tabs=windows
14.
cshtml (Razor)からの参照検索 Razor内で「定義をここに表示」 ?
モデルクラスの定义を表示
15.
cshtml (Razor)からの参照検索 モデルクラス側ですべての参照を検索 ?
搁补锄辞谤内での参照がヒット
16.
LibMan VS2017でのBowerマネージャーといった大掛かりな クライアント側ライブラリの管理機能は廃止されました( シンプルにプロバイダーからライブラリをインストールすることをサポートするLibrary Manager (LibMan)が開発され、Visual Studio
2019ではLibManのサポートで対応します ビルドとかバンドルなどをしたい場合は、webpackなどを導入して、セットアップもそちらの方法 に従いましょう https://github.com/aspnet/LibraryManager https://docs.microsoft.com/ja-jp/aspnet/core/client- side/libman/?view=aspnetcore-2.2 https://blog.shibayan.jp/entry/20180903/1535958086
17.
尝颈产惭补苍の机能
18.
顿辞肠办别谤サポート
19.
WebアプリのDocker & コンテナオーケストレーターサポート コンテナサポート ? 単一のASP.NET
Core アプリをコンテナとして動かすことをサポート ? ASP.NET (.NET Framework)もサポート (Windowsコンテナ) コンテナオーケストレーターサポート ? Kubernetesなどのオーケストレーターへの配置をサポート どちらも拡張機能ではなく、標準のインストーラーのオプションとして選択可能
20.
インストールオプション
21.
コンテナサポート 単一プロジェクトのままDockerfileが追加できる ローカルでDockerを使ったデバッグができる ? 実際に動かすためにはDocker Desktopのインストールが必要 利用するコンテナイメージがMCR(Microsoft
Container Registry)経由になった
22.
顿辞肠办别谤サポートの追加 プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
23.
顿辞肠办别谤サポートの詳細 Dockerfileの追加 ? 2019より余計なプロジェクトが追加されずファイルのみ追加 デバッグプロファイルの追加 ?
NuGet経由でデバッグプロファイル用のライブラリが追加される ? Docker Desktopないと動かないし、余計という説もある
24.
Dockerfile Runtimeのみのイメージに ポートの設定などを追加 SDKのイメージで ビルドを実行 ビルドしたイメージで ローカルファイルへ発行(publish) Baseイメージに 発行したアプリを配置して完成
25.
デバッグの仕組みはVS2017のころと同じ Docker DesktopはAzure ADログインしているとshare
driveに問題 参考: https://tech.guitarrapc.com/entry/2017/12/27/042458 Dockerデバッグの詳細については編集できないように見える Windows Dockerデバッグ Hyper-V MobyLinuxVM コンテナ アプリをビルドしたものや デバッガーなどをDocker Desktop のshare driveで共有して利用 デバッガー (vsdbg) ビルド成果物 など
26.
おすすめは…? ローカルのDocker Desktop使ってデバッグしたいならあり わざわざローカルでまでDocker使う必要あるのかは??? ? Hyper-Vで仮想マシン動かすのでそれなりにリソース使う ?
ASP.NET (Framework)なら環境分離できるメリットあるが ASP.NET Coreだとそもそもポータビリティあるからメリットがなさそう Dockerfileのみ手動追加でもいいのでは? ? 顿辞肠办别谤サポートで追加した後に余計なもの削除したい場合は デバッグプロファイルとNuGetパッケージを削除 ? DockerイメージのビルドはCIサーバー的な場所で実行
27.
コンテナオーケストレーター サポート
28.
コンテナオーケストレーターサポート の追加 kubernetes/helm用のオーケストレーターサ ポートを利用するであれば プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
29.
Kubernetes/helmの場合 Dockerfile + helmの定義ファイル Azure
Dev Spacesを使ったデバッグプロファイル
30.
Service Fabricの場合 Windows Serverコンテナーを利用したDockerfile +
Service Fabric展開用のプロジェクト Azure Service Fabric SDKが必須 デバッグにはWindows Containerに切り替えて Docker Desktopが必須
31.
Docker Composeの場合 Dockerfileの追加 + docker-composeプロジェクトの追加
(デバッグプロファイルを含む) これもデバッグ実行には Docker Desktop必須
32.
おすすめは…? とりあえず使ってみる分にはサンプルプロジェクトで試してみよう ? Service FabricやDocker
Composeは専用プロジェクトが追加されるので、 場合によっては使いづらいかもしれない ? テンプレートでできたものを編集するのが早いのか 素のASP.NET プロジェクトに手編集するのが早いのかは 場合によりけり… プロジェクトにはDockerfileや最低限のファイルのみ持たせ、 ローカルのデバッグはDockerなしがいいのでは? ? 同じアプリの本番環境でもDockerあり、なし両方の可能性がありうる ? それができるのがASP.NET Coreのメリット ? Azure DevOpsやそれに類するサービスを使って、 CICD側にコンテナ作成やデプロイの設定を持たせる
33.
デプロイサポート VSから直接どこかにデプロイ(発行)できる ? お手軽だけど自動化しづらい(VSからの操作が必須なので) VSからAzureの継続的デリバリ(CD)の設定ができる ?
New!! VSから直接デプロイはお手軽だが、属マシンになってしまう CDの設定はAzure Pipelineのみサポートなので、 ほかのCDは自分で設定しよう
34.
発行先 App Service (Linux) ?
選択したApp Serviceに展開 コンテナーレジストリ ? ACRもしくはDocker Hubもしくは任意 のレジストリにpush Azure VM ? Azure VM上のIISに Web Deployで配置 IIS, FTP, その他 ? WebDeploy (MSDeploy) ? 既存の機能 フォルダー ? dotnet publish
35.
デバッグまわり
36.
スナップショットデバッガー スナップショットデバッガー自体はAzure関係なく利用可能 Visual Studio 2019と組み合わせて、 Azure上のリソースで動かしている場合にブレークポイントの設定などが 可能になる ?
App Service ? 仮想マシン(Windows Server) ? AKS https://docs.microsoft.com/ja- jp/visualstudio/debugger/debug-live-azure- applications?view=vs-2019
37.
スナップショットデバッガーの开始
38.
説明画面が表示される
39.
ブレークポイントを设定
40.
スナップショットの収集 ブレークポイントに来るとスナップショットが収集されるので 「スナップショットの表示」で詳細を見る
41.
スナップショットの表示
42.
Time Travel Debugger https://devblogs.microsoft.com/visualstudio/introducing-time-travel- debugging-for-visual-studio-enterprise-2019/ 前提となる仮想マシンでのスナップショットデバッガー https://docs.microsoft.com/ja-jp/visualstudio/debugger/debug-live- azure-virtual-machines?view=vs-2019 試したものの、なぜか動かない… 前提条件: ?
Azure Windows仮想マシンのみ ? ASP.NET 4.8+ ? https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/
43.
セットアップ例 Install-WindowsFeature -name Web-Server
-IncludeManagementTools Install-WindowsFeature Web-Asp-Net45 Invoke-WebRequest http://go.microsoft.com/fwlink/?LinkId=2085155 -OutFile ndp48-devpack-enu.exe .?ndp48-devpack-enu.exe Install-WindowsFeature -Name Web-Mgmt-Service # Install Web Deploy 3.6 # Download file from Microsoft Downloads and save to local temp file (%LocalAppData%/Temp/2) $msiFile = [System.IO.Path]::GetTempFileName() | Rename-Item -NewName { $_ -replace 'tmp$', 'msi' } -PassThru Invoke-WebRequest -Uri http://download.microsoft.com/download/0/1/D/01DC28EA-638C-4A22-A57B-4CEF97755C6C/WebDeploy_amd64_en-US.msi -OutFile $msiFile # Prepare a log file $logFile = [System.IO.Path]::GetTempFileName() # Prepare the arguments to execute the MSI $arguments= '/i ' + $msiFile + ' ADDLOCAL=ALL /qn /norestart LicenseAccepted="0" /lv ' + $logFile # Execute the MSI and wait for it to complete $proc = (Start-Process -file msiexec -arg $arguments -Passthru) $proc | Wait-Process Get-Content $logFile
44.
タイムトラベルデバッガーの開始 条件を満たしていると、 スナップショットデバッガーの开始ダイアロ グにオプションが表示される
45.
タイムトラベルトレースの设定
46.
スナップショットの収集
47.
AKSを使ったデバッグ Azure Dev Spacesもしくはスナップショットデバッガーを使います ?
オーケストレーターサポートでkubernetes/helmを有効化 Azure Dev Spaces ? 一部のリージョンでのみ利用可能なプレビュー ? AKS作成後、Dev Spacesを有効にする ?ここまでAzure PortalやCLIで準備しておく ? ローカルのデバッグと同じような操作感覚で使える ? Docker Desktop 不要 (AKS側でコンテナのビルドを行う) スナップショットデバッガーを利用したい場合 ? https://docs.microsoft.com/ja-jp/visualstudio/debugger/debug-live-azure- kubernetes?view=vs-2019
48.
Azure Dev Spaces デバッグプロパティで、AKSクラスターとkubernetesのnamespace(空間)を指定するだけ
49.
AKS上のアプリにアクセスすると ブレークポイントで止まる ログもストリーミングされている
50.
アプリ展開の仕組み(想像図) ソースコード DevSpaces経由でのイメージ作成、Pod?Serviceの展開、vsdbgの配置、 ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている azds namespace Dockerfile Helm
Chart Helm tiller webhook image prepull docker image プロジェクトを転送? イメージ作成
51.
デバッグの仕組み(想像図) ソースコード デバッガー クライアント アプリのPod dotnet vsdbg SSH ClusterIP service ブラウザ DevSpaces経由でのイメージ作成、Pod?Serviceの展開、vsdbgの配置、 ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている traefik LoadBalancer serviceDNS解決は
azds.io を使って 勝手にやってくれる 直接アプリではなく、 traefik経由でアクセスしている azds namespace 指定したnamespace
52.
azds namespace
53.
(指定した) app1 namespace
54.
AKSでスナップショットデバッガー コンテナ内にスナップショットデバッガーをインストールし、 ASP.NET Coreのdotnetプロセスにプロファイラーを設定する必要がある 設定例 https://github.com/Microsoft/vssnapshotdebugger- docker/blob/master/2.2/stretch-slim/amd64/Dockerfile 注意点: .NET Core
CLRのプロファイラーは1つしか指定できないので、モニタリング用に別のプロファイラー を指定している場合などはいったんこちらに切り替えないといけない https://github.com/dotnet/coreclr/blob/v3.0.0-preview4-27612- 72/Documentation/Profiling/Profiler%20Loading.md
55.
まとめ ASP.NET Core Webプロジェクトの新機能 ?
ユーザーシークレット、cshtmlでの参照検索、LibMan 顿辞肠办别谤サポート ? Docker Desktop必須 ? 単一プロジェクトに変更 コンテナオーケストレーターサポートの追加 ? Kubernetes/Helm, Service Fabric, docker composeから選択可能。 ? リソース定義ファイルデバッグ用のプロジェクトやNuGetパッケージが追加される Azure Dev Spaces ? Docker Desktop不要で、AKS上でコンテナとしてアプリを動かしてデバッグできる スナップショットデバッガー ? Visual Studioから実行できるのはAzureサービスで動かした場合 ? タイムトラベルデバッガーは現状Windows VM on Azure + ASP.NET 4.8必須
Download