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

作成者: Jason Lee

このトピックでは、サンプルの連絡先マネージャー ソリューションを特定のターゲット環境に配置するために、環境固有のプロパティを構成する方法について説明します。

このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (連絡先マネージャー ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。

これらのチュートリアルの中核となる配置方法は、「ビルド処理について理解する」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。

プロセスの概要

連絡先マネージャー ソリューションのビルドと配置に使用するプロジェクト ファイルは、次の 2 つの物理ファイルに分割されます。

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

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

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

連絡先マネージャーのシナリオでは、次の 2 つの環境固有のプロジェクト ファイルが必要です。

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

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

連絡先マネージャー ソリューションを独自のターゲット環境に配置するには、このファイルをカスタマイズするか、テンプレートとして使用して独自のファイルを作成します。

連絡先マネージャー ソリューションの環境固有の配置設定を構成するには

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

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

    In the Solution Explorer window, expand the Publish folder, expand the EnvConfig folder, and then double-click 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*ユーザー名* という形式にする必要があります (FABRIKAM\matt など)。 この値は、基本認証を指定する場合にのみ使用されます。 NTLM 認証を使用する場合は、プロパティを省略できます。 指定した場合、値は無視されます。
MSDeployPassword 基本認証を使用した場合、Web 配置によりリモート コンピューターでこのパスワードが使用されます。 これは、MSDeployUsername プロパティで指定したユーザー アカウントのパスワードです。 この値は、基本認証を指定する場合にのみ使用されます。 NTLM 認証を使用する場合は、プロパティを省略できます。 指定した場合、値は無視されます。
ContactManagerIisPath 連絡先マネージャー MVC アプリケーションを配置する対象の IIS パス。 これは、[IIS Web サイト名]/[Web アプリケーション名] の形式で、IIS マネージャーに表示されるパスである必要があります。 アプリケーションを配置する前に、IIS Web サイトが存在する必要があることに注意してください。 たとえば、DemoSite という名前の IIS Web サイトを作成した場合は、MVC アプリケーションの IIS パスを DemoSite/ContactManager として指定します。
ContactManagerServiceIisPath 連絡先マネージャー 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 - 許可されていませんエラーが返されることがあります。
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$$w0rd このトピックのチュートリアルでは、統合 Windows 認証を使用することを前提としています。
CmTargetDatabase データベース サーバー上に作成するデータベースに付ける名前。 ここで指定した値は、パラメーターとして VSDBCMD コマンドに追加されます。 また、Web サーバー上のアプリケーション プールがデータベースとの対話に使用できる完全な接続文字列を構築するためにも使用されます。

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

例 1—リモート エージェント サービスへの配置

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

  • TESTWEB1 でリモート エージェント サービスに配置します。
  • NTLM 認証を使用するように Web 配置に指示します。 Web 配置は、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 配置に指示します。
  • 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>

まとめ

この時点で、プロジェクト ファイルは、連絡先マネージャー ソリューションをビルドして 1 つ以上の宛先環境に配置するように完全に構成されています。

これらのプロジェクト ファイルを 1 ステップの反復可能な配置プロセスの一部として使用するには、MSBuild を使用して Publish.proj ファイルを実行し、環境固有のプロジェクト ファイルの場所をパラメーターとして渡す必要があります。 これは、さまざまな方法で実行できます。