Что такое модель облачных служб Azure и как её упаковать?

Это важно

По состоянию на 31 марта 2025 г. облачные службы (расширенная поддержка) устарели и будут полностью прекращены 31 марта 2027 г. Узнайте больше об этом отказе и о том, как осуществить миграцию.

Облачная служба создается из трех компонентов: определения службы (CSDEF-файл), конфигурации службы (CSCFG-файл) и пакета службы (CSPKG-файл). Файлы ServiceDefinition.csdef и ServiceConfig.cscfg основаны на XML и описывают структуру облачной службы и ее конфигурации. Мы вместе называем эти файлы моделью. ServicePackage.cspkg — это ZIP-файл, который создается на основе файла ServiceDefinition.csdef и который, помимо прочего, содержит все необходимые зависимости в двоичном формате. Azure создает облачную службу из двух файлов: ServicePackage.cspkg и ServiceConfig.cscfg.

После запуска облачной службы в Azure его можно перенастроить с помощью файла ServiceConfig.cscfg , но не удается изменить определение.

Что еще вы хотите узнать?

ServiceDefinition.csdef

Файл ServiceDefinition.csdef задает параметры, используемые Azure для настройки облачной службы. Схема определения службы Azure (CSDEF-файл) предоставляет допустимый формат для файла определения службы. В следующем примере показаны параметры, которые могут быть определены для веб-ролей и рабочих ролей.

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="Standard_D1_v2">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InternalEndpoint name="InternalHttpIn" protocol="http" />
    </Endpoints>
    <Certificates>
      <Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
    <Imports>
      <Import moduleName="Connect" />
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <LocalResources>
      <LocalStorage name="localStoreOne" sizeInMB="10" />
      <LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
    </LocalResources>
    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
    </Startup>
  </WebRole>

  <WorkerRole name="WorkerRole1">
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
      <InternalEndpoint name="Endpoint2" protocol="tcp" />
    </Endpoints>
  </WorkerRole>
</ServiceDefinition>

Вы можете ознакомиться со схемой определения службы, чтобы лучше понять схему XML, используемую здесь, однако ниже приведено краткое описание некоторых элементов:

Сайты
Содержит определения для веб-сайтов или веб-приложений, размещаемых в IIS7.

Точки входа ввода
Содержит определения для конечных точек, используемых для связи с облачной службой.

ВнутренниеКонечныеТочки
Содержит определения для конечных точек, используемых экземплярами роли для взаимодействия друг с другом.

ConfigurationSettings
Содержит определения параметров для функций конкретной роли.

Сертификаты
Содержит определения сертификатов, необходимых для выполнения роли. В предыдущем примере кода показан сертификат, используемый для настройки Azure Connect.

LocalResources
Содержит определения для локальных ресурсов хранилища. Локальный ресурс хранилища — это зарезервированная директория в файловой системе виртуальной машины, в которой выполняется экземпляр роли.

Импорт
Содержит определения для импортированных модулей. В предыдущем примере кода показаны модули для удаленного рабочего стола и Azure Connect.

Запуск
Содержит задачи, которые выполняются при начале роли. Задачи определены в CMD-файле или исполняемом файле.

ServiceConfiguration.cscfg

Настройка параметров для облачной службы определяется значениями в файле ServiceConfiguration.cscfg . Вы указываете количество экземпляров, которые вы хотите развернуть для каждой роли в этом файле. Значения для параметров конфигурации, которые определены в файле определения службы, добавляются в файл конфигурации службы. Отпечатки всех сертификатов управления, связанных с облачной службы, также добавляются в файл. Схема конфигурации службы Azure (CSCFG-файл) предоставляет допустимый формат файла конфигурации службы.

Файл конфигурации службы не упаковается в приложение. Он отправляется в Azure в виде отдельного файла и используется для настройки облачной службы. Вы можете отправить новый файл конфигурации службы без повторного развертывания облачной службы. Значения конфигурации для облачной службы можно изменить во время работы облачной службы. В следующем примере показаны параметры конфигурации, которые можно определить для рабочих ролей и веб-ролей.

<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole1">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="SettingName" value="SettingValue" />
    </ConfigurationSettings>

    <Certificates>
      <Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption"
         thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

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

Экземпляры
Задает количество запущенных экземпляров для роли. Чтобы предотвратить потенциально недоступность облачной службы во время обновлений, рекомендуется развернуть несколько экземпляров ролей, подключенных к Интернету. Развернув несколько экземпляров, вы соответствуете рекомендациям соглашения об уровне обслуживания вычислений Azure (SLA), которое гарантирует 99,95 % внешнего подключения для ролей, подключенных к Интернету, при развертывании двух или нескольких экземпляров ролей для службы.

ConfigurationSettings
Настраивает параметры работающих экземпляров для роли. Имена элементов <Setting> должны соответствовать определениям параметров в файле определения службы.

Сертификаты
Настраивает сертификаты, используемые службой. В предыдущем примере кода показано, как определить сертификат для модуля RemoteAccess. Значение атрибута thumbprint должно быть присвоено отпечатку сертификата, который будет использоваться.

Примечание.

Отпечаток сертификата можно добавить в файл конфигурации с помощью текстового редактора. Или можно добавить соответствующее значение на вкладку Сертификаты страницы Свойства роли в Visual Studio.

Определение портов для экземпляров ролей

Azure разрешает только одну точку входа для веб-роли. Это означает, что весь трафик идет через один IP-адрес. Можно сделать так, чтобы веб-сайты совместно использовали порт. Для этого нужно настроить заголовок узла так, чтобы он направлял запрос в нужное расположение. Можно также настроить приложения для прослушивания известных портов по IP-адресу.

