Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Azureコミニティ発足 LTネタ Windows Azure Service Mamangement REST API

こんばんはご機嫌いかがでしょうか。Tech Ed 2010には参加できませんでしたが、Windows Azure コミニティ船上パーティには潜入し、LTに初挑戦してきました。いい年こいて、船酔いとほろ酔いで妙なテンションになってしまって恥ずかしい限りですが、楽しいひとときを過ごさしてもらいした。主催者および、運営のみなさまに感謝です。

というわけで、当日発表した資料は以下の通りでございます。

Windows Azure Service Management REST API オリジナルツールを作ろう」です。

csmanage.exeなどは、ソースも公開されていますが、WCF を使ってコーディングされているので、自分にとってはちょっと敷居が高かったんで、普通にHTTP使ってやってます。

LTでやったゲストOSの一覧を呼び出すサンプルプログラム部分を抜き出しておきます。資料とは微妙に変数名とか違いますが、LINQPad上では動作確認済。

  var thm = "証明書の拇印";
  var sub = "サブスクリプションID";
  Uri uri = new Uri("https://management.core.windows.net/" + sub + "/operatingsystems");

  X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
  store.Open(OpenFlags.ReadOnly);
  var certs = store.Certificates.Find(X509FindType.FindByThumbprint, thm, false);
  store.Close();
  X509Certificate2 accessCertificate = certs[0];
  
  TimeSpan timeout = TimeSpan.FromMinutes(1);
	
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
  request.Timeout = (int)timeout.TotalMilliseconds;
  request.ReadWriteTimeout = (int)timeout.TotalMilliseconds * 100;

  request.Method = "GET";
  request.ClientCertificates.Add(accessCertificate);
  request.Headers.Add("x-ms-version", "2010-04-01");
  var response = request.GetResponse();
  var body = XElement.Load(response.GetResponseStream());
  Console.WriteLine (body);