12/02/2011

Windows Azureを始める方へ

こんにちは。かなり久しぶりのブログアップデートです。

今まで何をしていたかというと、まあそれは後に書くとして。 今回は、Windows Azureアドベントカレンダーの兼ね合いでブログを書いております。 あと、1時間以内にアップできないと間に合わないのですが、罰ゲームとかないですよね。。。

今回は、Windows Azureのクラウド環境を初めて触る方のために、Azure本を紹介できればと思います!

とはいっても、私が読んだことのある本だけの紹介になってしまい少なめな感じですが、少しでも皆様の役に立てればと。(※原稿を速く仕上げるために、主にアマゾンのリンクになっております)



■1.クラウドのアプリケーションを初めて作ろうとしている方に!

本と言っておきながら、Webページの紹介になってしまっていますが、MSDN の以下のページの、「Windows Azure Queue - キュー ストレージのプログラミング」の「Azure キュー を使用してクラウド アプリケーションを構築する」から読むべきではないかと考えています。この章では、クラウドを利用したアプリケーションの基本が書かれており、大量のリクエストをどのように処理するのか?どのようにスケールするアプリケーションを設計するのか?など、クラウドならではの考え方が書かれています。

http://msdn.microsoft.com/ja-jp/windowsazure/cc994380

では、本の紹介です。

『Windows Azureアプリケーション開発入門 (MSDNプログラミングシリーズ)』
 

酒井さんの本!この本は、第二版がすでに出ていて、内容が古い感じがするのですが、コテコテしてなくて、サッパリした感じの仕上がりとなっているため、読みやすい本です。初期の本だけあって、WebRole、WorkerRole、QueueStorage、BlobStorage、TableStorageの基本的な使い方が書かれています。

あと、サッパリしているので、上記MSDNのページ内の、Windows Azure Table - テーブル ストレージのプログラミングWindows Azure Blob - Blob ストレージのプログラミングWindows Azure Queue - キュー ストレージのプログラミング も合わせて読めば完璧でしょう!


■2.ちょっと深く何ができるのか知りたくなってきた方に!

『Windows Azure実践クラウド・プログラミングfor C#/Visual Basic/PHP』


 

徐々に深く入っていくときに、こんなこともできるんだ!と思わせられる本。このあたりから自分に適したAzureの使い方を身に付けていけるんでしょうね。


■3.クラウドのアプリケーションなんだから、facebookとか、その他のサービスと連携して、夢が広がるアプリを作りたくなってきた方に!

『G-CLOUD Magazine 2011 Summer』


 

この号には、Windows Azureから、facebookを使用するアプリの作成方法や、Microsoft Translatorとの連携による音声アプリなど、クラウドならではの面白いアプリの作り方が紹介されてます。C#を使ったコードで書かれているので、勉強になると思います!

以下のサイトからPDF版も発売されているようなので、お値打ちな感じです!

https://gihyo.jp/dp/information/promotion/201111/2801


■4.Windows PhoneやiPhoneなどのスマフォとクラウドを使ったアプリを作ってみたくなった方に!

『G-CLOUD Magazine 2011』

 

Windows Phoneと通知を、Windows Azureを利用して実現している記事が書かれています。雑誌の記事になっているので、サッパリとした感じのコードとなっており、理解しやすいのではないかと思います。


『G-CLOUD Magazine 2011 Autumn』
 

iOSのアプリで、Windows Azure上のデータを扱う方法が書かれています。Windows Azureはマイクロソフトの製品だけではなく、色々なデバイスと連携することが容易であることがわかるのではないかと思います。


で、こちらの雑誌も以下のサイトからPDF版も発売されているようなので、お値打ちな感じですね!

https://gihyo.jp/dp/information/promotion/201111/2801


■5.Linuxなど他のシステムからWindows Azureが使えないか模索している方に!

『プログラミング Windows Azure』
 


