Что такое модель Облачной службы (с расширенной поддержкой) и как создать из нее пакет?

Облачная служба создается из трех компонентов: определения службы (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, используемую здесь, однако ниже приведено краткое описание некоторых элементов:

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

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

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

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

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

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

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

Startup
Содержит задачи, которые выполняются при запуске роли. Задачи определены в 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] Имя файла определения службы. По умолчанию этот файл называется ServiceDefinition.csdef.
[OutputFileName] Имя создаваемого файла пакета. Как правило, эта переменная имеет имя приложения. Если имя файла не указано, создаваемому пакету с расширением .cspkg присваивается имя приложения.
[RoleName] Имя роли, определенное в файле определения службы.
[RoleBinariesDirectory] Расположение двоичных файлов для роли.
[VirtualPath] Физические каталоги для каждого виртуального пути, определенного в разделе «Сайты» определения службы.
[PhysicalPath] Физические каталоги содержимого для каждого виртуального пути, заданного в узле «Сайт» определения службы.
[RoleAssemblyName] Имя двоичного файла для роли.

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