Share via


Microsoft Windows Azure. Быстрый старт. Часть 4. Внутри виртуальной машины Windows Azure

В предыдущих частях нашего цикла (см. часть 1, часть 2, часть 3)мы рассмотрели различные вопросы, связанные с развертыванием приложений в Windows Azure. В этой части мы заглянем внутрь виртуальной машины, в которой выполняется наше «облачное» приложение – для этого мы будем использовать удаленный доступ (Remote Desktop Access) и утилиту, которая позволит нам удаленно выполнять команды – эту утилиту мы создадим в процессе нашего знакомства с Windows Azure.

Весь код, выполняемый в Windows Azure, работает внутри виртуальной машины – либо создаваемой инфраструктурой Windows Azure в процессе развертывания нашего приложения (для веб-роли и прикладной роли), либо загружаемый нами самостоятельно (для VM-роли, которую мы обсудим позже). Существует как минимум два способа для того, чтобы посмотреть, что находится в виртуальной машине, подготавливаемой для нас инфраструктурой Windows Azure. Первый способ – это использование удаленного доступа (Remote Desktop Access) для подключения к одному из экземпляров нашего приложения, второй – удаленное выполнение консольных команд для получения информации о настройках, процессах, структуре файловой системы и т.п. Начнем именно с этого способа и создадим простую утилиту, которая позволит нам удаленно запускать различные команды операционной системы Windows (которая лежит в основе виртуальных машин Windows Azure) и получать от них различную информацию.

Удаленный запуск команд

Откроем Visual Studio, создадим новый проект типа Cloud, присвоим ему имя WA- InsideVM и нажмем кнопку Ok. Добавим к проекту веб-роль, присвоив ей имя InsideVM. Изменим содержимое страницы Default. aspx, добавив три следующих компонента:

  • Строку ввода (компонент TextBox) с идентификатором «Command»
  • Кнопку (компонент Button)с текстом «Run» и идентификатором «Run»
  • Строку ввода (компонент TextBox) с идентификатором «Output» и атрибутом TextMode со значением «Multiline»

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

04-01

Рис. Разметка страницы приложения

В обработчике нажатия кнопки напишем следующий код:

04-02

Рис. Код обработчика нажатия кнопки

В приведенном выше коде мы создаем экземпляр класса System. Diagnostics. Process, который позволит нам запускать новый процесс на основе командного процессора cmd. exe. Среди настроек свойств этого класса мы используем структуру StartInfo для задания имени процесса – cmd.exe (свойство FileInfo), аргументов (свойство Arguments), отказываемся от использования Windows Shell для запуска процесса (свойство UseShellExecute), указываем на необходимость перенаправления вывода (свойство RedirectStandartOutput) и отключаем событийную модель (свойство EnableRaisingEvents). Далее мы запускаем наш процесс, указывая в качестве аргумента команду, введенную с строке Command и копируем всю выводимую информацию с компонент Output. Подробнее о классе Process см. на сайте MSDN по адресу http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx. Структура StartInfo описана на сайте MSDN по адресу http://msdn.microsoft.com/en-us/library/system.diagnostics.process.startinfo.aspx/.

Для того, чтобы наш код работал без ошибок, в конфигурационном файле ServiceDefinition. csdef необходимо указать аргумент enableNativeCodeExecution, который позволит выполнять внутри виртуальной машины «неуправляемый» код:

04-03

Рис. Поддержка выполнения «неуправляемого» кода

Мы готовы развернуть наше приложение в Windows Azure и посмотреть, как оно там будет работать. Чтобы использовать данное приложение как инструмент для изучения и отладки, воспользуемся следующими командами:

Команда tasklist показывает список всех запущенных задач. Результат ее выполнения показан на следующей иллюстрации.

04-04

Рис. Результат выполнения команды tasklist

Команда whoami / priv позволяет посмотреть привилегии учетной записи, под управлением которой запущено наше приложение. Результат ее выполнения показан на следующей иллюстрации. Обратите внимание на то, что это – «классическая» учетная запись стандартного пользователя, в которой отключены все операции, требующие повышенных привилегий.

04-05

Рис. Результат выполнения команды whoami / priv

Команда netstat показывает открытые порты для нашей виртуальной машины. Результат ее выполнения показан на следующей иллюстрации.

04-06

Рис. Результат выполнения команды netstat