この本は基本も書かれておりますが、他の本には書かれていないBlobストレージなどへのREST APIの動作などが紹介されたかなりマニアックな内容となっております。SDKを使えば、全く知る必要がないREST APIが紹介されているので、LinuxやMacOSなどで、libcurlとか使って、クラウド対応したいと考えている人は良いのではないかと考えています。わたしも、いつかは libcluscoreを、Windows Azure対応したいと考えています。


■6.たぶん、初めての方から上級者の方まで!

『Windows Azureエンタープライズアプリケーション開発技法』

 

Windows Azure によるアプリケーション開発基礎で書かれている内容が、書籍になったのかな?(本ブログ執筆時点では発売されていないので、想像です)パワポの文字だけで説明が少ないためこの本と合わせて読むとわかりやすいのかもしれません。私は、赤間さんのパワポ+プレゼンで育った感じなんです。実は。なので、 超!すごく!期待!注目!な本です!


ということで、ざっと紹介しましたが、皆さんのお役にたてた紹介になればと思います。

あとは、C#の本ですね!

5/29/2011

Developer Tools 7.1 の Windows Phone Emulator の IE で HTML5 Audio

Developer Tools 7.1 に付属している Windows Phone Emulator 内の IE で HTML5 Audio が動作するのか確認してみようと思い、依然紹介したTweetRadioで動作を確認してみました。


動作としては、JavaScript、HTML5 Audio は Windows の IE9 と全く同じように動作しており、CSS3も問題なく表示されている模様です。

なお、IE9でAudioを扱う場合の注意点はこちらです。

今後は、アプリ版も作ってみようと考えています。

PCが無くても手軽にどこでもだれでも、音声で情報を聞けるのは素晴らしいことですね。

5/25/2011

Windows Phone Developer Tools 7.1 Beta で 7.0 のアプリケーション開発

Windows Phone Developer Tools 7.1 Beta がリリースされました。このアップデートはMIX11で紹介された内容が含まれています。

http://channel9.msdn.com/Events/MIX/MIX11?sort=sequential&direction=desc&term=&t=windows%2Bphone

ツールのダウンロードはこちら

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=77586864-ab15-40e1-bc38-713a95a56a05&displaylang=en

22のコードサンプルはこちら

http://go.microsoft.com/fwlink/?LinkId=219604

Windows Phone Developer Tools 7.1 Beta では、現行リリース状態の7.0のアプリケーションのビルドと、今後リリースされる7.1両方のアプリケーションをビルドできます。以下はVisualStudioでWindows Phoneのプロジェクトを新規作成した時に表示されるバージョン選択画面。


7.1からはSocketが使えるようになりましたので、AzureのWorkerRoleとの接続とかいろいろ楽しめそうですね。

5/19/2011

Seattle Downtown から Redmond の Microsoft 社への行き方!

シアトル観光といえば、ボーイング社の見学などありますが、インターネット上でマイクロソフト社への行き方を聞いている投稿などよく見かけます。そこで、シアトルのダウンタウンからレドモンドのマイクロソフト社までの移動方法を紹介してみようと思います。(とはいえ、マイクロソフト社には入ることができませんので、公道から建物を眺めるだけです。自分の職場環境と比較して雰囲気を楽しむ感じですかね)

さて、ダウンタウンからと書きましたが、旅に役立つルートマップの準備から紹介します。Sea-Tac Airport からダウンタウンまでは、 Link Light Rail で移動することができますが、その電車の中で、ルートマップをゲットします。

空港からLink Light Railまで移動します



ルートマップをゲット!
で、ダウンタウンに着きます。レドモンドへは、ルートマップのバス545に乗ります。





ダウンタウン内は午前6時から午後7時までFreeですので、キャッシュで運賃を払う場合は、レドモンドについてから払います。時間帯にもよりますが、片道3ドルあれば十分足ります。



で、やっぱり気になるのが降り方です。地元のバスを乗るときにもルールがわかっていないのに、異国の地のバスはドキドキですよね。バス停の説明を読むと、降りるバス停の前、1ブロックでベルを鳴らすと書いてあります。それなら日本でも押したことがある!と思うのですが。。。。
では、545に乗ります。


