Skip to content

MS_ASPNETDeployment

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

ASP.NETの配置(Web Deploy・Web Deployパッケージ)

概要

コンテンツと構成を 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 の構成
  • コンテンツ

形式

以下のような発行形式がある。

補足(形式の選択指針):

形式 特徴 向く場面
ファイル システム フォルダに出すだけ CI で成果物を作る、後段で自由に配る
FTP 古典的 レガシーなホスティング
Web Deploy サーバへ直接同期 開発機から直接、少数台
Web Deploy パッケージ zip 化(設定はパラメータ化) CI/CD、承認を挟む運用

**CI/CD では「ファイル システム」か「パッケージ」**を選ぶ。
開発機から本番へ直接 Web Deploy する運用は、
誰が何を配ったか追えなくなるため避けるのが定石である。

Web Deploy

Web Deploy 形式の発行には、以下のインフラが必要になる。

クライアント

発行を行う。

  • CUI
    msdeploy.exe

  • GUI
    以下の GUI があるが、裏で前述の CUI を利用しているものと思われる。

    • WebMatrix

      • Web Management Service
    • Visual Studio

      • Web Deployment Agent Service
      • Web Management Service

Visual Studioのほうが新旧をサポートするが、
WebMatrix 自体が古いので、Visual Studioを使用する。

移行メモ(誤字): 原文の「利用しているものを思われる」は
**「利用しているものと思われる」**の誤りと判断し修正した。

補足(WebMatrix は終了済み): WebMatrix は 2017 年にサポート終了し、
後継として Visual Studio Code が案内されている。
現在の選択肢は Visual Studiomsdeploy.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 パッケージ

用例

  • 以下のような場合に、この形式を使用する。

    • 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 と相性が良い。

参考

MSDeploy プロバイダ

  • Web 配置の特定のソースまたは宛先データを処理する。
  • Web アプリケーション以外を対象にしたプロバイダーも存在する。

RDB

  • 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

参考

補足(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 を入れずに適用できるため実務で有用である。

移行

  • 発行機能を応用した移行も可能。
  • 既存サイトをアーカイブして別のサイトに発行する。

手順

Web Deploy ツールのインストール

移行元および移行先のバックアップ

  • 失敗の際もリストア可能なようにしておく。
  • バックアップ・リストアには 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アプリをコンテナにデプロイ)。

参考

発行

移行

Microsoft Learn


Tags: 移行, デプロイ, .NET開発, ASP.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally