トレーニング
モジュール
パラメーターを使用して再利用可能な Bicep テンプレートを構築する - Training
機密性の高い入力を保護しながら、パラメーターを制御して Bicep テンプレートに適用します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
作成者: Jason Lee
このトピックでは、Web パッケージをリモート IIS Web サーバーに配置するときに、インターネット インフォメーション サービス (IIS) Web アプリケーション名、接続文字列、サービス エンドポイントなどのパラメーター値を設定する方法について説明します。
Web アプリケーション プロジェクトをビルドすると、ビルドとパッケージ化プロセスによって次の 3 つの主要なファイルが生成されます。
注意
ビルドとパッケージ化のプロセスの詳細については、「Web アプリケーション プロジェクトのビルドとパッケージ化」を参照してください。
SetParameters.xml ファイルは、Web アプリケーション プロジェクト ファイルとプロジェクト内のすべての構成ファイルから動的に生成されます。 プロジェクトをビルドしてパッケージ化すると、Web 発行パイプライン (WPP) によって、配置環境間で変更される可能性が高い多くの変数 (宛先 IIS Web アプリケーションやデータベース接続文字列など) が自動的に検出されます。 これらの値は、Web 配置パッケージで自動的にパラメーター化され、SetParameters.xml ファイルに追加されます。 たとえば、Web アプリケーション プロジェクトの web.config ファイルに接続文字列を追加すると、ビルド プロセスによってこの変更が検出され、それに応じて SetParameters.xml ファイルにエントリが追加されます。
多くの場合、この自動パラメーター化で十分です。 ただし、アプリケーション設定やサービス エンドポイント URL など、ユーザーが配置環境間で他の設定を変更する必要がある場合は、配置パッケージでこれらの値をパラメーター化し、対応するエントリを SetParameters.xml ファイルに追加するように WPP に指示する必要があります。 以下のセクションでは、これを行う方法について説明します。
Web アプリケーションをビルドしてパッケージ化すると、WPP によって次のものが自動的にパラメーター化されます。
たとえば、パラメーター化プロセスに何も触れずに Contact Manager サンプル ソリューションをビルドしてパッケージ化する場合、WPP はこの ContactManager.Mvc.SetParameters.xml ファイルを生成します。
<parameters>
<setParameter
name="IIS Web Application Name"
value="Default Web Site/ContactManager.Mvc_deploy" />
<setParameter
name="ApplicationServices-Web.config Connection String"
value="Data Source=DEVWORKSTATION\SQLEXPRESS;Initial Catalog=CMAppServices;
Integrated Security=true;" />
</parameters>
この場合、次のようになります。
WPP は、生成する配置パッケージ内のこれらのプロパティもパラメーター化します。 配置パッケージをインストールするときに、これらのプロパティの値を指定できます。 「Web パッケージの手動インストール」の説明に従って IIS マネージャーを使用してパッケージを手動でインストールすると、インストール ウィザードによって、パラメーターの値を指定するように求められます。 「Web パッケージの配置」の説明に従って、.deploy.cmd ファイルを使用してパッケージをリモートでインストールする場合、Web 配置はこの SetParameters.xml ファイルを参照してパラメーター値を指定します。 SetParameters.xml ファイル内の値を手動で編集することも、自動ビルドおよび配置プロセスの一環としてファイルをカスタマイズすることもできます。 このプロセスについては、このトピックの後半で詳しく説明します。
より複雑な配置シナリオでは、多くの場合、プロジェクトを配置する前に追加のプロパティをパラメーター化する必要があります。 一般に、宛先環境によって異なるプロパティと設定をパラメーター化する必要があります。 次のようなものがあります。
これらのプロパティをパラメーター化する最も簡単な方法は、web アプリケーション プロジェクトのルート フォルダーに parameters.xml ファイルを追加することです。 たとえば、Contact Manager ソリューションでは、ContactManager.Mvc プロジェクトのルート フォルダーに parameters.xml ファイルが含まれています。
このファイルを開くと、1 つの パラメーター エントリが含まれていることがわかります。 このエントリでは、XML パス言語 (XPath) クエリを使用して、web.config ファイル内の ContactService Windows Communication Foundation (WCF) サービスのエンドポイント URL を検索してパラメーター化します。
<parameters>
<parameter name="ContactService Service Endpoint Address"
description="Specify the endpoint URL for the ContactService WCF
service in the destination environment"
defaultValue="http://localhost/ContactManagerService">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/system.serviceModel/client
/endpoint[@name='BasicHttpBinding_IContactService']
/@address" />
</parameter>
</parameters>
WPP は、配置パッケージ内のエンドポイント URL のパラメーター化に加えて、配置パッケージと共に生成される SetParameters.xml ファイルに対応するエントリも追加します。
<parameters>
...
<setParameter
name="ContactService Service Endpoint Address"
value="http://localhost/ContactManagerService" />
...
</parameters>
配置パッケージを手動でインストールすると、IIS マネージャーによって、自動的にパラメーター化されたプロパティと共にサービス エンドポイント アドレスの入力が求められます。 .deploy.cmd ファイルを実行して配置パッケージをインストールする場合は、SetParameters.xml ファイルを編集して、サービス エンドポイント アドレスの値と、自動的にパラメーター化されたプロパティの値を指定できます。
parameters.xml ファイルを作成する方法の詳細については、「方法: パッケージのインストール時にパラメーターを使用して配置設定を構成する」を参照してください。 「Web.config ファイル設定に配置パラメーターを使用するには」という名前の手順に従って、詳細な手順を説明します。
.deploy.cmd ファイルを実行するか、コマンド ラインから MSDeploy.exe を実行して、Web アプリケーション パッケージを手動で配置する予定の場合は、配置前に SetParameters.xml ファイルを手動で編集する必要はありません。 ただし、エンタープライズ規模のソリューションに取り組んでいる場合は、より大規模で自動化されたビルドおよび配置プロセスの一部として Web アプリケーション パッケージを配置することが必要になる場合があります。 このシナリオでは、SetParameters.xml ファイルを変更するために Microsoft Build Engine (MSBuild) が必要です。 これを行うには、MSBuild XmlPoke タスクを使用します。
Contact Manager サンプル ソリューションは、このプロセスを示しています。 次のコード例は、この例に関連する詳細のみを表示するように編集されています。
注意
サンプル ソリューションのプロジェクト ファイル モデルの概要と、一般的なカスタム プロジェクト ファイルの概要については、「プロジェクト ファイルについて」と「ビルド プロセスについて」を参照してください。
まず、目的のパラメーター値は、環境固有のプロジェクト ファイル (Env-Dev.proj など) のプロパティとして定義されます。
<PropertyGroup>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<MembershipConnectionString Condition=" '$(MembershipConnectionString)'=='' ">
Data Source=TESTDB1;Integrated Security=true;Initial Catalog=CMAppServices
</MembershipConnectionString>
</PropertyGroup>
注意
環境に特化したプロジェクト ファイルを、実際にお使いのサーバー環境に合わせてカスタマイズする方法については、「ターゲット環境の配置プロパティを構成する」のガイダンスを参照してください。
次に、Publish.proj ファイルによってこれらのプロパティがインポートされます。 各 SetParameters.xml ファイルは .deploy.cmd ファイルに関連付けられているため、最終的にはプロジェクト ファイルで各 .deploy.cmd ファイルを呼び出す必要があり、プロジェクト ファイルは各 .deploy.cmd ファイルの MSBuild 項目を作成し、対象のプロパティを項目メタデータとして定義します。
<ItemGroup>
<PublishPackages Include="$(_ContactManagerDest)ContactManager.Mvc.deploy.cmd">
<ParametersXml>
$(_ContactManagerDest)ContactManager.Mvc.SetParameters.xml
</ParametersXml>
<IisWebAppName>
$(ContactManagerIisPath)
</IisWebAppName>
<MembershipDBConnectionName>
ApplicationServices-Web.config Connection String
</MembershipDBConnectionName>
<MembershipDBConnectionString>
$(MembershipConnectionString.Replace(";","%3b"))
</MembershipDBConnectionString>
<ServiceEndpointParamName>
ContactService Service Endpoint Address
</ServiceEndpointParamName>
<ServiceEndpointValue>
$(ContactManagerTargetUrl)
</ServiceEndpointValue>
</PublishPackages>
...
</ItemGroup>
この場合、次のようになります。
最後に、Publish.proj ファイルで、PublishWebPackages ターゲットは XmlPoke タスクを使用して、SetParameters.xml ファイル内のこれらの値を変更します。
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='%(PublishPackages.ConnectionName)']
/@value"
Value="%(PublishPackages.ConnectionString)"
Condition =" '%(PublishPackages.ConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.MembershipDBConnectionName)']/@value"
Value='%(PublishPackages.MembershipDBConnectionString)'
Condition =" '%(PublishPackages.MembershipDBConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='IIS Web Application Name']/@value"
Value="%(PublishPackages.IisWebAppName)"
Condition =" '%(PublishPackages.IisWebAppName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.ServiceEndpointParamName)']/@value"
Value="%(PublishPackages.ServiceEndpointValue)"
Condition =" '%(PublishPackages.ServiceEndpointParamName)'!=''"
/>
<!--Execute the .deploy.cmd file-->
...
</Target>
各 XmlPoke タスクでは、次の 4 つの属性値が指定されていることがわかります。
このトピックでは、SetParameters.xml ファイルの役割について説明し、Web アプリケーション プロジェクトをビルドするときに生成される方法について説明しました。 プロジェクトに parameters.xml ファイルを追加することで、追加の設定をパラメーター化する方法について説明しました。 また、プロジェクト ファイルで XmlPoke タスクを使用して、より大規模で自動化されたビルド プロセスの一部として、SetParameters.xml ファイルを変更する方法についても説明しました。
次のトピック「Web パッケージの配置」では、.deploy.cmd ファイルを実行するか、MSDeploy.exe コマンドを直接使用して、Web パッケージを配置する方法について説明します。 どちらの場合も、SetParameters.xml ファイルを配置パラメーターとして指定できます。
Web パッケージを作成する方法については、「Web アプリケーション プロジェクトのビルドとパッケージ化」を参照してください。 Web パッケージを実際に配置する方法のガイダンスについては、「Web パッケージの配置」を参照してください。 parameters.xml ファイルを作成する方法の詳細なチュートリアルについては、「方法: パッケージのインストール時にパラメーターを使用して配置設定を構成する」を参照してください。
Web 配置でのパラメーター化の一般的な情報については、「Web Deploy Parameterization in Action」 (ブログ記事) を参照してください。
トレーニング
モジュール
パラメーターを使用して再利用可能な Bicep テンプレートを構築する - Training
機密性の高い入力を保護しながら、パラメーターを制御して Bicep テンプレートに適用します。