Подтвердить что ты не робот

Azure: есть ли способ развернуть разные размеры экземпляров для тестирования/производства

У меня есть сайт Windows Azure, который развернут на две отдельные размещенные службы. Один для теста, один для производства. Когда мы будем готовы продвигаться к производству, мы разворачиваем промежуточное развертывание в производственной службе, толкаем туда, а затем делаем VIP-обмен. Все хорошо.

Вопрос в том, что теперь мы хотим перейти от веб-экземпляров XS, но на самом деле не имеет смысла тратить лишние деньги на тестовое развертывание. Есть ли способ использовать экземпляр XS для тестирования, а затем говорить о средних экземплярах для производства? Я знаю, что могу изменить количество экземпляров для каждого конфигурационного файла службы, но я могу изменить размер экземпляра для всех конфигураций.

Я думаю о том, чтобы просто оставить XS в конфиге, а затем вспомнить, чтобы переключить его на Medium до того, как я развернусь на производство. Есть ли причина, почему я не должен этого делать? Есть ли лучший способ?

Ура!

4b9b3361

Ответ 1

Есть несколько способов сделать это... Более простой способ - немного "взломать" файл CCPROJ:

1) создайте клон файла CSDEF для каждой среды, которая соответствует имени конфигурации (Release/Debug/QA/UAT/etc): ServiceDefinition.Release.csdef, ServiceDefinition.Debug.csdef и т.д.

2) Добавьте эти файлы вручную в файл CCPROJ с помощью редактора блокнота

3) Определите команду Pre-Build Event, которая копирует ServiceDefinition. $(ConfigurationName).csdef в ServiceDefintion.csdef

voila, теперь ваш ServiceDefintion будет адаптироваться к любой конфигурации, которую вы используете.

Если вы хотите получить дополнительную информацию или просмотреть более подробную информацию, ознакомьтесь с этой записью в блоге, которая поможет вам переключить все настройки в унисон

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

Изменить: Вот конфигурация, которая работает. Обратите внимание, что другие файлы включены как тип "Нет" вместо ServiceDefinition, чтобы избежать ошибки нескольких определений.

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

Ответ 2

Вы можете использовать задачу Web Publishing TransformXml MSBuild для преобразования только тех частей требуемого ServiceDefinition (например, вы можете сделать это сейчас с помощью Web.Config).

  • Создайте файл ServiceDefinition.[BuildConfigName].csdef рядом с файлом ServiceDefinition.csdef(вам, вероятно, потребуется сделать это в Проводнике)
  • Создайте файл преобразования, как будто вы создали преобразование Web.config. Я явно задал корневое пространство имен, на всякий случай, поэтому мой корневой элемент:
  <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">
  • Вручную добавьте его в свой ccproj, используя:
  <ServiceDefinition Include="ServiceDefinition.csdef" />
  <None Include="ServiceDefinition.Release.csdef" />
  • В нижней части вашего проекта:
  <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>

Когда вы упаковываете или публикуете свое облачное приложение, ваш csdef должен быть преобразован в зависимости от конфигурации сборки, которую вы используете.

Это адаптировано отсюда: http://blogs.staykov.net/2011/06/windows-azure-configuration-settings.html

Ответ 3

Использование преобразования как Дэвид Файвр предложил намного чище и без накладных расходов обновлять все файлы после добавления единого свойства.

Это преобразование xml для изменения размера vm:

<?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>

Ответ 4

Размер VM обрабатывается в файле ServiceDefinition.csdef, который вы не можете редактировать при запуске или развертывании. Вам нужно будет изменить настройку в .csdef, переупаковать ваше решение и затем повторно развернуть.

Одним из решений может быть создание нескольких проектов развертывания Windows Azure. Один проект будет вашим "тестовым" проектом, который имеет .csdef, настроенный для использования XS. Другим проектом будет проект "производство", в котором используется более крупный экземпляр. Это позволит вам использовать стандартные инструменты Windows Azure/Visual Studio для управления проектом, что может быть приятным в зависимости от вашего процесса.

Ответ 5

Дэвид Файвр предложил хорошее решение. Немного комментариев от меня:

  • Если ваш файл ServiceDefinition содержит ссылки на некоторые каталоги (например, раздел), то будет произошла ошибка, вызванная тем фактом, что преобразованный файл находится в промежуточном каталоге. Для моего использования я решил эту проблему, разместив преобразованный файл вместе с оригинальным ServiceDefinition.csdef(не забудьте добавить *.transformed в .gitignore):

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

  1. $(Configuration) переменная соответствует конфигурации сборки (Debug, Release и т.д.). Если вы хотите иметь специфическое для профиля преобразование (соответствующее ServiceConfiguration..cscfg), вам нужно использовать переменную $(TargetProfile):

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