Microsoft Windows Azure. Быстрый старт. Часть 2

Часть 2. Публикация приложений в Windows Azure

В предыдущей части мы познакомились с процессом публикации приложений в Windows Azure, разделив его на два шага – создание пакета развертывания и конфигурационного файла в папке на локальном диске и ручная загрузка этих файлов через портал Windows Azure. Более простым способом является публикация приложения непосредственно из Visual Studio, но для этого нам потребуется сертификат, т.к. в этом сценарии мы наделяем Visual Studio правом от нашего имени обращаться к инфраструктуре Windows Azure через программные интерфейсы управления (Management API) – в случае работы через портал Windows Azure также используются программные интерфейсы управления, но все действия инициируются пользователями.

Создание сертификата

В Windows Azure используются различные типы сертификатов – для аутентификации операций и клиентского доступа к ресурсам и инфраструктуре Windows Azure используются сертификаты Х.509 (файлы с расширением .cer), которые в терминах Windows Azure называются Management Certificates и т.н. сервисные сертификаты (Service Certificates) или PFX-сертификаты (Personal Information Exchange). Для того, чтобы мы могли публиковать наши «облачные» приложения из Visual Studio нам потребуется CER-сертификат.

Для создания CER-сертификата можно использовать различные способы. Например, известную многим разработчикам утилиту MAKECERT, входящую в состав Windows SDK или средствами IIS Manager, или – средствами Visual Studio. Ниже мы рассмотрим, как создать CER-сертификат средствами Visual Studio. Для этого необходимо выполнить ряд следующих действий. В Visual Studio следует создать проект на Windows Azure или открыть существующий (например, результат выполнения упражнения из первой части данного цикла). Далее, в Solution Explorer следует выбрать имя проекта, нажать правую кнопку и выбрать команду Publish. Затем, в диалоговой панели «Deploy Windows Azure project» выбрать опцию «Deploy your Windows Azure project to Windows Azure». После это следует раскрыть выпадающий список Credentials и выбрать команду «Add».

Рис. Панель Deploy Windows Azure project

В открывшейся диалоговой панели «Windows Azure Project Management Authentication» выполнить шаг 1 – «Создать или выбрать существующий сертификат для аутентификации» («Create or select an existing certificate for authentication»). В раскрывающемся списке следует выбрать либо существующий сертификат, либо создать новый с помощью команды Create.

Рис. Управление аутентификацией

Выберем создание нового сертификата. Сначала мы указываем его название (Enter a friendly name for the new certificate) – например, MyAzureCert. После создания сертификата его имя будет отображено в списке шага 1. Команда View позволит посмотреть на его содержимое.

Рис. Содержимое сертификата

Содержимое сертификата также можно посмотреть с помощью Microsoft Management Console (MMC) – для этого нужно нажать кнопку Start и ввести команду CertMrg.msc.

Рис. Утилита Certificate Manager

Загрузка сертификата на портал Windows Azure

Следующий шаг – загрузка сертификата на портал Windows Azure. Для этого на шаге 2 нужно нажать ссылку «Copy the full path of the certificate to the clipboard», с помощью которой полное имя сертификата скопируется в область обмена данными. Далее мы заходим на портал Windows Azure, указываем учетные данные Windows Live ID, выбираем раздел Hosted Services, Storage Accounts & CDN и убеждаемся в том, что у нас есть активная подписка и в ней – как минимум один сервис. Выбираем группу Management Certificates и в верхней панели выбираем команду Add Certificate.

Рис. Добавление сертификата на портале Windows Azure

В диалоговой панели «Add New Management Certificate» нажимаем кнопку Browse и в панели Open в строке File Name нажимаем Ctrl-V для вставки полного пути сертификата.

Рис. Экспорт сертификата

Нажимаем последовательно кнопки «Open» и «Ok» для копирования нашего сертификата на портал Windows Azure.

В панели «Properties» в правой части портала нужно найти блок «Subscription ID» и скопировать его содержимое в виде GUID в область обмена данными. Теперь мы возвращаемся в Visual Studio и в панели «Windows Azure Project Management Authentication» на шаге 3 копируем Subscription ID в соответствующее поле. Предпоследний шаг – задание имени для учетной записи – это делается в поле «Name these credentials». После чего мы нажимаем кнопку «Ok» и убеждаемся в том, что наш сертификат успешно загружен в Windows Azure. В панели «Deploy Windows Azure project» будет показано имя сервиса (Hosted Service), имя сертификата (Credentials) и среда для развертывания (Deployment environment to deploy to). Также в этой панели можно задать имя учетной записи хранилища (Storage account to deploy through), метку текущей версии развертывания (Deployment Label) и сконфигурировать соединение через Remote Desktop (Configure Remote Desktop Connections). Если вы используете платную версию Visual Studio с поддержкой IntelliTrace (Visual Studio 2010 Ultimate), то здесь также можно сконфигурировать эту опцию отладки.

Рис. Подключение к Windows Azure