ダウンタウンから離れて、湖が見えてきました。ここらへんに住めたら気持ちよさそうです。で、30分ぐらいしたらつくのですが、バスの中には日本で見かけるボタンのベルがありません。


シアトルのバスは、写真のようにひもがついているので、これを触るようなのです。この文化を知らないと、545のバスの電子化された黄色い線は飾りに見えてしまいます。降りる場合は、黄色い線を触ってドライバーに知らせます。直接話してもいいと思います。


で、ようやく着きます。日本の会社からは想像がつかない場所ですので、かなりあこがれますね。是非、信号待ちして歩行者用のボタンを押してくださいね!

5/18/2011

IE9 の HTML5 Audio について

先月、東日本大震災 震災情報ラジオ TweetRadio (現在はサービスを終了しております)を作りましたが、IE9 の HTML5 Audio の動作が Firefox 、 Google Chrome 、Safariと動作が異なったので、IE9のAudioの振る舞いについて紹介しておきます。

Firefox、 Google Chrome、 Safari の動作
  1. JavaScriptでAudioオブジェクトを作ることができる
  2. AudioのSrcを他のドメインのオーディオファイルに設定することができる
  3. wavオーディオが再生できる

IE9の動作
  1. JavaScriptでAudioオブジェクトを作ることができないので、Audioタグを使う必要がある
  2. AudioのSrcを他のドメインのオーディオファイル(異なるドメイン名のサーバから取得する場合。今回はWindows Azure Blob Storage)にすると、クロスドメインアクセスとなりオーディオファイルがホストされているサーバに、「clientaccesspolicy.xml」か「crossdomain.xml」が必要となる。TweetRadioでは、Blobストレージの$rootにclientaccesspolicy.xmlを設置している。
  3. wavオーディオを再生することができない。Windowsといえばwavと思っていたのに不思議な感じです。今回はmp3にて再生。

IE9だけ動作が違うので、仲間外れっぽく見えますが、FlashやSilverlightで行っているクロスドメインアクセスなどの機能が入っていてしっかり作られているように見えます。

5/17/2011

WebMatrix とか MVC とか ASP.NET で SSO する

MIX11のキーノートなどで、WebMatrix とか Orchard とか使った Webアプリケーションの紹介がありました。勢いに圧倒されて、少し使ってみることにしましたが、沢山のWebアプリケーションを簡単にインストールできるのであれば、これらのWebサイト間の認証も気になります。今回は、いろいろなWebアプリケーション間のWebMatrixやMVCやOchardでも使えるSSO(シングルサインオン)について紹介します。

ASP.NETのフォーム認証のSSOについて簡単に説明を行うと、フォーム認証により認証された情報はCookieにより暗号化されて保存されます。このCookieにユーザ名などの認証情報が入っているため、各Webアプリケーション間で暗号化されたデータを取得できるように同じ設定にしてあげてユーザ名を取得できるようにするわけです。主な設定内容は以下になります。

・Cookieの名前を同じに設定
・Cookieが利用されるドメイン設定
・暗号化に使用するキー情報を同一に設定

たとえば、web1.mydomain.co.jp と、web2.mydomain.co.jp というWebアプリケーション間でSSOを行いたい場合は、各Webアプリケーションのweb.configに同じ設定を行います。設定内容は以下のような感じです。

<machineKey 
  validationKey="1230000000000000000000000000000000000000,IsolateApps"
  decryptionKey="12300000000000000000000000000000,IsolateApps"
  validation="SHA1" decryption="AES" />
<authentication mode="Forms">
  <forms
    name="SSO"
    loginUrl="/Account/LogOn"
    timeout="2880"
    domain="mydomain.co.jp" />
</authentication>

とりあえず試すには、Orchardで認証した後に、WebMatrixで作ったサイトにアクセスしてもよいのではないかと思います。

かなり、端折っていてすいません。

参考URLは以下です。

