Azureに移行したばかりのアプリケーションがあります。現在、web.config変換を使用して、文字列dev / staging/prod環境に接続するデータベースの変更を管理しています。Azureでこれらの複数の接続文字列を管理するにはどうすればよいですか?
5 に答える
開発者が本番のクレデンシャルを表示できるかどうかが問題にならない場合は、組み込みのVisualStudio10構成変換を使用できます。これがあなたが探しているものである場合は、次の手順に従ってください。
1.ファイルエクスプローラーでAzureプロジェクトフォルダーに移動します。2。ServiceConfiguration.cscfg
のコピーを作成します。3。コピーの
名前をServiceConfiguration.Base.cscfgに変更し
ます。4。ビルド構成(Dev、Staging、Productionなど)ごとに、ServiceConfigurationを作成します。<構成名>.cscfgファイルをビルドします。これらのファイルでは、通常の構成変換構文
を使用でき
ます。5.テキストエディターで.ccprojファイルを開きます。6
。次のノードを見つけます。
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
これに置き換えます(ビルド構成に一致するようにこのブロックを編集する必要があります):
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
<None Include="ServiceConfiguration.Base.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Dev.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Staging.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Production.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
</ItemGroup>
7..ccprojファイルの最後のすぐ上に以下を追加します</Project>
。
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
<Target Name="BeforeBuild">
<TransformXml Source="ServiceConfiguration.Base.cscfg" Transform="ServiceConfiguration.$(Configuration).cscfg" Destination="ServiceConfiguration.cscfg" />
</Target>
8. Visual Studio 10がインストールされていないCIサーバーを使用している場合は、C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0\Webフォルダーとその内容をからコピーする必要があります。サーバーへの開発マシン。
更新: @SolarSteveが指摘したように、ServiceConfiguration。*。cscfgファイルに名前空間を追加する必要がある場合があります。次に、ServiceConfiguration.Base.cscfgの例を示します。
<sc:ServiceConfiguration serviceName="MyServiceName" osFamily="1" osVersion="*" xmlns:sc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<sc:Role name="MyRoleName">
<sc:Instances count="1" />
<sc:ConfigurationSettings>
<sc:Setting name="DataConnectionString" value="xxx" />
</sc:ConfigurationSettings>
</sc:Role>
</sc:ServiceConfiguration>
個人的に私たちは:
- Web構成変換を完全に削除しました。
- 設定はcscfgから取得されます。
- cscfgの開発バージョンは、ローカル開発環境(バージョン管理に保存されている)を指します。
- 本番環境にデプロイする際、本番環境のSQLAzureとストレージに安全な資格情報を提供します。
アプリケーション設定とクラウド環境をスキャンして構成値を取得する設定管理クラスのサンプルについては、オープンソースのLokad.CQRS for Windows Azureプロジェクトを確認できます(CloudSettingsProviderを参照)。
CloudConfigurationManagerはAzureSDK1.7で使用できますhttp://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager
これは、構成設定についてServiceConfiguration.cscfg(ServiceConfiguration.Cloud.cscfgなど)を調べることから始まります。そこにない場合は、web.configとapp.configにフォールバックします
例えば
CloudConfigurationManager.GetSetting("StorageConnectionString")
StorageConnectionString設定の適切なcscfgfileを検索し、次にweb.config、次にapp.configを検索します。
多くの環境があります(開発ファブリック内のローカル開発、開発ファブリック外のローカル開発、テスト、2つのバージョンがあるリリース:リリース/製品とリリース/ステージング、および20のプロジェクトで、構成設定にある程度の変動が必要です。これを解決しました小さな「config」プロジェクトを作成することで問題が発生し、環境に一致するサブフォルダーが含まれます。コンパイルのたびに、実行しているビルドに応じて、サブフォルダーからconfigプロジェクトのルートフォルダーにファイルをコピーします。
他のすべてのプロジェクトは、.configファイルの構成プロジェクトにリンクしています。また、部分的な構成ファイルを使用して、さまざまな環境で常に同じ情報を繰り返すという狂気を維持しています。
お役に立てれば
ServiceConfigurationを変換するための同じ要件がありました。
私はjmacからの回答に行きました(ありがとう!)が、ベースバージョンの名前空間に問題がありました:
<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
もう少し突っ込んだ後、Andrew Patterson(ありがとう)がこれを見つけました。
したがって、結果の変換ファイルは次のようになります。
<asc:ServiceConfiguration serviceName="TestCloud2" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:asc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
<asc:Role name="WebRole1">
<asc:Instances count="1" />
<asc:ConfigurationSettings>
<asc:Setting name="LoggingStorage" value="UseDevelopmentStorage=true" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</asc:ConfigurationSettings>
</asc:Role>