狠狠撸

狠狠撸Share a Scribd company logo
.NET Core向けコンテナ
およびデバッグ関連の
Visual Studio 2019の機能
2019/04/21 Visual Studio 2019 Launch Event in Tokyo.
@tanaka_733
Microsoft MVP for Azure
自己紹介
@tanaka_733 https://www.tanaka733.net/
?Microsoft MVP for Azure
?New Relic
?C#, Q#, .NET Core, Visual StudioおよびVS拡張
kubernetes/OpenShift on Azure など
質問受け付けます!
slido.com
#vs2019c
今日のテーマ
Visual Studio 2019の顿辞肠办别谤サポート
? (おまけ)ASP.NET Core Webプロジェクトの新機能
? Visual Studio 2017からの変更点
? コンテナオーケストレーターサポートの追加
Visual Studio 2019のデバッグ新機能
? スナップショットデバッガーなどの紹介
? AKSでのデバッグなど
(補足).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の新機能はまだなさそう
ASP.NET Core関連新機能
デバッグの新機能まわりがうまく動かなかったのでお詫びに…
ASP.NET Core関連の新機能
プロジェクトテンプレート選択UXの刷新
ユーザーシークレット機能のサポート
cshtmlからの参照検索
LibManによるクライアント側ライブラリの管理
プロジェクトテンプレート
まず、ASP.NET Core か
ASP.NET Web (.NET
Framework)かを選択。
同じ「ASP.NET Core」でも言語
でテンプレートが異なるので注意
プロジェクトテンプレート
ユーザーシークレット
? 開発時用の機能 ? 運用環境で使うのはNG
? 機密情報をソースコードリポジトリの外に ? 実体は %APPDATA%
? ソースコード自体は開発環境と運用環境で変更なし
? 運用環境では、機密情報を保持できる適切なストレージ(Azure Key Vaultなど)を利用
ユーザーシークレット
csprojへの追加および、%APPDATA%内にファイル作成をしてくれる
ASP.NET Coreプロセスはこのファイルを参照して読み込んでくれる
ユーザーシークレット
作成されたsecrets.jsonにキー?値のペアを保存
あくまで平文であることに注意。
? 開発時の機密情報なので、開発マシンのユーザーでログインできる人はアクセスできてよいという前提
ユーザーシークレット
ASP.NET Core 2.0以降ではデフォルトの設定で、環境がDevelopmentの場合
IConfigurationからユーザーシークレットを取得可能
より詳細な設定は
https://docs.microsoft.com/ja-jp/aspnet/core/security/app-
secrets?view=aspnetcore-2.2&tabs=windows
cshtml (Razor)からの参照検索
Razor内で「定義をここに表示」 ? モデルクラスの定义を表示
cshtml (Razor)からの参照検索
モデルクラス側ですべての参照を検索 ? 搁补锄辞谤内での参照がヒット
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
尝颈产惭补苍の机能
顿辞肠办别谤サポート
WebアプリのDocker &
コンテナオーケストレーターサポート
コンテナサポート
? 単一のASP.NET Core アプリをコンテナとして動かすことをサポート
? ASP.NET (.NET Framework)もサポート (Windowsコンテナ)
コンテナオーケストレーターサポート
? Kubernetesなどのオーケストレーターへの配置をサポート
どちらも拡張機能ではなく、標準のインストーラーのオプションとして選択可能
インストールオプション
コンテナサポート
単一プロジェクトのままDockerfileが追加できる
ローカルでDockerを使ったデバッグができる
? 実際に動かすためにはDocker Desktopのインストールが必要
利用するコンテナイメージがMCR(Microsoft Container
Registry)経由になった
顿辞肠办别谤サポートの追加
プロジェクトテンプレートで選択 既存のWebプロジェクトに追加も可能
顿辞肠办别谤サポートの詳細
Dockerfileの追加 ? 2019より余計なプロジェクトが追加されずファイルのみ追加
デバッグプロファイルの追加
? NuGet経由でデバッグプロファイル用のライブラリが追加される
? Docker Desktopないと動かないし、余計という説もある
Dockerfile
Runtimeのみのイメージに
ポートの設定などを追加
SDKのイメージで
ビルドを実行
ビルドしたイメージで
ローカルファイルへ発行(publish)
Baseイメージに
発行したアプリを配置して完成
デバッグの仕組みは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)
ビルド成果物
など
おすすめは…?
ローカルのDocker Desktop使ってデバッグしたいならあり
わざわざローカルでまでDocker使う必要あるのかは???
? Hyper-Vで仮想マシン動かすのでそれなりにリソース使う
? ASP.NET (Framework)なら環境分離できるメリットあるが
ASP.NET Coreだとそもそもポータビリティあるからメリットがなさそう
Dockerfileのみ手動追加でもいいのでは?
? 顿辞肠办别谤サポートで追加した後に余計なもの削除したい場合は
デバッグプロファイルとNuGetパッケージを削除
? DockerイメージのビルドはCIサーバー的な場所で実行
コンテナオーケストレーター
サポート
コンテナオーケストレーターサポート
の追加
kubernetes/helm用のオーケストレーターサ
ポートを利用するであれば
プロジェクトテンプレートで選択
既存のWebプロジェクトに追加も可能
Kubernetes/helmの場合
Dockerfile + helmの定義ファイル
Azure Dev Spacesを使ったデバッグプロファイル
Service Fabricの場合
Windows Serverコンテナーを利用したDockerfile
+ Service Fabric展開用のプロジェクト
Azure Service Fabric SDKが必須
デバッグにはWindows Containerに切り替えて
Docker Desktopが必須
Docker Composeの場合
Dockerfileの追加
+ docker-composeプロジェクトの追加 (デバッグプロファイルを含む)
これもデバッグ実行には
Docker Desktop必須
おすすめは…?
とりあえず使ってみる分にはサンプルプロジェクトで試してみよう
? Service FabricやDocker Composeは専用プロジェクトが追加されるので、
場合によっては使いづらいかもしれない
? テンプレートでできたものを編集するのが早いのか
素のASP.NET プロジェクトに手編集するのが早いのかは
場合によりけり…
プロジェクトにはDockerfileや最低限のファイルのみ持たせ、
ローカルのデバッグはDockerなしがいいのでは?
? 同じアプリの本番環境でもDockerあり、なし両方の可能性がありうる
? それができるのがASP.NET Coreのメリット
? Azure DevOpsやそれに類するサービスを使って、
CICD側にコンテナ作成やデプロイの設定を持たせる
デプロイサポート
VSから直接どこかにデプロイ(発行)できる
? お手軽だけど自動化しづらい(VSからの操作が必須なので)
VSからAzureの継続的デリバリ(CD)の設定ができる ? New!!
VSから直接デプロイはお手軽だが、属マシンになってしまう
CDの設定はAzure Pipelineのみサポートなので、
ほかのCDは自分で設定しよう
発行先
App Service (Linux)
? 選択したApp Serviceに展開
コンテナーレジストリ
? ACRもしくはDocker Hubもしくは任意
のレジストリにpush
Azure VM
? Azure VM上のIISに
Web Deployで配置
IIS, FTP, その他
? WebDeploy (MSDeploy)
? 既存の機能
フォルダー
? dotnet publish
デバッグまわり
スナップショットデバッガー
スナップショットデバッガー自体は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
スナップショットデバッガーの开始
説明画面が表示される
ブレークポイントを设定
スナップショットの収集
ブレークポイントに来るとスナップショットが収集されるので
「スナップショットの表示」で詳細を見る
スナップショットの表示
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/
セットアップ例
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
タイムトラベルデバッガーの開始
条件を満たしていると、
スナップショットデバッガーの开始ダイアロ
グにオプションが表示される
タイムトラベルトレースの设定
スナップショットの収集
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
Azure Dev Spaces
デバッグプロパティで、AKSクラスターとkubernetesのnamespace(空間)を指定するだけ
AKS上のアプリにアクセスすると
ブレークポイントで止まる
ログもストリーミングされている
アプリ展開の仕組み(想像図)
ソースコード
DevSpaces経由でのイメージ作成、Pod?Serviceの展開、vsdbgの配置、
ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている
azds namespace
Dockerfile
Helm Chart
Helm tiller
webhook
image prepull
docker
image
プロジェクトを転送?
イメージ作成
デバッグの仕組み(想像図)
ソースコード
デバッガー
クライアント アプリのPod
dotnet
vsdbg
SSH
ClusterIP
service
ブラウザ
DevSpaces経由でのイメージ作成、Pod?Serviceの展開、vsdbgの配置、
ルーティング、デバッガークライアントの起動などをVisual Studio内でまとめてやってくれている
traefik
LoadBalancer
serviceDNS解決は azds.io を使って
勝手にやってくれる
直接アプリではなく、
traefik経由でアクセスしている
azds namespace 指定したnamespace
azds namespace
(指定した) app1 namespace
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
まとめ
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必須

More Related Content

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