Explained: Forms Authentication in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ff647070.aspx
machineKey 要素 (ASP.NET 設定スキーマ)
http://msdn.microsoft.com/ja-jp/library/w8h3skw9.aspx
FormsAuthentication プロパティ
http://msdn.microsoft.com/ja-jp/library/eazszwdc(v=VS.80).aspx

3/18/2011

東北地方太平洋沖地震 対策用 Windows Azure Platform 無料パス

東北地方太平洋沖地震 対策用 Windows Azure Platform 無料パス」を使用して、地震の情報を多くの人に知ってもらえるように、音声で情報を発信するアプリを作成しました。

このアプリは Twitter の情報を、日本語、英語、簡体字中国語、の3か国語で読み上げます。時間があるときに、もっと対応する言語を増やしていく予定です。

尚、このサイトで使用している技術としては、Windows Azure Compute、Blob Storage、ASP.NET MVC3、Bing Translator、jQuery、HTML5(Audio)になります。

東北地方太平洋沖地震音声情報発信アプリへ

3/17/2011

Bing Translator ( Bing 翻訳 ) でサポートされている言語

Microsoft Translator V2 を最近使ってみたのでメモしておきます。
色々なインタフェースが用意されています。.NETでプログラムを書く場合は、SOAPが一番便利なのではないでしょうか。

http://msdn.microsoft.com/en-us/library/ff512423.aspx

そして、Microsoft社の、Bing翻訳でサポートされている言語は下記の通りです。

1.Bing API の GetLanguagesForTranslate を実行した結果

Translateメソッドの引数に使うことができます。

ar
bg
zh-CHS
zh-CHT
cs
da
nl
en
et
fi
fr
de
el
ht
he
hu
id
it
ja
ko
lv
lt
no
pl
pt
ro
ru
sk
sl
es
sv
th
tr
uk
vi

2.Bing API の GetLanguagesForSpeak を実行した結果

Speakメソッドの引数に使うことができます。


ca
ca-es
da
da-dk
de
de-de
en
en-au
en-ca
en-gb
en-in
en-us
es
es-es
es-mx
fi
fi-fi
fr
fr-ca
fr-fr
it
it-it
ja
ja-jp
ko
ko-kr
nb-no
nl
nl-nl
no
pl
pl-pl
pt
pt-br
pt-pt
ru
ru-ru
sv
sv-se
zh-chs
zh-cht
zh-cn
zh-hk
zh-tw

2/16/2011

クラウドとスマートフォン連携を、Windows Azure と Windows Phone 7 で開発してみる

技術評論社のG-CLOUD Magazine 2011向けに、クラウドとスマートフォンの記事を書きました。

G-CLOUDはIT Pro及び開発者向けのクラウドの情報誌ということもあり、Windows Phone 7 だけではなく、「Windows Phone 7 のアプリが、Windows Azure のアプリから情報を取得するアプリケーション開発例」と、「Windows Azure から Windows Phone 7 にPush通信を行うアプリケーション開発例」の基本的な連携部分を紹介しています。

Windows Phone 7 Training Kit などのサンプルコードで紹介されているPush通信アプリでは、Push通信とは異なる箇所のコードが多く含まれており、これから始めようとしている人にとっては敷居が高いと思います。くじけそうになった人は是非読んでみてください。あと、これから始める人も是非! 開発に必要なツールを紹介しています。



本当はデータ連携とか、UIについても、もっと書きたいことあったんだけどね。。。

2/08/2011

Windows Phone 7 SilverlightからXNAフレームワークを使用する

Windows Phone 7 Silverlightから、XNAフレームワークのダイナミックオーディオ機能や、GamerServices機能を利用することが可能なようです。これを実現するために、XNA4.0からはアセンブリファイルが細分化されたみたいですね。Windows上でもWPFやWinFormからXNAフレームワークの機能を使えるようです。

細分化されたXNA Game Studio 4.0アセンブリファイル
http://blogs.msdn.com/b/ito/archive/2010/03/18/xna-game-studio-4-0-assemblies.aspx

XNAは.NET Compact Framework上でしか動かないと思っていましたが、.Net Frameworkでも動くんですね。

1/12/2011

