-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ASPNETDeployment
コンテンツと構成を IIS に同期するための拡張可能なクライアントサーバーツール
補足(Web Deploy の位置づけ): Web Deploy(MSDeploy)は
「ファイルをコピーする」だけでなく、
IIS の構成・DB スキーマ・ACL まで含めて同期するツールである。【単純な XCOPY】 ファイルだけをコピー → IIS のサイト設定、アプリ プール、証明書は手作業 【Web Deploy】 ファイル + IIS 構成 + DB + レジストリ + GAC … → 「サイトまるごと」を同期・差分適用できる.NET Framework 版 ASP.NET の配置における標準的な手段であり、
ASP.NET Core でも Azure App Service への発行等で
内部的に使われ続けている。
Web Deploy を使用すると、IIS 移行や、高度な「発行」ができるらしい。
そもそも「発行」はVisual Studio単体でも実行できる。
発行の対象は以下のとおり。
- IIS の構成
- コンテンツ
以下のような発行形式がある。
- [ファイル システム]
- [FTP]
- [Web Deploy]
- [Web Deploy パッケージ](zip)
補足(形式の選択指針):
形式 特徴 向く場面 ファイル システム フォルダに出すだけ CI で成果物を作る、後段で自由に配る FTP 古典的 レガシーなホスティング Web Deploy サーバへ直接同期 開発機から直接、少数台 Web Deploy パッケージ zip 化(設定はパラメータ化) CI/CD、承認を挟む運用 **CI/CD では「ファイル システム」か「パッケージ」**を選ぶ。
開発機から本番へ直接 Web Deploy する運用は、
誰が何を配ったか追えなくなるため避けるのが定石である。
Web Deploy 形式の発行には、以下のインフラが必要になる。
発行を行う。
-
CUI
msdeploy.exe -
GUI
以下の GUI があるが、裏で前述の CUI を利用しているものと思われる。-
WebMatrix
- Web Management Service
-
- Web Deployment Agent Service
- Web Management Service
-
Visual Studioのほうが新旧をサポートするが、
WebMatrix 自体が古いので、Visual Studioを使用する。
移行メモ(誤字): 原文の「利用しているものを思われる」は
**「利用しているものと思われる」**の誤りと判断し修正した。
補足(WebMatrix は終了済み): WebMatrix は 2017 年にサポート終了し、
後継として Visual Studio Code が案内されている。
現在の選択肢は Visual Studio、msdeploy.exe、
または Azure Pipelines / GitHub Actions のタスクである。# CI から msdeploy でパッケージを配る例 msdeploy.exe -verb:sync ` -source:package="MyApp.zip" ` -dest:auto,computerName="https://web01:8172/msdeploy.axd",` userName="deploy",password="$env:PW",authType="Basic" ` -setParamFile:"MyApp.SetParameters.xml" ` -allowUntrusted
発行を受信して処理する(エージェント)。
-
Web Deployment Agent Service
- 古い
- 旧 OS のサポート
-
Web Management Service
- 新しい
- 新 OS で同梱
補足(2 つのサービスの違い): 混同されやすいので整理しておく。
Web Deployment Agent Service (MsDepSvc) Web Management Service (WMSvc) 通称 リモート エージェント 管理サービス ハンドラー ポート 80( /MSDEPLOYAGENTSERVICE)8172( /msdeploy.axd)権限 管理者権限が必要 委任された非管理者でも可 認証 NTLM Basic / Windows 推奨 旧環境のみ こちら WMSvc(8172)が現在の標準である。
「サイト管理者に配置権限だけを委譲する」ことができ、
サーバの管理者権限を配布側に渡さずに済む点が大きい。ファイアウォールで 8172/TCP を開ける必要がある点、
既定で自己署名証明書が使われるため
-allowUntrustedか正規証明書が要る点が、実務でのつまずきどころ。
-
以下のような場合に、この形式を使用する。
- Web Deploy で直接 IIS に発行しない場合
- Azure の PaaS などにデプロイする場合
-
古くは、以下のようなファイルで PaaS にデプロイしていた。
(そう言えば、何やら見覚えがあるなぁ...と。)- サービス定義 (.csdef)
- サービスの構成 (.cscfg)
- サービス パッケージ (.cspkg)
-
ただ、最近は、以下のような形式に変わってきている。
(下記の、カスタムのMSDeploy プロバイダと思われる。)- Azure App Service
- Azure Virtual Machines
- ファイル システム
- カスタム ターゲット (IIS、FTP など)
補足(
.cspkgは Cloud Services のもの): 原文が
「見覚えがある」としている.csdef/.cscfg/.cspkgは、
**Azure Cloud Services(クラシック)**の形式である。
Web Deploy パッケージとは別物で、
Web Deploy パッケージ Cloud Services パッケージ 拡張子 .zip.cspkg+.cscfg中身 サイトのコンテンツ + IIS 構成 VM の役割定義ごと 対象 IIS / App Service Cloud Services(廃止済み) Azure Cloud Services(クラシック)は 2024 年に廃止され、
現在は App Service / Container Apps / AKS が受け皿になっている
(Azure Stack 等の周辺も同様に再編された)。現在の Azure App Service への配置手段:
手段 備考 az webapp deploy(Zip Deploy)現在の第一候補。単純な zip GitHub Actions / Azure Pipelines 上記をタスク化したもの Web Deploy (msdeploy) 引き続き利用可能 コンテナ .NETアプリをコンテナにデプロイ Zip Deploy が現在の主流で、
Web Deploy より単純(zip を投げるだけ)で CI と相性が良い。
-
Windows Azure Webサイトを WebDeploy Package で配置する - ROMANCE DAWN for the new world
http://gooner.hateblo.jp/entry/2014/02/05/websites-webdeploy/ -
Web Deploy as a site extension | ブログ | Microsoft Azure
https://azure.microsoft.com/ja-jp/blog/web-deploy-as-a-site-extension/ -
デプロイの概要 - Visual Studio
https://learn.microsoft.com/ja-jp/visualstudio/deployment/deploying-applications-services-and-components-resources
- Web 配置の特定のソースまたは宛先データを処理する。
- Web アプリケーション以外を対象にしたプロバイダーも存在する。
-
dbFullSql : SQL Server database deployments
-
dbSqlPackage : SQL Server/SQL Azure database deployments
-
dbDacFx : DACPAC-based SQL database deployments
-
dbMySql : MySQL database deployments
-
dbSqlite : Sqlite database deployments
- Web Deploy Providers
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd569040(v=ws.10)
補足(DB のデプロイは分離するのが定石): MSDeploy は
アプリと DB を一括で配置できるが、現在の運用では
分けるのが一般的である。【一括(MSDeploy の dbDacFx 等)】 利点: 1 コマンドで済む 欠点: ・スキーマ変更の可否を人が確認できない ・ロールバックが難しい ・アプリと DB の停止タイミングを制御しにくい 【分離(現在の定石)】 ① DB マイグレーションを先に適用(後方互換を保つ) ② アプリを入れ替える → ブルーグリーン / ローリング更新が可能になる現在の DB マイグレーション手段:
手段 備考 EF Core Migrations dotnet ef migrations/ バンドル(dotnet ef migrations bundle)DACPAC(SqlPackage) SQL Server Database Project から Flyway / DbUp SQL スクリプトを順に適用
dotnet ef migrations bundle(.NET 6+)は、
マイグレーションを単一の実行ファイルに固める機能で、
CI/CD で SDK を入れずに適用できるため実務で有用である。
- 発行機能を応用した移行も可能。
- 既存サイトをアーカイブして別のサイトに発行する。
- 失敗の際もリストア可能なようにしておく。
- バックアップ・リストアには appcmd.exe を使用する。
...\appcmd.exe add backup <任意のバックアップ名>
...\appcmd.exe restore backup <復元したいバックアップ名>
補足:
appcmd add backupが保存するのは
IIS の構成(applicationHost.config等)のみで、
コンテンツ(サイトのファイル)は含まれない点に注意する。
ファイルは別途バックアップが要る。# 構成のバックアップ(IIS 設定のみ) & "$env:windir\system32\inetsrv\appcmd.exe" add backup "before-migration" # 構成の書き出し(別サーバへ持っていく場合) & "$env:windir\system32\inetsrv\appcmd.exe" list site /config /xml > sites.xml
- 移行先サーバにインストールが必要なコンポーネントが XML で出力される。
- あくまでツールで確認できる範囲なので、過不足がある可能性がある。
- ここが実際の移行作業になる。
- whatif フラグを指定してコマンドを実行すると、事前の、動作検証ができる。
補足(
-whatIfは必ず使う): Web Deploy は
同期(sync)動作のため、宛先に余分なファイルがあると削除する。
意図しない削除を防ぐため、本番前に必ず-whatIfで差分を確認する。# 何が起きるかだけを出力(実際には変更しない) msdeploy.exe -verb:sync -source:... -dest:... -whatIf -verbose # 削除させたくない場合 msdeploy.exe -verb:sync -source:... -dest:... -enableRule:DoNotDeleteRule # 特定のフォルダを同期対象から外す(アップロード ファイル等) msdeploy.exe ... -skip:Directory="\\App_Data"
App_Dataやアップロード先を-skipし忘れて
ユーザー データを消す、というのが最も典型的な事故である。なお、IIS の移行専用ツールとして
Web Deploy より新しいIIS Easy Migration Tool等もあるが、
現在はそもそもオンプレ IIS 間の移行より、
App Service / コンテナへの移行が主題になることが多い
(.NETアプリをコンテナにデプロイ)。
-
連載:いまどきのソース・コード管理 - @IT
- 第5回 配備を自動化する (1/4)
https://www.atmarkit.co.jp/ait/articles/1311/15/news096.html
- 第5回 配備を自動化する (1/4)
-
Web Deployの整理 - redwarrior's diary
https://redwarrior.hateblo.jp/entry/2016/12/27/090000
-
リモートのIISへVisual StudioからWebアプリをWeb Deployする - nuits.jp blog
http://www.nuits.jp/entry/iis-web-deploy -
Windows Server/IIS/Web Deployインストール - yanor.net/wiki
http://yanor.net/wiki/?Windows%20Server%2FIIS%2FWeb%20Deploy%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
- Web Deploy ツールを利用した IIS の移行方法
Microsoft Japan IIS / Azure Bot Service Support Team
https://blogs.technet.microsoft.com/jpiis/2018/02/15/webdeploytool_migration/
- Web Deploy の概要
https://learn.microsoft.com/en-us/iis/publish/using-web-deploy/introduction-to-web-deploy - Azure App Service への ZIP デプロイ
https://learn.microsoft.com/ja-jp/azure/app-service/deploy-zip
Tags: 移行, デプロイ, .NET開発, ASP.NET
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。