ターゲット環境の配置プロパティを構成する

作成者: Jason Lee

このトピックでは、サンプルの Contact Manager ソリューションを特定のターゲット環境に展開するために、環境固有のプロパティを構成する方法について説明します。

このトピックは、Fabrikam, Inc という架空の会社のエンタープライズ展開要件に基づく一連のチュートリアルの一部です。このチュートリアル シリーズでは、サンプル ソリューションである Contact Manager ソリューションを使用して、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなど、現実的な複雑さのレベルの Web アプリケーションを表します。

これらのチュートリアルの中心にある配置方法は、「 ビルド プロセスの理解」で説明されている分割プロジェクト ファイルのアプローチに基づいています。このアプローチでは、ビルド プロセスは 2 つのプロジェクト ファイルによって制御されます。1 つは、すべての移行先環境に適用されるビルド命令を含み、もう 1 つは環境固有のビルドと配置設定を含みます。 ビルド時に、環境固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド手順の完全なセットが形成されます。

プロセスの概要

Contact Manager ソリューションのビルドと展開に使用するプロジェクト ファイルは、次の 2 つの物理ファイルに分割されます。

  • ユニバーサル ビルド設定と命令 ( Publish.proj ファイル) を含む 1 つ。
  • 環境固有のビルド設定 (Env-Dev.projEnv-Stage.proj など) を含む 1 つ。

ビルド時に、適切な環境固有のプロジェクト ファイルがユニバーサル Publish.proj ファイルにマージされ、ビルド手順の完全なセットが形成されます。 環境固有のプロジェクト ファイルを作成またはカスタマイズし、独自の展開シナリオを記述する設定を使用して、特定の移行先環境へのデプロイを構成できます。

これらの値の多くは、ターゲット環境の構成方法 (特に、ターゲット Web サーバーが Web Deployment Agent サービス (リモート エージェント) と Web 配置ハンドラーのどちらを使用するように構成されているかによって決まります。 これらのアプローチの詳細と、独自の環境に適したアプローチの選択に関するガイダンスについては、「 Web 配置に対する適切なアプローチの選択」を参照してください。

Contact Manager のシナリオでは、次の 2 つの環境固有のプロジェクト ファイルが必要です。

  • 開発者テスト環境へのデプロイ (Env-Dev.proj)。 開発者テスト環境は、「 シナリオ: Web 配置用のテスト環境の構成」の説明に従って、リモート エージェントを使用してリモート展開を受け入れるように構成されています。 このファイルでは、リモート エージェント エンドポイント アドレスと、接続文字列やサービス エンドポイントなどの場所固有の設定を指定する必要があります。
  • ステージング環境へのデプロイ (Env-Stage.proj)。 ステージング環境は、「 シナリオ: Web 配置用のステージング環境の構成」の説明に従って、Web 配置ハンドラーを使用してリモートデプロイを受け入れるように構成されています。 このファイルでは、Web 配置ハンドラー エンドポイント アドレスと、接続文字列やサービス エンドポイントなどの場所固有の設定を指定する必要があります。

環境固有のプロジェクト ファイルで構成する設定は、Web パッケージ自体の内容には影響しません。代わりに、パッケージの展開方法と、パッケージの抽出時に提供されるパラメーター値を制御します。 「 シナリオ: Web 配置用の運用環境の構成 」と「Web パッケージの手動インストール」の説明に従って、Web パッケージを運用環境に手動でインポートするため、パッケージの生成時に環境固有のプロジェクト ファイルで使用した設定は関係ありません。 インターネット インフォメーション サービス (IIS) マネージャーは、パッケージをインポートするときに、接続文字列やサービス エンドポイントなどのパラメーター化された値を求めるメッセージを表示します。

Contact Manager ソリューションを独自のターゲット環境に展開するには、このファイルをカスタマイズするか、テンプレートとして使用して独自のファイルを作成します。

Contact Manager ソリューションの環境固有の展開設定を構成するには

  1. Visual Studio 2010 で ContactManager-WCF ソリューションを開きます。

  2. [ソリューション エクスプローラー] ウィンドウで、[発行] フォルダーを展開し、[EnvConfig] フォルダーを展開して、[Env-Dev.proj] をダブルクリックします。

    [ソリューション エクスプローラー] ウィンドウで、[発行] フォルダーを展開し、[EnvConfig] フォルダーを展開して、[Env-Dev.proj] をダブルクリックします。

  3. Env-Dev.proj ファイルのプロパティ値を、独自のテスト環境に適した値に置き換えます。

    Note

    この手順に従う表では、これらの各プロパティについて詳しく説明します。

  4. 作業内容を保存し、 Env-Dev.proj ファイルを閉じます。

適切な展開プロパティの選択

この表では、環境固有のサンプル プロジェクト ファイル Env-Dev.proj の各プロパティの目的について説明し、指定する必要がある値に関するいくつかのガイダンスを示します。

プロパティ名 詳細
MSDeployComputerName 移行先の Web サーバーまたはサービス エンドポイントの名前。 移行先 Web サーバー上のリモート エージェント サービスに展開する場合は、ターゲット コンピューター名 ( TESTWEB1TESTWEB1.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 配置ではリモート コンピューターでこのアカウントが使用されます。 これは 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 は、インストールされているコンピューターからのみアクセスされます。 このため、URL には、コンピューター名やホスト ヘッダーではなく、localhost または IP アドレスを使用することをお勧めします。 コンピューター名またはホスト ヘッダーを使用する場合、IIS のループバック チェックセキュリティ機能によって URL がブロックされ、HTTP 401.1 - Unauthorized エラーが返されることがあります。
CmDatabaseConnectionString データベース サーバーの接続文字列。 接続文字列は、VSDBCMD がデータベース サーバーに接続し、データベースを作成するために使用する資格情報と、Web サーバー アプリケーション プールがデータベース サーバーに接続してデータベースと対話するために使用する資格情報の両方を決定します。 基本的に、ここには 2 つの選択肢があります。 Integrated Security=true を指定できます。この場合、統合Windows 認証が使用されます。Data Source=TESTDB1;Integrated Security=true この場合、VSDBCMD 実行可能ファイルを実行するユーザーの資格情報を使用してデータベースが作成され、アプリケーションは Web サーバー コンピューター アカウントの ID を使用してデータベースにアクセスします。 または、SQL Server アカウントのユーザー名とパスワードを指定することもできます。 この場合、SQL Server資格情報は VSDBCMD によってデータベースを作成し、アプリケーション プールによってデータベースと対話するために使用されます。Data Source=TESTDB1;User Id=ASqlUser;Password=Pa$$w 0rd このトピックのチュートリアルでは、統合Windows 認証を使用することを前提としています。
CmTargetDatabase データベース サーバーに作成するデータベースに指定する名前。 ここで指定した値は、パラメーターとして VSDBCMD コマンドに追加されます。 また、Web サーバー上のアプリケーション プールがデータベースとの対話に使用できる完全な接続文字列を構築するためにも使用されます。

これらの例では、特定の展開シナリオに合わせてこれらのプロパティを構成する方法を示します。

例 1 : リモート エージェント サービスへの展開

次の点に注意してください。

  • TESTWEB1 上のリモート エージェント サービスにデプロイしています。
  • NTLM 認証を使用するように Web Deploy に指示しています。 Web Deploy は、Microsoft Build Engine (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 配置でリモート コンピューター上の 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 ファイルを実行し、環境固有のプロジェクト ファイルの場所をパラメーターとして渡す必要があります。 これを行うには、さまざまな方法があります。