64bit Windows環境で System.Management.Automation を使用してAzure Management CommandLets を利用する

前回のブログで 「64nit Windows環境において、C#からAzure Management CommandLets を利用できない」と書きましたが、皆さんは動きましたか?動かない方はADD-PSSnapinコマンドを実行するところで失敗していると思います。

これは System.Management.AutomationがC:\Program Files (x86)フォルダ配下に存在する物を使用している場合におこる現象です。利用しているクラスは.NETの32bit向けのクラス提供となっており、Azure Management Tools CommandLets のインストーラが.NETの64bit環境にしかインストールしないため、.NETの32bitのモジュールからは使うことができないのです。試にWindows PowerShell(x86)を実行していただくとわかると思いますが、ADD-PSSnapinコマンドでAzure Management Tools CommandLetsを利用することができません。

これを回避するには2つの方法があります。64bitに対応したWindows SDKをインストールする方法と、Azure Management Tools CommandLetsを32bitのPowershellにもインストールする方法の2種類です。おすすめとしては前者の64bitに対応したWindows SDKをインストールする方法です。

1. 64bitに対応したWindows SDKをインストールする方法

下記のサイトからインストーラをダウンロードして実行してください。

Windowsデベロッパーセンター Windows SDK
http://msdn.microsoft.com/ja-jp/windows/bb980924

Microsoft Windows SDK for Windows 7 and .NET Framework 4
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en

2. 、Azure Management Tools CommandLetsを32bitのPowershellにインストールする方法

installutil.exe を使用して手動で.NETの32bit環境に手動でインストールを行う方法を紹介します。このinstallutil.exeは.NETでサービスを作った場合などを登録する際に使用するなど、一般的に利用するコマンドです。

2-1. コマンドプロンプトを管理者で実行
スタートメニューからコマンドプロンプトを管理者で実行します。管理者で実行する方法は、「コマンドプロンプト」のアイコンにマウスカーソルを合わせて右クリックで表示されるコンテキストメニューから「管理者として実行」を選択します。

2-2. installutil.exeを実行
下記コマンドのように、.NETの32bit版のインストールコマンドを実行します。指定するファイルは、Azure Management Tools CmdLets をインストールする際に作成されたDLLです。

%WINDIR%\Microsoft.NET\Framework\v2.0.50727\installutil.exe -i C:\AzureServiceManagementCmdlets\code\AzureManagementTools.Cmdlets\bin\Debug\Microsoft.Samples.AzureManagementTools.PowerShell.dll

2-3. インストール確認
前回ブログで紹介したプログラムで確認することもできますが、Windows PowerShell(x86)を実行してインストールの確認を行うことができます。

Windows PowerShell(x86)
%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe

C#のアプリケーションからPowerShell用Azure Service Management Tools CommandLets を使う

前回はAzure SDK 1.3 に PowerShellのAzure Service Management Tools CommandLets をインストールする方法を紹介しましたが、今回はインストールされたCommandLets を使用してC#のアプリケーションからAzureを操作してみます。

と、その前にPowerShellのAzure Service Management Tools CommandLetsのインストーラにはもう一つ罠があり、64bit環境で通常のインストールのままでは、今回紹介する方法は動作しません。64bit環境でも動作させる場合はAzure Service Management Tools CommandLetsのインストーラを少しいじる必要がありますので、その方法は次回紹介します。ですので、今回は32bit環境のWindowsで使用する方法の紹介となります。

PowerShellのAzure Service Management Tools CommandLets 単体の利用方法は、下記のサイトを確認していただければよいと思います。このサイトに紹介されている方法を使ってC#のアプリケーションから操作しますので、これらのサンプルコードは重要です。

http://www.microsoft.com/japan/powerpro/TF/column/st2_01_1.mspx
http://code.msdn.microsoft.com/azurecmdlets/Wiki/View.aspx?title=Sample%20Scripts&referringTitle=Home

では、さっそく方法を紹介します。

1.Visual Studioでプロジェクトを作成
.NET Frameworkを使用するプロジェクトを選択します。コンソールアプリケーションでもWPFでも構いません。