Команда icacls позволяет узнать, права доступа к системным ресурсам (дискам) для всех учетных записей в системе. Результат ее выполнения показан на следующей иллюстрации. Обратите внимание, например на тот факт, что стандартные пользователи не имеют прав на запись на диск с:\ - эта операция, как и в «реальной» операционной системе доступна только учетным записям с повышенными привилегиями – администраторам и системной учетной записи.

04-07

Рис. Результат выполнения команды icacls

Если воспользоваться техникой передачи дополнительных файлов, описанной в предыдущей части данного цикла (_ССЫЛКА_), то можно загрузить в виртуальную машину отладчик WinDbg, утилиты SysInternals или какие-то другие системные утилиты для более детального исследования как самой виртуальной машины, так и работающего в ней приложения.

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

Удаленный доступ к виртуальной машине

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

Получение PFX-сертификата

Сертификаты Personal Information Exchange (PFX-сертификаты) используются для шифрования учетных данных при удаленном подключении к виртуальной машине. Существует несколько способов создания PFX-сертификатов, среди которых – использование утилиты MAKECERT или Internet Information Services ( IIS) Manager. Мы воспользуемся утилитой MAKECERT. Для этого, откроем командный процессов Visual Studio (Visual Studio Command Prompt) выполнив команду Start | All Programs | Microsoft Visual Studio 2010 | Visual Studio Tools | Visual Studio Command Prompt (2010) с повышенными привилегиями (Run as Admin).

04-08

Рис. Запуск командного процессора

В окне командной строки введем следующую команду:

makecert –sky exchange –r –n “CN=WA-RDP-Test” –pe –a sha1 –len 2048 My “WA-RDP-Test.cer”

и выполнием ее. В результате, в персональном хранилище сертификатов будет создан сертификат с именем WA- RDP- Test.

04-09

Рис. Генерация сертификата

Следующий шаг, который нам нужно сделать – это экспортировать созданный сертификат из системного хранилища сертификатов в PFX-файл для его последующей загрузки через портал Windows Azure. Для этой операции можно использовать либо утилиту Certificate Manager (certmgr.msc), либо Internet Information Services (IIS) Manager. Для нашего упражнения мы выберем утилиту Certificate Manager. Выполним команду Start | certmgr. msc. В левой панели выберем раздел Personal, в нем – Certificates и найдем в правой панели созданный нами сертификат.

04-10

Рис. Сертификат в системном хранилище сертификатов

Нажмем правую кнопку «мыши» на имени сертификата и в списке команд выберем All Tasks, затем – команду Export.Это приведет к запуску мастера экспорта сертификатов, который позволит нам экспортировать созданный сертификат из системного хранилища сертификатов в PFX-файл.

04-11-01

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

На первой странице мастера экспорта сертификатов нажимаем кнопку «Next», затем, на экране «Export Private Key» выбираем опцию «Yes, export the private key» и снова нажимаем кнопку «Next». На экране «Export File Format» оставляем опцию, включенную по умолчанию – «Personal Information Exchange – PKCS #12 (.PFX) » и нажимаем кнопку «Next». На экране «Password» указываем пароль, который буде использоваться для защиты нашего ключа. Далее - нажимаем кнопку «Next». На экране «File to Export» указываем местоположение файла, в который будет экспортирован наш сертификат. Снова нажимаем кнопку «Next». На экране «Completing the Certificate Export Wizard» убеждаемся в том, что все введенные нами параметры верны и нажимаем кнопку «Finish». Наш сертификат будет экспортирован в указанный файл.

04-12

Рис. Результат экспорта сертификата

Загрузка сертификата в Windows Azure

Подключимся к порталу Windows Azure (windows.azure.com) для загрузки сертификата в наш раздел Windows Azure. На портале выберем раздел «Hosted Services», затем – команду «Add Certificate». В диалоговой панели «Upload an X.509 Certificate» нажмем кнопку «Browse» для выбора сертификата, экспортированного нами на предыдущем шаге, затем укажем пароль и нажмем кнопку «Create». Будет выполнена проверка сертификата и его загрузка.

04-13

Рис. Загрузка сертификата

04-14

Рис. Сертификат, загруженный в хранилище нашей подписки

 

Более подробно об использовании портала Windows Azure см. «Знакомимся с порталом Windows Azure».

Конфигурация приложения

