Frage Azure: Gibt es eine Möglichkeit, unterschiedliche Instanzgrößen für Test / Produktion bereitzustellen?


Ich habe eine Windows Azure-Site, die für zwei separate gehostete Services bereitgestellt wird. Eine für den Test, eine für die Produktion. Wenn wir bereit sind, in die Produktion zu gehen, machen wir eine Staging-Bereitstellung im Produktionsservice, schieben dort hin und machen dann einen VIP-Austausch. Alles gut.

Die Frage ist nun, dass wir von XS-Webinstanzen aufsteigen wollen, aber es macht keinen Sinn, das zusätzliche Geld für die Testbereitstellung auszugeben. Gibt es eine Möglichkeit, eine XS-Instanz für den Test zu verwenden und dann mittlere Instanzen für die Produktion zu sagen? Ich weiß, dass ich die Anzahl der Instanzen für jede Dienstkonfiguration ändern kann, aber ich kann nur die Instanzgröße für alle Konfigurationen ändern.

Ich denke daran, XS einfach in der Konfiguration zu belassen und dann daran zu denken, es auf Mittel zu stellen, bevor ich es in der Produktion einsetze. Gibt es einen Grund, warum ich das nicht tun sollte? Gibt es einen besseren Weg?

Prost!


20
2018-06-23 15:36


Ursprung


Antworten:


Es gibt ein paar Möglichkeiten, dies zu tun ... Einfacher ist es, ein wenig "Hacken" der CCPROJ-Datei zu machen:

1) Erstellen Sie einen Klon der CSDEF-Datei für jede Umgebung, die dem Konfigurationsnamen entspricht (Release / Debug / QA / UAT / etc): ServiceDefinition.Release.csdef, ServiceDefinition.Debug.csdef, usw.

2) Fügen Sie diese Dateien manuell zur CCPROJ-Datei hinzu, indem Sie einen Notepad-Editor verwenden

3) Definieren Sie einen Pre-Build Event-Befehl, der die ServiceDefinition. $ (ConfigurationName) .csdef in ServiceDefintion.csdef kopiert

voila, jetzt passt sich Ihre ServiceDefinition an die von Ihnen verwendete Konfiguration an.

Wenn du schicker werden oder mehr Details sehen möchtest, schau dir diesen Blogeintrag an, der dir helfen kann, alle möglichen Einstellungen gleichzeitig zu ändern

http://www.paraleap.com/blog/post/Managing-environments-in-a-distributed-Azure-oder-other-cloud-based-NET-solution.aspx

Edit: Hier ist eine Konfiguration, die funktioniert. Beachten Sie, dass andere Dateien als Typ "None" anstelle von ServiceDefinition enthalten sind, um den Fehler mit mehreren Definitionen zu vermeiden.

  <ItemGroup>
    <ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Development 1.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Development 2.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Local Dev 1.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Local Dev 2.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.QA 1.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.QA 2.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Pre-Production 1.cscfg" />
    <ServiceConfiguration Include="ServiceConfiguration.Production.cscfg" />
    <ServiceDefinition Include="ServiceDefinition.csdef" />
    <None Include="ServiceDefinition.Local.csdef" />
    <None Include="ServiceDefinition.Development 1.csdef" />
    <None Include="ServiceDefinition.Development 2.csdef" />
    <None Include="ServiceDefinition.Local Dev 1.csdef" />
    <None Include="ServiceDefinition.Local Dev 2.csdef" />
    <None Include="ServiceDefinition.QA 1.csdef" />
    <None Include="ServiceDefinition.QA 2.csdef" />
    <None Include="ServiceDefinition.Pre-Production 1.csdef" />
    <None Include="ServiceDefinition.Production.csdef" />
  </ItemGroup>

24
2018-06-23 16:23



Sie können das Web Publishing verwenden TransformXml MSBuild-Task, um nur die Teile der gewünschten ServiceDefinition zu transformieren (wie Sie es jetzt mit Web.Config tun können).

  • Ein ... kreieren ServiceDefinition.[BuildConfigName].csdef Datei neben der Datei ServiceDefinition.csdef (Sie müssen dies wahrscheinlich im Datei Explorer tun)
  • Erstellen Sie die Transformationsdatei so, als hätten Sie eine Web.config-Transformation erstellt. Ich lege den Root-Namespace explizit fest, nur für den Fall, dass mein Root-Element ist:
  <ServiceDefinition name="Cloud.JobsWorker" 
          xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" 
          xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
          schemaVersion="2013-10.2.2">
  • Fügen Sie es manuell zu Ihrem ccproj hinzu mit:
  <ServiceDefinition Include="ServiceDefinition.csdef" />
  <None Include="ServiceDefinition.Release.csdef" />
  • Am Ende Ihres Projekts befinden sich:
  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <PropertyGroup>
    <ServiceDefinitionTransform>ServiceDefinition.$(Configuration).csdef</ServiceDefinitionTransform>
  </PropertyGroup>
  <Target Name="TransformServiceDefinition" BeforeTargets="ResolveServiceDefinition" Condition="exists('$(ServiceDefinitionTransform)')">
    <!-- Generate transformed service config in the intermediate directory -->
    <TransformXml Source="@(ServiceDefinition)" Destination="$(IntermediateOutputPath)%(Filename)%(Extension)" Transform="$(ServiceDefinitionTransform)" />
    <!--Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <ServiceDefinition Remove="ServiceDefinition.csdef" />
      <ServiceDefinition Include="$(IntermediateOutputPath)ServiceDefinition.csdef" />
    </ItemGroup>
  </Target>

Wenn Sie Ihre Cloud-App packen oder veröffentlichen, sollte Ihr csdef je nach der von Ihnen verwendeten Build-Konfiguration transformiert werden.

Dies ist von hier angepasst: http://blogs.staykov.net/2011/06/windows-azure-configuration-settings.html


14
2018-04-03 16:56



Transformation verwenden als David Faivre Der Vorschlag ist viel sauberer und ohne den Aufwand, alle Dateien nach dem Hinzufügen einer einzelnen Eigenschaft zu aktualisieren.

Dies ist das Transformations-XML zur Änderung der VM-Größe:

<?xml version="1.0"?>
<ServiceDefinition name="CloudServiceName" 
                   xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6" 
                   xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <WorkerRole name="WorkerRoleName.Role" vmsize="Medium" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</ServiceDefinition>

2
2017-10-19 14:24



Die VM-Größe wird in der Datei "ServiceDefinition.csdef" behandelt, die Sie zur Laufzeit oder zur Bereitstellung nicht bearbeiten können. Sie müssten die Einstellung in der CSDef ändern, Ihre Lösung neu packen und dann erneut bereitstellen.

Eine Lösung besteht möglicherweise darin, mehrere Windows Azure-Bereitstellungsprojekte einzurichten. Ein Projekt wäre Ihr "Test" -Projekt, bei dem die .csdef für die Verwendung eines XS konfiguriert ist. Ein anderes Projekt wäre das Projekt "Produktion", das eine größere Instanz verwendet. Auf diese Weise können Sie die Windows Azure / Visual Studio-Standardtools verwenden, um das Projekt zu verwalten. Dies kann je nach Prozess hilfreich sein.


1
2018-06-23 15:47



David Faivre schlug vor gute Lösung. Wenige Kommentare von mir:

  1. Wenn Ihre ServiceDefinition-Datei Links zu einigen Verzeichnissen (z. B. Abschnitt) enthält, wird ein Fehler dadurch verursacht, dass sich die transformierte Datei im Zwischenverzeichnis befindet. Für meine Verwendung habe ich dieses Problem gelöst, indem ich die transformierte Datei neben die ursprüngliche ServiceDefinition.csdef gestellt habe (vergiss nicht, * .transformed in .gitignore hinzuzufügen):

<TransformXml Source="@(ServiceDefinition)" Destination="ServiceDefinition.csdef.transformed" Transform="$(ServiceDefinitionTransform)" />

  1. $(Configuration) Variable entspricht Build-Konfiguration (Debug, Release etc.). Wenn Sie eine profilspezifische Umwandlung haben möchten (entsprechend ServiceConfiguration..cscfg), müssen Sie verwenden $(TargetProfile) Variable:

<ServiceDefinitionTransform>ServiceDefinition.$(TargetProfile).csdef</ServiceDefinitionTransform>


0
2018-04-27 08:58