Вернемся на портал Windows Azure, выберем группу «Management Certificates» и убедимся в том, что наш сертификат успешно загружен.

Рис. Сертификаты в Windows Azure

Публикация с помощью Visual Studio

В Visual Studio выполним команду View | Other Windows и выберем опцию Windows Azure Activity Log. Затем в панели «Deploy Windows Azure project» нажмем кнопку «Ok» для запуска процесса публикации нашего приложения.

В окне «Windows Azure Activity Log» будет наглядно отображаться процесс публикации нашего приложения.

Рис. Процесс публикации приложения

Успешная операция завершается статусом «Complete» и становится доступной ссылка Website URL, с помощью которой прямо из Visual Studio мы можем запустить наше приложение. Сравним Deployment ID, отображенный в панели Visual Studio с информацией, отображаемой на странице нашего приложения – они должны быть одинаковыми.

Рис. Приложение, работающее в Windows Azure

Выше мы рассмотрели самый простой и наглядный способ развертывания «облачных» приложений – средствами Microsoft Visual Studio. Еще один вариант, который может использоваться, например, для для включения процесса развертывания приложения в полный цикл разработки заключается в использовании утилиты CSPack, которая входит в состав Windows Azure SDK.

Развертывание вручную

Утилита CSPack (файл CSPack.exe в каталоге C:\Program Files\Windows Azure SDK\v1.4\bin\) – это утилита командной строки, которая используется для подготовки приложения к развертыванию. Существует два способа использования данной утилиты. Первый способ используется в том случае, когда нам необходимо подготовить развертывание для запуска приложения под локальным эмулятором, второй – когда мы подготавливаем пакет развертывания для его последующей загрузки в Windows Azure. И в том и в другом случае наш проект должен быть откомпилирован.

Если утилита CSPack используется с опцией /copyonly, это означает, что мы планируем запустить приложение под локальным эмулятором. Например, для создания развертывания для локального запуска для нашего проекта WA_Publish нужно выполнить следующую команду:

c:\...\Projects\WA_Publish\cspack WA_Publish\ServiceDefinition.csdef
/role:WebRole1;WebRole1
/sites:WebRole1;Web;WebRole1\bin
/copyonly

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

Из командной строки запустим утилиту CSRun (Windows Azure Desktop Execution Tool), которая позволит нам выполнить наше «облачное» приложение под локальным эмулятором. Для нашего проекта WA_Publish нужно выполнить следующую команду:

c:\...\Projects\WA_Publish\csrun
/run:ServiceDefinition.csx;ServiceConfiguration.cscfg
/launchBrowser

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

Для создания пакета, который будет развернут в Windows Azure, необходимо выполнить практически ту же команду, что и для локального развертывания, только без опции /copyonly:

c:\...\Projects\WA_Publish\cspack WA_Publish\ServiceDefinition.csdef
/role:WebRole1;WebRole1
/sites:WebRole1;Web;WebRole1\bin
/copyonly

После того как CSPKG-файл создан, мы загружаем его через портал Windows Azure и запускаем наше приложение в «облаке». Как это сделать описано в первой части данного цикла.

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

Содержимое пакета развертывания

В корневом каталоге помимо файла ServiceDefinition, находятся еще два XML-файла, содержащие подробные инструкции для инфраструктуры Windows Azure (Azure Fabric Controller, ранее называвшийся Red Dog, отсюда и префикс RD в расширениях имен файлов) по созданию и конфигурации виртуальных машин для нашего приложения, а также указания на ряд системных компонентов, которые входят в состав пакета развертывания.

Далее, для каждой роли, входящей в наш проект в подкаталоге roles создается подкаталог, в котором располагается весь код нашего приложения – для веб-роли это каталог approot, в котором в подкаталоге bin располагается WebRole1.dll – библиотека, которая является точкой входа для веб-роли, а также ряд дополнительных каталогов – base, diagnostics и plugins, в которых находятся бинарные файлы и динамические библиотеки, входящие в состав Azure SDK.

Каталог base содержит ряд бинарных компонентов, которые необходимы для успешного старта роли в виртуальной машине Windows Azure. К таким компонентам в частности относятся – IISConfigurator – отвечает за запуск и конфигурацию IIS в режиме Full IIS, WaHostBootstrapper – отвечает за загрузку конфигурации роли и запуск всех необходимых задач, мониторинг всех дочерних процессов роли, WaWebHost – процесс для веб-ролей, сконфигурированных для Hostable Web Core (HWC), WaIISHost – хост-процесс для кода веб-роли (библиотеки, которая реализует класс RoleEntryPoint и описана в файле __entrypoint.txt) и ряд других.

Рис. Содержимое каталога base

Каталог diagnostics содержит бинарные компоненты для мониторинга «облачных» приложений – агентские библиотеки, компоненты для взаимодействия с подсистемой Event Tracing for Windows (ETW), записи данных в хранилище Windows Azure и т.п.

Рис. Содержимое каталога diagnostics

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

Рис. Содержимое каталога plugins

В следующей части

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