Follow Me Widget

понедельник, 15 августа 2011 г.

Знакомимся с Windows Azure Service Management API на примере получения списка запущенных сервисов.

Как я уже упоминал в одной из моих предыдущих публикаций, в Windows Azure существует прекрасный программный интерфейс, позволяющий управлять запущенными облачными сервисами. Интерфейс носит название Windows Azure Management API и сегодня я покажу на примере как использовать его в практических целях. Итак, поставим себе банальную задачу вывести в консольном приложении список запущенных на данный момент облачных сервисов, привязанных к активной подписке. В моем случае сам сервис представляет собой обычный ASP.NET сайт с единственной  страничкой Default.aspx, на которой выводится надпись Hello World. Допустим также, что мы уже успешно развернули проект в клауде и он там успешно крутится.


Безымянный

Повышенное внимание следует уделить надписи, выделенной красной рамкой. Это DNS префикс запущенного сервиса и именно его нам и необходимо будет вытянуть при помощи Management API. Понятное дело нам никто просто так не позволит обратиться к API. В первую очередь необходим сертификат для защищенного соединения между клиентом и облаком. В Windows Azure существуют 2 вида сертификатов – это Management Certificates и Service Certificates. Как Вы уже успели догадаться первые из них являются сертификатами уровня активной подписки и используются как раз для задач управления сервисами. Для создания такого сертификата запустим командную строку и в ней пропишем команду на создание X.509 сертификата.

Windows Azure Certificate Creation

Как видите мы использовали утилиту makecert. Она принимает большой список аргументов. Данная утилита очень подробно описана на странице MSDN (MakeCert Parameters), поэтому останавливаться на ней не будем. Итак, мы получили готовый сертификат, осталось загрузить его на портал и привязать к определенной подписке. Для этого перейдем на портале в раздел Management Certificates и загрузим только что созданный cer-файл.

Windows Azure Management Certificates

На этом стадия подготовки закончена. Перейдем к самому клиенту. Как я уже говорил клиент представляет собой консольное приложение, выводящее список запущенных облачных сервисов. Давайте посмотрим на код приложения и разберем наиболее важные фрагменты.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.IO;
using System.Xml.Linq;

namespace AzureServiceManagementApiTester
{
     class Program
  {
        static void Main(string[] args)
     {
        var request = (HttpWebRequest)WebRequest.Create("https://management.core.windows.net/75f6cd75-8d50-460f-a290-9c34b7ab34c2/services/hostedservices");

        request.Headers.Add("x-ms-version:2009-10-01");
        request.ClientCertificates.Add(X509Certificate2.CreateFromCertFile(@"D:\AzureTestCert.cer"));

        var response = request.GetResponse().GetResponseStream();
        var xmlofResponse = new StreamReader(response).ReadToEnd();

        XDocument doc = XDocument.Parse(xmlofResponse);
        XNamespace ns = "http://schemas.microsoft.com/windowsazure";
        var services = (from r in doc.Descendants(ns + "HostedService") select r.Element(ns + "ServiceName").Value).ToList();
        services.ForEach(entry => Console.WriteLine(entry));
        Console.ReadKey(true);
      }
  }
}
В первой строке создается собственно сам запрос. Внимание необходимо обратить на идентификатор подписки (его можно посмотреть на портале разработчика).
 
Subscription ID

Кроме того необходимо указать версию используемого API, а также сертификат безопасности, что и делается в последующих строках программы.
request.Headers.Add("x-ms-version:2009-10-01");
request.ClientCertificates.Add(X509Certificate2.CreateFromCertFile(@"D:\AzureTestCert.cer"));
В качестве результата выполнения запроса мы получим следующий XML.


https://management.core.windows.net/75f6cd75-8d50-460f-a290-9c34b7ab34c2/services/hostedservices/feschenkoalex
feschenkoalex

Осталось только дело техники - распарсить его, что мы успешно и делаем в заключительных строках программы.
XDocument doc = XDocument.Parse(xmlofResponse);
            XNamespace ns = "http://schemas.microsoft.com/windowsazure";
            var services = (from r in doc.Descendants(ns + "HostedService") select r.Element(ns + "ServiceName").Value).ToList();
            services.ForEach(entry => Console.WriteLine(entry));
В конечном счете на экране мы увидим следующую картину.

Service Management API

Именно то, что нам и нужно. Задача выполнена успешно :) Как видим использовать Service Management API чрезвычайно просто. Конечно же API позволяет выполнять ЗНАЧИТЕЛЬНО большее количество операций над нашими облачными сервисами. Показанный в публикации  функционал получения списка запущенных сервисов является лишь ничтожно малой частью всех возможностей этого прекрасного API. Надеюсь мой пост был полезным и приятной Вам работы с Windows Azure Service Management API !!

Комментариев нет: