このトピックでは、サンプルの Contact Manager ソリューションを特定のターゲット環境に展開するために、環境固有のプロパティを構成する方法について説明します。
このトピックでは、Fabrikam, Inc という架空の会社のエンタープライズ展開要件に基づく一連のチュートリアルの一部を構成します。このチュートリアル シリーズでは、サンプル ソリューションである Contact Manager ソリューションを使用して、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなど、現実的な複雑さのレベルの Web アプリケーションを表します。
これらのチュートリアルの中心にある配置方法は、「 ビルド プロセスの理解」で説明されている分割プロジェクト ファイルのアプローチに基づいています。このアプローチでは、ビルド プロセスは 2 つのプロジェクト ファイルによって制御されます。1 つは、すべてのターゲット環境に適用されるビルド命令を含み、1 つは環境固有のビルドと配置の設定を含みます。 ビルド時に、環境固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。
プロセスの概要
Contact Manager ソリューションのビルドと展開に使用するプロジェクト ファイルは、次の 2 つの物理ファイルに分割されます。
- ユニバーサル ビルド設定と命令 ( Publish.proj ファイル) が含まれているもの。
- 環境固有のビルド設定 (Env-Dev.proj、 Env-Stage.proj など) を含む設定。
ビルド時に、適切な環境固有のプロジェクト ファイルがユニバーサル Publish.proj ファイルにマージされ、ビルド命令の完全なセットが形成されます。 環境固有のプロジェクト ファイルを作成またはカスタマイズし、独自の展開シナリオを記述する設定を使用して、特定の展開先環境へのデプロイを構成できます。
これらの値の多くは、ターゲット環境の構成方法 (特に、ターゲット Web サーバーが Web 配置エージェント サービス (リモート エージェント) または Web 配置ハンドラーのどちらを使用するように構成されているかによって決まります。 これらのアプローチの詳細と、独自の環境に適したアプローチの選択に関するガイダンスについては、「 Web デプロイに対する適切なアプローチの選択」を参照してください。
Contact Manager のシナリオでは、次の 2 つの環境固有のプロジェクト ファイルが必要です。
- 開発者テスト環境 (Env-Dev.proj) へのデプロイ。 開発者テスト環境は、「 シナリオ: Web デプロイ用のテスト環境の構成」の説明に従って、リモート エージェントを使用してリモート展開を受け入れるように構成されます。 このファイルでは、リモート エージェント エンドポイント アドレスと、接続文字列やサービス エンドポイントなどの場所固有の設定を指定する必要があります。
- ステージング環境へのデプロイ (Env-Stage.proj)。 ステージング環境は、「 シナリオ: Web 配置用のステージング環境の構成」で説明されているように、Web 配置ハンドラーを使用してリモートデプロイを受け入れるように構成されます。 このファイルでは、Web 配置ハンドラーのエンドポイント アドレスと、接続文字列やサービス エンドポイントなどの場所固有の設定を指定する必要があります。
環境固有のプロジェクト ファイルで構成する設定は、Web パッケージ自体の内容には影響しません。代わりに、パッケージの展開方法と、パッケージの抽出時に提供されるパラメーター値を制御します。 「 シナリオ: Web 配置用の運用環境の構成 と Web パッケージの手動インストール」の説明に従って、Web パッケージを運用環境に手動でインポートするため、パッケージの生成時に環境固有のプロジェクト ファイルで使用した設定は関係ありません。 インターネット インフォメーション サービス (IIS) マネージャーは、パッケージをインポートするときに、接続文字列やサービス エンドポイントなどのパラメーター化された値を求められます。
Contact Manager ソリューションを独自のターゲット環境に展開するには、このファイルをカスタマイズするか、テンプレートとして使用して独自のファイルを作成します。
Contact Manager ソリューションの環境固有の展開設定を構成するには
Visual Studio 2010 で ContactManager-WCF ソリューションを開きます。
ソリューション エクスプローラー ウィンドウで、発行フォルダーを展開し、EnvConfig フォルダーを展開し、Env-Dev.proj をダブルクリックします。
Env-Dev.proj ファイル内のプロパティ値を、独自のテスト環境の正しい値に置き換えます。
注
この手順に従う表では、これらの各プロパティについて詳しく説明します。
作業内容を保存し、 Env-Dev.proj ファイルを閉じます。
適切な展開プロパティの選択
この表では、環境固有のサンプル プロジェクト ファイル Env-Dev.proj の各プロパティの目的について説明し、指定する必要がある値に関するいくつかのガイダンスを示します。
プロパティ名 | 詳細 |
---|---|
MSDeployComputerName 宛先 Web サーバーまたはサービス エンドポイントの名前。 | 展開先 Web サーバー上のリモート エージェント サービスに展開する場合は、ターゲット コンピューター名 ( TESTWEB1 や TESTWEB1.fabrikam.net など) を指定するか、リモート エージェント エンドポイント ( http://TESTWEB1/MSDEPLOYAGENTSERVICE など) を指定できます。 デプロイは、いずれの場合も同じように動作します。 移行先 Web サーバー上の Web 配置ハンドラーにデプロイする場合は、サービス エンドポイントを指定し、IIS Web サイトの名前をクエリ文字列パラメーター (たとえば、 https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite ) として含める必要があります。 |
MSDeployAuth リモート コンピューターに対する認証に Web 配置で使用するメソッド。 | これは NTLM または Basic に設定する必要があります。 通常、リモート エージェント サービスにデプロイする場合は NTLM を使用し、Web 配置ハンドラーにデプロイする場合は Basic を使用します。 基本認証を使用する場合は、展開を実行するために IIS Web 配置ツール (Web 配置) が偽装する必要があるユーザー名とパスワードも指定する必要があります。 この例では、これらの値は MSDeployUsername プロパティと MSDeployPassword プロパティを使用して提供されます。 NTLM 認証を使用する場合は、これらのプロパティを省略するか、空白のままにすることができます。 |
MSDeployUsername 基本認証を使用する場合、Web Deploy はリモート コンピューターでこのアカウントを使用します。 | これは DOMAIN*username* という形式にする必要があります ( FABRIKAM\matt など)。 この値は、基本認証を指定する場合にのみ使用されます。 NTLM 認証を使用する場合は、プロパティを省略できます。 値が指定されている場合は無視されます。 |
MSDeployPassword 基本認証を使用する場合、Web Deploy はリモート コンピューターでこのパスワードを使用します。 | これは、 MSDeployUsername プロパティで指定したユーザー アカウントのパスワードです。 この値は、基本認証を指定する場合にのみ使用されます。 NTLM 認証を使用する場合は、プロパティを省略できます。 値が指定されている場合は無視されます。 |
ContactManagerIisPath Contact Manager MVC アプリケーションを展開する IIS パス。 | これは、[IIS Web サイト名]/[Webアプリケーション名]の形式で、IIS マネージャーに表示されるパスである必要があります。 アプリケーションをデプロイする前に、IIS Web サイトが存在する必要があります。 たとえば、DemoSite という名前の IIS Web サイトを作成した場合は、MVC アプリケーションの IIS パスを DemoSite/ContactManager として指定できます。 |
ContactManagerServiceIisPath Contact Manager WCF サービスを展開する IIS パス。 | たとえば、DemoSite という名前の IIS Web サイトを作成した場合は、WCF サービスの IIS パスを DemoSite/ContactManagerService として指定できます。 |
ContactManagerTargetUrl WCF サービスに到達できる URL。 | [IIS Web サイトのルート URL]/[サービス アプリケーション名]/[サービス エンドポイント]の形式になります。 たとえば、ポート 85 で IIS Web サイトを作成した場合、URL は http://localhost:85/ContactManagerService/ContactService.svc 形式になります。 MVC アプリケーションと WCF サービスが同じサーバーにデプロイされていることに注意してください。 その結果、この URL には、インストールされているコンピューターからのみアクセスされます。 このため、コンピューター名やホスト ヘッダーではなく localhost または IP アドレスを URL で使用することをお勧めします。 コンピューター名またはホスト ヘッダーを使用する場合、IIS の ループバック チェック セキュリティ機能によって URL がブロックされ、 HTTP 401.1 - Unauthorized エラーが返されることがあります。 |
CmDatabaseConnectionString データベース サーバーの接続文字列。 | 接続文字列は、VSDBCMD がデータベース サーバーに接続し、データベースを作成するために使用する資格情報と、Web サーバー アプリケーション プールがデータベース サーバーに接続してデータベースと対話するために使用する資格情報の両方を決定します。 基本的に、ここには 2 つの選択肢があります。 統合セキュリティ =true を指定できます。この場合、統合 Windows 認証が使用されます。Data Source=TESTDB1;Integrated Security=true この場合、VSDBCMD 実行可能ファイルを実行するユーザーの資格情報を使用してデータベースが作成され、アプリケーションは Web サーバー コンピューター アカウントの ID を使用してデータベースにアクセスします。 または、SQL Server アカウントのユーザー名とパスワードを指定することもできます。 この場合、SQL Server 資格情報は、データベースを作成するために VSDBCMD によって使用され、データベースと対話するためにアプリケーション プールによって使用されます: Data Source=TESTDB1;User Id=ASqlUser;Password=; このトピックのチュートリアルでは、統合 Windows 認証を使用することを前提としています。 |
CmTargetDatabase データベース サーバーに作成するデータベースに付ける名前。 | ここで指定した値は、パラメーターとして VSDBCMD コマンドに追加されます。 また、Web サーバー上のアプリケーション プールがデータベースとの対話に使用できる完全な接続文字列を構築するためにも使用されます。 |
これらの例では、特定の展開シナリオに合わせてこれらのプロパティを構成する方法を示します。
例 1 - リモート エージェント サービスへの展開
この例では:
- TESTWEB1でリモート エージェント サービスにデプロイしています。
- NTLM 認証を使用するように Web Deploy に指示しています。 Web 配置は、Microsoft ビルド エンジン (MSBuild) の呼び出しに使用した資格情報を使用して実行されます。
- 統合認証を使用して 、ContactManager データベースをTESTDB1にデプロイしています。 データベースは、MSBuild の呼び出しに使用した資格情報を使用してデプロイされます。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
TESTWEB1.fabrikam.net
</MSDeployComputerName>
<MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">NTLM</MSDeployAuth>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerServiceIisPath
Condition=" '$(ContactManagerServiceIisPath)'=='' ">
DemoSite/ContactManagerService
</ContactManagerServiceIisPath>
<CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
Data Source=TESTDB1;Integrated Security=true</CmDatabaseConnectionString>
<CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
ContactManager
</CmTargetDatabase>
</PropertyGroup>
</Project>
例 2 - Web 配置ハンドラー エンドポイントへのデプロイ
この例では:
- STAGEWEB1上の Web 配置ハンドラー サービス エンドポイントにデプロイしています。
- 基本認証を使用するように Web Deploy に指示しています。
- Web Deploy でリモート コンピューター上の FABRIKAM\stagingdeployer アカウントを偽装するように指定しています。
- SQL Server 認証を使用して 、ContactManager データベースをSTAGEDB1にデプロイしています。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSDeployComputerName Condition=" '$(MSDeployComputerName)'=='' ">
https://STAGEWEB1:8172/MSDeploy.axd?site=DemoSite
</MSDeployComputerName>
<MSDeployAuth Condition=" '$(MSDeployAuth)'=='' ">Basic</MSDeployAuth>
<MSDeployUsername Condition=" '$(MSDeployUsername)'=='' ">
FABRIKAM\stagingdeployer
</MSDeployUsername>
<MSDeployPassword Condition=" '$(MSDeployPassword)'=='' ">
Pa$$w0rd
</MSDeployPassword>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerServiceIisPath
Condition=" '$(ContactManagerServiceIisPath)'=='' ">
DemoSite/ContactManagerService
</ContactManagerServiceIisPath>
<CmDatabaseConnectionString Condition=" '$(CmDatabaseConnectionString)'=='' ">
Data Source=STAGEDB1;User ID=sa;'$($CREDENTIAL_PLACEHOLDER$)'
</CmDatabaseConnectionString>
<CmTargetDatabase Condition=" '$(CmTargetDatabase)'=='' ">
ContactManager
</CmTargetDatabase>
</PropertyGroup>
</Project>
結論
この時点で、プロジェクト ファイルは、Contact Manager ソリューションをビルドして 1 つ以上の宛先環境に展開するように完全に構成されます。
これらのプロジェクト ファイルを単一ステップの反復可能な配置プロセスの一部として使用するには、MSBuild を使用して Publish.proj ファイルを実行し、環境固有のプロジェクト ファイルの場所をパラメーターとして渡す必要があります。 これはさまざまな方法で行うことができます。
- MSBuild の概要とカスタム プロジェクト ファイルの概要については、「 プロジェクト ファイルについて」を参照してください。
- カスタム プロジェクト ファイルを実行する MSBuild コマンドを作成する方法については、「 Web パッケージの配置」を参照してください。
- 単一ステップで繰り返し可能な展開のコマンド ファイルに MSBuild コマンドを組み込む方法については、「 配置コマンド ファイルの作成と実行」を参照してください。
- Team Build からカスタム プロジェクト ファイルを実行する方法については、「 配置をサポートするビルド定義の作成」を参照してください。