Следующий пример показывает конфигурацию для веб-роли с веб-сайтом и веб-приложением. Веб-сайт настроен как точка входа по умолчанию на порту 80, а веб-приложения настроены для получения запросов с альтернативного заголовка хоста под названием mail.mysite.cloudapp.net.

<WebRole>
  <ConfigurationSettings>
    <Setting name="DiagnosticsConnectionString" />
  </ConfigurationSettings>
  <Endpoints>
    <InputEndpoint name="HttpIn" protocol="http" port="80" />
    <InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
    <InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
  </Endpoints>
  <LocalResources>
    <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
  </LocalResources>
  <Site name="Mysite" packageDir="Sites\Mysite">
    <Bindings>
      <Binding name="http" endpointName="HttpIn" />
      <Binding name="https" endpointName="Https" />
      <Binding name="tcp" endpointName="NetTcp" />
    </Bindings>
  </Site>
  <Site name="MailSite" packageDir="MailSite">
    <Bindings>
      <Binding name="mail" endpointName="HttpIn" hostHeader="mail.mysite.cloudapp.net" />
    </Bindings>
    <VirtualDirectory name="artifacts" />
    <VirtualApplication name="storageproxy">
      <VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
    </VirtualApplication>
  </Site>
</WebRole>

Изменение конфигурации роли

Вы можете обновить конфигурацию облачной службы во время ее работы в Azure, не выполняя службу в автономном режиме. Чтобы изменить сведения о конфигурации, можно отправить новый файл конфигурации. Также можно изменить файл конфигурации локально и применить его к работающей службе. В конфигурацию службы можно внести следующие изменения.

  • Изменение значений параметров конфигурации.
    После изменения параметра конфигурации экземпляр роли может выбрать применить изменение, пока он находится в сети, или плавно перезапустить экземпляр и применить изменение, пока он находится в автономном режиме.
  • Изменение топологии экземпляров служб ролей.
    Изменения топологии не влияют на запущенные экземпляры, за исключением случаев удаления экземпляра. Все оставшиеся экземпляры, как правило, не нужно перерабатывать; однако вы можете рециркулировать экземпляры ролей в ответ на изменения в топологии.
  • Изменение отпечатка сертификата.
    Вы можете обновлять сертификат, только когда экземпляр роли находится в отключенном состоянии. Если сертификат добавлен, удален или изменен во время работы экземпляра роли в активном режиме, Azure плавно переводит экземпляр в автономный режим для обновления сертификата. Azure возвращает его обратно в сеть после завершения изменения.

Обработка изменений конфигурации с помощью событий среды выполнения службы

Библиотека выполнения среды Azure включает пространство имен Microsoft.WindowsAzure.ServiceRuntime, которое предоставляет классы для взаимодействия со средой Azure на уровне роли. Класс RoleEnvironment определяет следующие события, которые вызываются до и после изменения конфигурации.

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

Примечание.

Поскольку изменения сертификата всегда переключают экземпляры роли в автономный режим, они не вызывают событий RoleEnvironment.Changing и RoleEnvironment.Changed.

ServicePackage.cspkg

Примечание.

Максимальный размер пакета для развертывания составляет 600 МБ.

Чтобы развернуть приложение как облачную службу в Azure, необходимо вначале упаковать приложение в соответствующий формат. Можно использовать программу командной строки CSPack (устанавливается вместе с Azure SDK) для создания файла пакета в качестве альтернативы Visual Studio.

CSPack использует содержимое файла определения службы и файла конфигурации службы для определения содержимого пакета. CSPack создает файл пакета приложения (CSPKG-файл), который можно отправить в Azure с помощью портала Azure. По умолчанию пакет называется [ServiceDefinitionFileName].cspkg, но вы можете указать другое имя, используя параметр /out в программе командной строки CSPack.

Расположение CSPack приведено ниже.
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Примечание.

Файл CSPack.exe (в Windows) доступен при запуске ярлыка Командная строка Microsoft Azure, который устанавливается вместе с пакетом SDK.

Запустите программу CSPack.exe отдельно, чтобы просмотреть документацию обо всех возможных параметрах и командах.

Совет

Запустите облачную службу локально в эмуляторе вычислений Microsoft Azure, использовав параметр /copyonly. При указании этого параметра двоичные файлы приложения копируются в структуру каталогов, из которой они могут выполняться в эмуляторе вычислений.

Пример команды для упаковки облачной службы

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

cspack [DirectoryName]\[ServiceDefinition]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /out:[OutputFileName]

Если приложение содержит веб-роль и рабочую роль, используется следующая команда.

cspack [DirectoryName]\[ServiceDefinition]
       /out:[OutputFileName]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]

Здесь переменные определены следующим образом.

Переменная Значение
[DirectoryName] Подкаталог в корневом каталоге проекта, который содержит CSDEF-файл проекта Azure.
[ОпределениеСервиса] Имя файла определения службы. По умолчанию этот файл называется ServiceDefinition.csdef.
[OutputFileName] Имя создаваемого файла пакета. Как правило, эта переменная имеет имя приложения. Если имя файла не указано, создаваемому пакету с расширением .cspkg присваивается имя приложения.
[RoleName] Имя роли, определенное в файле определения службы.
[КаталогДвоичныхФайловРоли] Местоположение двоичных файлов для роли.
[VirtualPath] Физические каталоги для каждого виртуального пути, определенного в разделе «Сайты» определения службы.
[ФизическийПуть] Физические каталоги содержимого для каждого виртуального пути, определенного в узле «Сайт» в определении службы.
[RoleAssemblyName] Имя двоичного файла для роли.

Следующие шаги