web-dev-qa-db-ja.com

Azure接続文字列のベストプラクティス

Azureに移行するだけのアプリケーションがあります。現在、web.config変換を使用して、データベース接続文字列dev/staging/prod環境の変更を管理しています。 Azureでこれらの複数の接続文字列を管理するのに最適な方法はどれですか。

50
Craig

開発者がプロ​​ダクション認証情報を参照できるかどうかが問題にならない場合は、組み込みのVisual Studio 10構成変換を使用できます。これがあなたが探しているものである場合は、次の手順に従ってください:

1.ファイルエクスプローラーでAzureプロジェクトフォルダーに移動します
2。 ServiceConfiguration.cscfgのコピーを作成します
3。コピーの名前をServiceConfiguration.Base.cscfgに変更します。
4。ビルド構成(Dev、Staging、Productionなど)ごとに、ServiceConfiguration。<ビルド構成名> .cscfgファイルを作成します。これらのファイルでは、通常の config変換構文 を使用できます。
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 noted と同様に、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>
28

個人的には:

  1. Web構成変換を完全に削除しました。
  2. 設定はcscfgから取得されます。
  3. Cscfgの開発バージョンは、ローカルの開発環境(バージョン管理に保存されている)を指します。
  4. 本番環境にデプロイする際、本番SQL Azureとストレージの安全な認証情報を提供します。

アプリケーション設定とクラウド環境で構成値をスキャンする設定管理クラスのサンプルについては、オープンソースをチェックアウトできます Windows AzureのLokad.CQRS プロジェクト(CloudSettingsProviderを参照)

14
Rinat Abdullin

Azure SDK 1.7でCloudConfigurationManagerを使用できます 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を検索します。

7
GraemeMiller

私たちはいくつかの環境(開発ファブリック内のローカル開発、開発ファブリック外のローカル開発、テスト、リリースの2つのバージョンを持っています:リリース/製品とリリース/ステージング、20のプロジェクトのいくつかは構成設定にいくつかの可変性を必要とします。これを解決しました環境に一致する小さな「config」プロジェクトを作成し、そこにサブフォルダーを含めます。コンパイルのたびに、実行するビルドに応じて、サブフォルダーからconfigプロジェクトのルートフォルダーにファイルをコピーします。

他のすべてのプロジェクトは、.configファイルの構成プロジェクトにリンクしています。また、部分的な設定ファイルを使用して、さまざまな環境で同じ情報を常に繰り返すという狂気を維持します。

お役に立てれば

6
Igorek

ServiceConfigurationの変換にも同じ要件がありました。

私はjmacからの回答(ありがとう!)を使いましたが、Baseバージョンの名前空間に問題がありました。

<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.Microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">

andrew Patterson(ありがとう)によるもう少し突っ込んだ後 this が見つかりました。

だから私の結果の変換ファイル:

<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>
6
SolarSteve