Поделиться через


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

Это важно

Облачные службы (классическая версия) теперь не поддерживается для всех пользователей с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут окончательно потеряны начиная с октября 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.

Облачная служба создается из трех компонентов: определения службы (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="Medium">
    <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] Имя роли, определенное в файле определения службы.
[RoleBinariesDirectory] Местоположение двоичных файлов для роли.
[VirtualPath] Физические каталоги для каждого виртуального пути, определенного в разделе «Сайты» определения службы.
[ФизическийПуть] Физические каталоги содержимого для каждого виртуального пути, определенного в узле «Сайт» в определении службы.
[RoleAssemblyName] Имя двоичного файла для роли.

Дальнейшие действия

Я создаю пакет облачной службы и я хочу выполнить следующие действия.

Я использую Visual Studio и хочу...