2. System.Management.Automation.dllを参照設定
ソリューションエクスプローラの参照から、System.Management.Automation.dllを参照します。インストールしてある場所は下記の場所です。(64bitな方は、次回紹介します。)

C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll

3.PowerShellを利用するコードを書く
参照したAutomationクラスを使用してPowerShellこのコマンドを実行します。ここで紹介するようにPowerShellクラスを作ると便利です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;
using System.Collections.ObjectModel;
using System.Threading;

namespace AzureCommandlets
{
    public class PowershellEventArgs : EventArgs
    {
        public Collection<psobject> CommandResults;
    }

    public delegate void PowershellEventHandler(object sender, PowershellEventArgs e);

    public class Powershell
    {
        public event PowershellEventHandler RunCommandCompleted;

        public void RunAsync(string command)
        {
            List<string> commands = new List<string>();
            commands.Add(command);
            ThreadPool.QueueUserWorkItem((unused) => RunComands(commands));
        }

        public void RunAsync(List<string> commands)
        {
            ThreadPool.QueueUserWorkItem((unused) => RunComands(commands));
        }

        public void RunComands(List<string> commands)
        {
            PowershellEventArgs e = new PowershellEventArgs();

            // Prepares azure management tool commandlets.
            RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
            PSSnapInException snapInException = null;
            PSSnapInInfo info = rsConfig.AddPSSnapIn("AzureManagementToolsSnapIn", out snapInException);
            Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
            myRunSpace.Open();

            // Runs commands.
            Pipeline pipeLine;
            pipeLine = myRunSpace.CreatePipeline();
            foreach (string command in commands)
            {
                pipeLine.Commands.Add(new Command(command, true));
            }
            e.CommandResults = pipeLine.Invoke();

            RunCommandCompleted(this, e);
            myRunSpace.Close();
        }
    }
}

インストールされた証明書を表示する場合は下記のように書きます。

static void Main(string[] args)
{
   Powershell ps = new Powershell();
   ps.RunCommandCompleted += new PowershellEventHandler(ps_RunCommandCompleted);
   ps.RunAsync("Get-Item cert:\\CurrentUser\\My\\*");
   Console.ReadLine();
}

static void ps_RunCommandCompleted(object sender, PowershellEventArgs e)
{
   var keys = from c in e.CommandResults
               where (from p in c.Properties
                      where "HasPrivateKey".Equals(p.Name) && true.Equals(p.Value)
                      select p).Any()
               select c;
    foreach (var key in keys)
    {
        Console.WriteLine(string.Format("Subject:{0} Thumbprint:{1}",
               key.Properties["Subject"].Value.ToString(),
               key.Properties["Thumbprint"].Value.ToString()));
    }
}

Hosted Serviceの情報を表示する場合は下記のように書きます。もし、パイプラインを使う場合は一行で書いてください。