Следующий шаг – выбор приложения, к которому мы будем удаленно подключаться. Для целей нашего упражнения создадим новый проект (RDP-Demo), состоящий из одной веб-роли (DemoWebRole). В Solution Explorer выберем наш проект, нажмем правую кнопку «мыши» и выберем команду «Publish». В диалоговой панели «Deploy Windows Azure project» укажем нашу учетную запись и в нижней части панели выберем команду «Configure Remote Desktop Connections… ».

04-15

Рис. Конфигурация удаленного доступа. Шаг 1

В панели «Remote Desktop Configuration» включим опцию «Enable connections for all roles», выберем сертификат, предварительно загруженный нами на предыдущем шаге, укажем имя пользователя и пароль (они потребуются для удаленного подключения к виртуальной машине), проверим дату действия сертификата (по умолчанию – это 30 дней с момента его создания) и нажмем кнопку «Ok».

04-16

Рис. Конфигурация удаленного доступа. Шаг 2

В диалоговой панели «Deploy Windows Azure project» нажмем кнопку «Ok» для запуска процесса развертывания нашего приложения в Windows Azure.

Удаленное подключение

После того как наше приложение будет развернуто в Windows Azure, мы можем удаленно подключиться к нему. Для этого на портале следует выбрать экземпляр роли, к которому мы планируем подключиться и в правой части полосы команд, в разделе Remote Access нажать кнопку «Connect».

04-18

Рис. Уделенное подключение через портал

Нам будет прислан RDP-файл, который следует открыть (команда «Open» или сохранить на диске команда «Save»). Если нам не требуется каких-либо дополнительных настроек удаленного соединения (например, предоставления доступа к локальным ресурсам), то выбираем команду «Open».

04-19

Рис. Открытие RDP-файла

Далее мы подтверждаем полномочия приложения Remote Desktop Connection (mstsc.exe) на запуск и открытие RDP-файла, подтверждаем использование сертификата (т.к. мы используем не подписанный сертификат, система безопасности Windows предупреждает нас об этом), и, на финальном шаге, вводим пароль, указанный нами при создании сертификата. Далее следует еще одно предупреждение о том, что используемый нами сертификат не подписан, и … мы внутри виртуальной машины, на которой работает экземпляр нашего приложения.

Наше знакомство с виртуальной машиной начнем с того, что посмотрим, какая установлена операционная система и на каком «железе» она работает. Для этого воспользуемся панелью управления (Control Panel | System).

04-20

Рис. Характеристики виртуальной машины

Так как мы не предпринимали никаких действий по настройке нашей роли в Visual Studio, по умолчанию была выделена виртуальная машина размера «Small» - 1 процессор, 2 Гбайт памяти с установленной операционной системой Windows Server 2008 Enterprise Service Pack 2 (см. http://msdn.microsoft.com/ru-ru/library/ee814754.aspx). Если посмотреть на портале Windows Azure свойства нашей роли, то в разделе «Guest operating system» будет указано «WA-GUEST-OS-1.13_201104-01». Поиск на сайте MSDN (http://msdn.microsoft.com/en-us/library/hh227296.aspx) покажет, что данная гостевая операционная система обладает следующими характеристиками:

04-20-01

Рис. Характеристики гостевой операционной системы

Далее – по желанию, как в обычной серверной операционной системе – Server Manager для детального изучения настроек ОС, Service Manager – для изучения запущенных сервисов, Performance Monitor для слежения за производительностью системы и т.д.

Для исследования можно использовать следующие команды:

  • eventvwr – просмотр журнала событий
  • taskmgr – просмотр запущенных приложений и процессов
  • services.msc – запуск Service Manager
  • regedit – редактор реестра
  • shutdown / r/ t 0 – перезапуск экземпляра виртуальной машины

04-21

Рис. Performance Monitor

Отдельный интерес представляет распределение дисков и состав файловой системы.

04-22

Рис. Диски виртуальной машины

Операционная система установлена на диске D:, на диске C: находится конфигурационная информация и располагается локальное хранилище экземпляра роли (в нашем примере объем диска составляет 225 Гбайт, что соответствует характеристикам виртуальной машины размера «Small»), а на диске E: - код для роли нашего приложения. Более подробно об отдельных компонентах файловой системы мы поговорим далее в нашем цикле, когда будем обсуждать вопросы, связанные с диагностикой и отладкой приложений.

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

В следующей части мы завершим обсуждение процесса развертывания и рассмотрим развертывание виртуальной машины для VM-роли.