Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
.NET Core向けコンテナ
およびデバッグ関連の
Visual Studio 2019の機能
2019/04/21 Visual Studio 2019 Launch Event in Tokyo.
@tanaka_733
Microsof...
自己紹介
@tanaka_733 https://www.tanaka733.net/
◦Microsoft MVP for Azure
◦New Relic
◦C#, Q#, .NET Core, Visual StudioおよびVS拡張
k...
質問受け付けます!
slido.com
#vs2019c
今日のテーマ
Visual Studio 2019のDockerサポート
◦ (おまけ)ASP.NET Core Webプロジェクトの新機能
◦ Visual Studio 2017からの変更点
◦ コンテナオーケストレーターサポートの追加
V...
(補足).NET Core 3.0
/ ASP.NET Core 3.0
.NET Core 3.0は今年後半リリース
◦ 詳細な日程はBuild 2019にて発表予定
◦ https://devblogs.microsoft.com/dotn...
ASP.NET Core関連新機能
デバッグの新機能まわりがうまく動かなかったのでお詫びに…
ASP.NET Core関連の新機能
プロジェクトテンプレート選択UXの刷新
ユーザーシークレット機能のサポート
cshtmlからの参照検索
LibManによるクライアント側ライブラリの管理
プロジェクトテンプレート
まず、ASP.NET Core か
ASP.NET Web (.NET
Framework)かを選択。
同じ「ASP.NET Core」でも言語
でテンプレートが異なるので注意
プロジェクトテンプレート
ユーザーシークレット
◦ 開発時用の機能 ➔ 運用環境で使うのはNG
◦ 機密情報をソースコードリポジトリの外に ➔ 実体は %APPDATA%
◦ ソースコード自体は開発環境と運用環境で変更なし
◦ 運用環境では、機密情報を保持できる適切なス...
ユーザーシークレット
csprojへの追加および、%APPDATA%内にファイル作成をしてくれる
ASP.NET Coreプロセスはこのファイルを参照して読み込んでくれる
ユーザーシークレット
作成されたsecrets.jsonにキー・値のペアを保存
あくまで平文であることに注意。
◦ 開発時の機密情報なので、開発マシンのユーザーでログインできる人はアクセスできてよいという前提
ユーザーシークレット
ASP.NET Core 2.0以降ではデフォルトの設定で、環境がDevelopmentの場合
IConfigurationからユーザーシークレットを取得可能
より詳細な設定は
https://docs.microsoft...
cshtml (Razor)からの参照検索
Razor内で「定義をここに表示」 ➔ モデルクラスの定義を表示
cshtml (Razor)からの参照検索
モデルクラス側ですべての参照を検索 ➔ Razor内での参照がヒット
LibMan
VS2017でのBowerマネージャーといった大掛かりな
クライアント側ライブラリの管理機能は廃止されました(
シンプルにプロバイダーからライブラリをインストールすることをサポートするLibrary Manager
(LibMan...
LibManの機能
Dockerサポート
WebアプリのDocker &
コンテナオーケストレーターサポート
コンテナサポート
◦ 単一のASP.NET Core アプリをコンテナとして動かすことをサポート
◦ ASP.NET (.NET Framework)もサポート (Window...
インストールオプション
コンテナサポート
単一プロジェクトのままDockerfileが追加できる
ローカルでDockerを使ったデバッグができる
◦ 実際に動かすためにはDocker Desktopのインストールが必要
利用するコンテナイメージがMCR(Microso...
Dockerサポートの追加
プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
Dockerサポートの詳細
Dockerfileの追加  2019より余計なプロジェクトが追加されずファイルのみ追加
デバッグプロファイルの追加
◦ NuGet経由でデバッグプロファイル用のライブラリが追加される
◦ Docker Deskt...
Dockerfile
Runtimeのみのイメージに
ポートの設定などを追加
SDKのイメージで
ビルドを実行
ビルドしたイメージで
ローカルファイルへ発行(publish)
Baseイメージに
発行したアプリを配置して完成
デバッグの仕組みはVS2017のころと同じ
Docker DesktopはAzure ADログインしているとshare driveに問題
参考: https://tech.guitarrapc.com/entry/2017/12/27/0424...
おすすめは…?
ローカルのDocker Desktop使ってデバッグしたいならあり
わざわざローカルでまでDocker使う必要あるのかは???
◦ Hyper-Vで仮想マシン動かすのでそれなりにリソース使う
◦ ASP.NET (Framewo...
コンテナオーケストレーター
サポート
コンテナオーケストレーターサポート
の追加
kubernetes/helm用のオーケストレーターサ
ポートを利用するであれば
プロジェクトテンプレートで選択
既存のWebプロジェクトに追加も可能
Kubernetes/helmの場合
Dockerfile + helmの定義ファイル
Azure Dev Spacesを使ったデバッグプロファイル
Service Fabricの場合
Windows Serverコンテナーを利用したDockerfile
+ Service Fabric展開用のプロジェクト
Azure Service Fabric SDKが必須
デバッグにはWindows ...
Docker Composeの場合
Dockerfileの追加
+ docker-composeプロジェクトの追加 (デバッグプロファイルを含む)
これもデバッグ実行には
Docker Desktop必須
おすすめは…?
とりあえず使ってみる分にはサンプルプロジェクトで試してみよう
◦ Service FabricやDocker Composeは専用プロジェクトが追加されるので、
場合によっては使いづらいかもしれない
◦ テンプレートでできたもの...
デプロイサポート
VSから直接どこかにデプロイ(発行)できる
◦ お手軽だけど自動化しづらい(VSからの操作が必須なので)
VSからAzureの継続的デリバリ(CD)の設定ができる  New!!
VSから直接デプロイはお手軽だが、属マシンにな...
発行先
App Service (Linux)
◦ 選択したApp Serviceに展開
コンテナーレジストリ
◦ ACRもしくはDocker Hubもしくは任意
のレジストリにpush
Azure VM
◦ Azure VM上のIISに
We...
デバッグまわり
スナップショットデバッガー
スナップショットデバッガー自体はAzure関係なく利用可能
Visual Studio 2019と組み合わせて、
Azure上のリソースで動かしている場合にブレークポイントの設定などが
可能になる
◦ App Ser...
スナップショットデバッガーの開始
説明画面が表示される
ブレークポイントを設定
スナップショットの収集
ブレークポイントに来るとスナップショットが収集されるので
「スナップショットの表示」で詳細を見る
スナップショットの表示
Time Travel Debugger
https://devblogs.microsoft.com/visualstudio/introducing-time-travel-
debugging-for-visual-studio-ente...
セットアップ例
Install-WindowsFeature -name Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Asp-Net45
Invoke-WebReq...
タイムトラベルデバッガーの開始
条件を満たしていると、
スナップショットデバッガーの開始ダイアロ
グにオプションが表示される
タイムトラベルトレースの設定
スナップショットの収集
AKSを使ったデバッグ
Azure Dev Spacesもしくはスナップショットデバッガーを使います
◦ オーケストレーターサポートでkubernetes/helmを有効化
Azure Dev Spaces
◦ 一部のリージョンでのみ利用可能な...
Azure Dev Spaces
デバッグプロパティで、AKSクラスターとkubernetesのnamespace(空間)を指定するだけ
AKS上のアプリにアクセスすると
ブレークポイントで止まる
ログもストリーミングされている
アプリ展開の仕組み(想像図)
ソースコード
DevSpaces経由でのイメージ作成、Pod・Serviceの展開、vsdbgの配置、
ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている
azd...
デバッグの仕組み(想像図)
ソースコード
デバッガー
クライアント アプリのPod
dotnet
vsdbg
SSH
ClusterIP
service
ブラウザ
DevSpaces経由でのイメージ作成、Pod・Serviceの展開、vsdbg...
azds namespace
(指定した) app1 namespace
AKSでスナップショットデバッガー
コンテナ内にスナップショットデバッガーをインストールし、
ASP.NET Coreのdotnetプロセスにプロファイラーを設定する必要がある
設定例
https://github.com/Microsoft/...
まとめ
ASP.NET Core Webプロジェクトの新機能
◦ ユーザーシークレット、cshtmlでの参照検索、LibMan
Dockerサポート
◦ Docker Desktop必須
◦ 単一プロジェクトに変更
コンテナオーケストレーターサ...
Upcoming SlideShare
Loading in …5
×

.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能

1,240 views

Published on

Visual Studio 2019 Launch イベントでの登壇資料。

Published in: Technology
  • Be the first to comment

.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能

  1. 1. .NET Core向けコンテナ およびデバッグ関連の Visual Studio 2019の機能 2019/04/21 Visual Studio 2019 Launch Event in Tokyo. @tanaka_733 Microsoft MVP for Azure
  2. 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. 3. 質問受け付けます! slido.com #vs2019c
  4. 4. 今日のテーマ Visual Studio 2019のDockerサポート ◦ (おまけ)ASP.NET Core Webプロジェクトの新機能 ◦ Visual Studio 2017からの変更点 ◦ コンテナオーケストレーターサポートの追加 Visual Studio 2019のデバッグ新機能 ◦ スナップショットデバッガーなどの紹介 ◦ AKSでのデバッグなど
  5. 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. 6. ASP.NET Core関連新機能 デバッグの新機能まわりがうまく動かなかったのでお詫びに…
  7. 7. ASP.NET Core関連の新機能 プロジェクトテンプレート選択UXの刷新 ユーザーシークレット機能のサポート cshtmlからの参照検索 LibManによるクライアント側ライブラリの管理
  8. 8. プロジェクトテンプレート まず、ASP.NET Core か ASP.NET Web (.NET Framework)かを選択。 同じ「ASP.NET Core」でも言語 でテンプレートが異なるので注意
  9. 9. プロジェクトテンプレート
  10. 10. ユーザーシークレット ◦ 開発時用の機能 ➔ 運用環境で使うのはNG ◦ 機密情報をソースコードリポジトリの外に ➔ 実体は %APPDATA% ◦ ソースコード自体は開発環境と運用環境で変更なし ◦ 運用環境では、機密情報を保持できる適切なストレージ(Azure Key Vaultなど)を利用
  11. 11. ユーザーシークレット csprojへの追加および、%APPDATA%内にファイル作成をしてくれる ASP.NET Coreプロセスはこのファイルを参照して読み込んでくれる
  12. 12. ユーザーシークレット 作成されたsecrets.jsonにキー・値のペアを保存 あくまで平文であることに注意。 ◦ 開発時の機密情報なので、開発マシンのユーザーでログインできる人はアクセスできてよいという前提
  13. 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. 14. cshtml (Razor)からの参照検索 Razor内で「定義をここに表示」 ➔ モデルクラスの定義を表示
  15. 15. cshtml (Razor)からの参照検索 モデルクラス側ですべての参照を検索 ➔ Razor内での参照がヒット
  16. 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. 17. LibManの機能
  18. 18. Dockerサポート
  19. 19. WebアプリのDocker & コンテナオーケストレーターサポート コンテナサポート ◦ 単一のASP.NET Core アプリをコンテナとして動かすことをサポート ◦ ASP.NET (.NET Framework)もサポート (Windowsコンテナ) コンテナオーケストレーターサポート ◦ Kubernetesなどのオーケストレーターへの配置をサポート どちらも拡張機能ではなく、標準のインストーラーのオプションとして選択可能
  20. 20. インストールオプション
  21. 21. コンテナサポート 単一プロジェクトのままDockerfileが追加できる ローカルでDockerを使ったデバッグができる ◦ 実際に動かすためにはDocker Desktopのインストールが必要 利用するコンテナイメージがMCR(Microsoft Container Registry)経由になった
  22. 22. Dockerサポートの追加 プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
  23. 23. Dockerサポートの詳細 Dockerfileの追加  2019より余計なプロジェクトが追加されずファイルのみ追加 デバッグプロファイルの追加 ◦ NuGet経由でデバッグプロファイル用のライブラリが追加される ◦ Docker Desktopないと動かないし、余計という説もある
  24. 24. Dockerfile Runtimeのみのイメージに ポートの設定などを追加 SDKのイメージで ビルドを実行 ビルドしたイメージで ローカルファイルへ発行(publish) Baseイメージに 発行したアプリを配置して完成
  25. 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. 26. おすすめは…? ローカルのDocker Desktop使ってデバッグしたいならあり わざわざローカルでまでDocker使う必要あるのかは??? ◦ Hyper-Vで仮想マシン動かすのでそれなりにリソース使う ◦ ASP.NET (Framework)なら環境分離できるメリットあるが ASP.NET Coreだとそもそもポータビリティあるからメリットがなさそう Dockerfileのみ手動追加でもいいのでは? ◦ Dockerサポートで追加した後に余計なもの削除したい場合は デバッグプロファイルとNuGetパッケージを削除 ◦ DockerイメージのビルドはCIサーバー的な場所で実行
  27. 27. コンテナオーケストレーター サポート
  28. 28. コンテナオーケストレーターサポート の追加 kubernetes/helm用のオーケストレーターサ ポートを利用するであれば プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
  29. 29. Kubernetes/helmの場合 Dockerfile + helmの定義ファイル Azure Dev Spacesを使ったデバッグプロファイル
  30. 30. Service Fabricの場合 Windows Serverコンテナーを利用したDockerfile + Service Fabric展開用のプロジェクト Azure Service Fabric SDKが必須 デバッグにはWindows Containerに切り替えて Docker Desktopが必須
  31. 31. Docker Composeの場合 Dockerfileの追加 + docker-composeプロジェクトの追加 (デバッグプロファイルを含む) これもデバッグ実行には Docker Desktop必須
  32. 32. おすすめは…? とりあえず使ってみる分にはサンプルプロジェクトで試してみよう ◦ Service FabricやDocker Composeは専用プロジェクトが追加されるので、 場合によっては使いづらいかもしれない ◦ テンプレートでできたものを編集するのが早いのか 素のASP.NET プロジェクトに手編集するのが早いのかは 場合によりけり… プロジェクトにはDockerfileや最低限のファイルのみ持たせ、 ローカルのデバッグはDockerなしがいいのでは? ◦ 同じアプリの本番環境でもDockerあり、なし両方の可能性がありうる ◦ それができるのがASP.NET Coreのメリット ◦ Azure DevOpsやそれに類するサービスを使って、 CICD側にコンテナ作成やデプロイの設定を持たせる
  33. 33. デプロイサポート VSから直接どこかにデプロイ(発行)できる ◦ お手軽だけど自動化しづらい(VSからの操作が必須なので) VSからAzureの継続的デリバリ(CD)の設定ができる  New!! VSから直接デプロイはお手軽だが、属マシンになってしまう CDの設定はAzure Pipelineのみサポートなので、 ほかのCDは自分で設定しよう
  34. 34. 発行先 App Service (Linux) ◦ 選択したApp Serviceに展開 コンテナーレジストリ ◦ ACRもしくはDocker Hubもしくは任意 のレジストリにpush Azure VM ◦ Azure VM上のIISに Web Deployで配置 IIS, FTP, その他 ◦ WebDeploy (MSDeploy) ◦ 既存の機能 フォルダー ◦ dotnet publish
  35. 35. デバッグまわり
  36. 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. 37. スナップショットデバッガーの開始
  38. 38. 説明画面が表示される
  39. 39. ブレークポイントを設定
  40. 40. スナップショットの収集 ブレークポイントに来るとスナップショットが収集されるので 「スナップショットの表示」で詳細を見る
  41. 41. スナップショットの表示
  42. 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. 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. 44. タイムトラベルデバッガーの開始 条件を満たしていると、 スナップショットデバッガーの開始ダイアロ グにオプションが表示される
  45. 45. タイムトラベルトレースの設定
  46. 46. スナップショットの収集
  47. 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. 48. Azure Dev Spaces デバッグプロパティで、AKSクラスターとkubernetesのnamespace(空間)を指定するだけ
  49. 49. AKS上のアプリにアクセスすると ブレークポイントで止まる ログもストリーミングされている
  50. 50. アプリ展開の仕組み(想像図) ソースコード DevSpaces経由でのイメージ作成、Pod・Serviceの展開、vsdbgの配置、 ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている azds namespace Dockerfile Helm Chart Helm tiller webhook image prepull docker image プロジェクトを転送? イメージ作成
  51. 51. デバッグの仕組み(想像図) ソースコード デバッガー クライアント アプリのPod dotnet vsdbg SSH ClusterIP service ブラウザ DevSpaces経由でのイメージ作成、Pod・Serviceの展開、vsdbgの配置、 ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている traefik LoadBalancer serviceDNS解決は azds.io を使って 勝手にやってくれる 直接アプリではなく、 traefik経由でアクセスしている azds namespace 指定したnamespace
  52. 52. azds namespace
  53. 53. (指定した) app1 namespace
  54. 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. 55. まとめ ASP.NET Core Webプロジェクトの新機能 ◦ ユーザーシークレット、cshtmlでの参照検索、LibMan Dockerサポート ◦ 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必須

×