static void Main(string[] args)
{
    Powershell ps = new Powershell();
    ps.RunCommandCompleted += new PowershellEventHandler(ps_RunCommandCompleted);
    List<string> commands = new List<string>();
    commands.Add(@"$cert=Get-Item cert:\CurrentUser\My\XXXXXXXXXXXXXXXXXXXXXXXX");
    commands.Add("$sub=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"");
    commands.Add("$servicename=\"xxxxxxxxx\"");
    commands.Add("Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub");
    ps.RunAsync(commands);
    Console.ReadLine();
}

static void ps_RunCommandCompleted(object sender, PowershellEventArgs e)
{
    foreach (var cmdlet in e.CommandResults)
    {
        foreach (var propInfo in cmdlet.Properties)
        {
            string value = string.Empty;
            try
            {
                if (propInfo != null && propInfo.Value != null)
                {
                    value = propInfo.Value.ToString();
                }
            }
            catch
            {
            }
            Console.WriteLine(propInfo.Name + ":" + value);
        }
    }
}

PowerShellのAzure Service Management Tools CommandLets を使わない方法として、C#のみでアプリケーションを完成させる場合、WebのAPIを直接触るか、Azure Service Management Tools CommandLetsやMMCに含まれている、Microsoft.Samples.WindowsAzure.ServiceManagementのプロジェクトを自分のアプリケーションから利用する方法がありますが、圧倒的にサンプルコード数が多いPowerShellのCommandLetsを使用した方が効率良いのではないでしょうか。

1/09/2011

Azure SDK 1.3 の環境で PowerShell の AzureManagementTools CmdLets をインストールする方法

Azure SDK 1.3 がリリースされた影響で、 PowerShellのAzure Management Tools Cmdlets がインストールできないなど色々と問題が出ています。
Azure SDK 1.2 の頃から利用している人は、Azure SDK 1.3 でアップグレードインストールした段階で、.NETのアセンブリリダイレクトを設定すればよいのですが、全く新しい環境に Azure Management Tools Cmdlets をインストールする場合は、インストール時にビルドエラーが発生してインストールに失敗してしまします。

Azure SDK 1.3 に対応させるアセンブリリダイレクトの設定について
http://sqlazure.jp/b/?p=368

ここでは、Azure SDK 1.3 しかインストールされていない状態で、Azure Management Tools Cmdlets をインストールする方法を紹介します。この方法で新しい環境に Azure Management Tools Cmdlets をインストールすることが可能になります。

Azure Management Tools Cmdletsの使用するインストールファイルは、以下の AzureServiceManagementCmdlets.Setup.20100226 になります。(Azure SDK 1.3 に対応しているものが出た場合は、この作業を行わなくてもよいでしょう)

Azure Management Tools Cmdlets
http://code.msdn.microsoft.com/azurecmdlets

では、インストールしてみましょう。

1.プロジェクトファイルの書き換え
ダウンロードした AzureServiceManagementCmdlets.Setup.20100226.exe を実行すると、 C:\AzureServiceManagementCmdlets フォルダにファイルが展開されます。このフォルダ内の startHere.cmd を実行してインストールを行うわけですが、実行する前に以下のファイルをメモ帳などで編集します。

C:\AzureServiceManagementCmdlets\code\AzureManagementTools.Cmdlets\AzureManagementTools.Cmdlets.csproj

編集場所はXMLで記述されている Projectエレメント内、ItemGroupエレメント内、Reference エレメントです。このReferenceエレメントのInclude アトリビュートに Microsoft.WindowsAzure.StorageClient が含まれる物を探してVersionを1.0.0.0から1.1.0.0に変更します。

以下の一行の変更するだけです。

<reference Include="Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

変更後の AzureManagementTools.Cmdlets.csproj は以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{CD5AA507-F5EF-473D-855B-84B91A1ABE54}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Microsoft.Samples.AzureManagementTools.PowerShell</RootNamespace>
    <AssemblyName>Microsoft.Samples.AzureManagementTools.PowerShell</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
    <OutputPath>bin\x64\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
    <Reference Include="Microsoft.WindowsAzure.StorageClient, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Configuration.Install" />
    <Reference Include="System.Core">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\..\..\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.Serialization">
      <RequiredTargetFramework>3.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.ServiceModel">
      <RequiredTargetFramework>3.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.ServiceModel.Web">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Xml.Linq">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data.DataSetExtensions">
      <RequiredTargetFramework>3.5</RequiredTargetFramework>
    </Reference>
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="AffinityGroups\GetAffinityGroup.cs" />
    <Compile Include="AffinityGroups\GetAffinityGroups.cs" />
    <Compile Include="AzureManagementToolsSnapIn.cs">
      <SubType>Component</SubType>
    </Compile>
    <Compile Include="Certificates\AddCertificate.cs" />
    <Compile Include="Certificates\RemoveCertificate.cs" />
    <Compile Include="Certificates\GetCertificate.cs" />
    <Compile Include="Certificates\GetCertificates.cs" />
    <Compile Include="CmdletBase.cs" />
    <Compile Include="ConfigurationConstants.cs" />
    <Compile Include="Diagnostics\GetActiveTransfers.cs" />
    <Compile Include="Diagnostics\GetCommonConfigurationLogs.cs" />
    <Compile Include="Diagnostics\SetCommonConfigurationLogs.cs" />
    <Compile Include="Diagnostics\StopActiveTransfer.cs" />
    <Compile Include="Diagnostics\GetDiagnosticConfiguration.cs" />
    <Compile Include="Diagnostics\SetPerformanceCounter.cs" />
    <Compile Include="Diagnostics\SetWindowsEventLog.cs" />
    <Compile Include="Diagnostics\SetInfrastructureLog.cs" />
    <Compile Include="Diagnostics\SetFileBasedLog.cs" />
    <Compile Include="Diagnostics\InstrumentationCmdletBase.cs" />
    <Compile Include="Diagnostics\SetWindowsAzureLog.cs" />
    <Compile Include="Diagnostics\GetDiagnosticAwareRoleInstances.cs" />
    <Compile Include="Diagnostics\DiagnosticsCmdletBase.cs" />
    <Compile Include="Diagnostics\GetDiagnosticAwareRoles.cs" />
    <Compile Include="Diagnostics\StartOnDemandTransfer.cs" />
    <Compile Include="Helpers\AzureBlob.cs" />
    <Compile Include="Helpers\CmdletExtensions.cs" />
    <Compile Include="HostedServices\GetHostedService.cs" />
    <Compile Include="Model\CertificateConfiguration.cs" />
    <Compile Include="Model\CertificateContext.cs" />
    <Compile Include="Model\DeploymentInfoContext.cs" />
    <Compile Include="GlobalSuppressions.cs" />
    <Compile Include="Helpers\Utility.cs" />
    <Compile Include="HostedServices\NewDeployment.cs" />
    <Compile Include="HostedServices\RemoveDeployment.cs" />
    <Compile Include="HostedServices\GetDeployment.cs" />
    <Compile Include="HostedServices\GetHostedProperties.cs" />
    <Compile Include="HostedServices\GetHostedServices.cs" />
    <Compile Include="Common\GetOperationStatus.cs" />
    <Compile Include="HostedServices\MoveDeployment.cs" />
    <Compile Include="HostedServices\SetDeploymentConfiguration.cs" />
    <Compile Include="HostedServices\SetDeploymentStatus.cs" />
    <Compile Include="HostedServices\SetDeployment.cs" />
    <Compile Include="HostedServices\SetWalkUpgradeDomain.cs" />
    <Compile Include="Model\ManagementOperationContext.cs" />
    <Compile Include="Model\HostedServiceContext.cs" />
    <Compile Include="Model\RoleConfiguration.cs" />
    <Compile Include="Model\RoleInstance.cs" />
    <Compile Include="StorageServices\GetStorageKeys.cs" />
    <Compile Include="StorageServices\GetStorageProperties.cs" />
    <Compile Include="StorageServices\GetStorageServices.cs" />
    <Compile Include="StorageServices\NewStorageKey.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="Model\ClassDiagram.cd" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="Microsoft.Samples.AzureManagementTools.PowerShell.dll-Help.xml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Microsoft.Samples.WindowsAzure.ServiceManagement\Microsoft.Samples.WindowsAzure.ServiceManagement.csproj">
      <Project>{A3BB648E-9C6D-4251-B0E1-6E05024AB71E}</Project>
      <Name>Microsoft.Samples.WindowsAzure.ServiceManagement</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

2. startHere.cmdの実行
startHere.cmdを実行してインストールします。

3. AzureServiceManagementCmdletsの確認
PowerShellを実行して下記のコマンドを実行します。
PS C:\Users\kentaro> Add-PSSnapin AzureManagementToolsSnapIn
PS C:\Users\kentaro> Get-Command -PSSnapIn AzureManagementToolsSnapIn

下記のような結果が返ってくればAzureServiceManagementCmdletsがインストールされていることが確認できます。


次は、C#から、AzureServiceManagementCmdlets を操作する方法を紹介できればと思います。