パワーアップした Windows Azure Powershell ~ クラウドカバー Episode 77
今回のクラウドカバー「Episode 77 - Windows Azure Powershell Updates」では、Windows Azure のエバンジェリスト Michael Washam を迎え、パワーアップした Windows Azure PowerShell Cmdlets を紹介します。
※ Windows Azure PowerShell Comdlets は 2012年1月に version 2.2 をリリースしており、3月に version 2.2.2 をリリースしています。今回取り上げるのは version 2.2.2 です。
まずは、ニュースから。
◆ Announcing Windows Azure Media Services
Windows Azure の新しい機能である、”Media Service” がプレビュー公開されました。
Media Services は、メディア情報を保存し、エンコーディングやフォーマット変換を行ったうえで、Windows や XBox、あるいは MacOS や iOS、Android に配信を行う、クラウド上のサービスです。
またコンテンツ保護の機能を備えており、オンデマンドでの配信およびライブストリーミングでの配信が可能です。
◆ Announcing Windows Azure Accelerator for Startups
次のニュースは、スタートアップ支援のプログラム、Windows Azure Accelerator の紹介。おそらく正式名称は、「Microsoft Accelerator for Windows Azure」で、The Microsoft® Accelerator for Windows Azure, powered by TechStars のサイトが参考になるかと。
このプログラム、Windows Azure を使ったサービス開発のコンテストで、選ばれた10社は、8月から11月までの3か月間を米国シアトルで TechStars 社の支援を受けつつサービス開発を行うというもの。この中には、2万ドルの投資と、メンターによるアドバイスが含まれており、また Windows Azure に関しても 6万ドル分のクレジットを受け取ることができるそうです。
応募要件的には米国に限った感じではない(投資を受けるのが前提なので、米国法人を設立することにはなりそうですが)ようですので、温めてきたビジネスアイディアで世界に向けて飛び出すぜ!、という方はぜひ応募してみてください!
なお、日本においても BizSpark Plus として BizSpark Plus Partner に加入するインキュベーター、VC からの推薦を受けた企業に、6万ドル分のクレジット提供を行うプログラムを実施していますので、日本のパートナーと温めたい、という方はぜひ BizSpark Plus Partner の企業にコンタクトしてみてください。
という事で、本題の PowerShell なお話し。
最初に表示される Michael の Windows 8 のスタートメニューですが、エンジニアっぽいタイルが整列しており、親しみを感じますね :-)
この後、Michael は “PowerGUI” を使用してデモを行います。
また、この環境には、あらかじめ Windows Azure PowerShell Cmdlets が インストールされています。
さて、Michael が最初に行っているのは、”Add-PSSnapin” もしくは “Import-Module” による Windows Azure PowerShell Cmdlet の読み込み。
そして次に行おうとしているのが Windows Azure のサブスクリプション情報の登録(Subscription ID と Windows Azure の管理ポータルにアップロード済みの証明書データの指定)です。
ここまでの作業で、以下のようなコマンドが出来上がります。
さて、このサブスクリプションデータの設定(Set-Subscription)ですが、 PowerShell スクリプト毎に入力するのは面倒だよね、ということで、最新の version 2.2.2 では Set-Subscription によって設定した値が永続化されるようになりました。
これにより毎回サブスクリプションの設定を行う手間が省けるとともに、サブスクリプションの設定を一元管理できるようになるので管理面でもメリットがあるかと思います。
なお、個人的にはこの設定において、証明書のパス(特に THUMBPRINTの値)の設定にてこずりました。
最終的に設定のために利用したのが以下のコマンド。
PS> Get-ChildItem cert:\currentuser\my
このコマンドで、指定した証明ストアのパスの下に格納されている証明書の THUMBPRINT の値が UpperCase(大文字)で一覧されますので、これをコピペいただくのが間違いが少なくってよいかと。
さて、永続化されたサブスクリプションのデータは、Get-Subscription で確認することができます。
また、サブスクリプションを選択することで(Select-Subscription)、そのサブスクリプションに関する情報にアクセスできるようになります。
例えば、以下はサブスクリプションを選択したのち、HostedService の情報を取得しています。
同様に、Get-Deployment のコマンドによって、ホステッドサービスに含まれるデプロイメントの情報を確認できます。改めて整理ですが、「ホステッドサービス」は、名前空間で分離される概念であり(someservices.cloudapp.net)、「デプロイメント」は、個々のホステッドサービスの中にある「Production」もしくは「Staging」環境のことです。
以下は、ホステッドサービス woodgroovedbg 配下にある Production スロットのデプロイメント情報です。実際にデプロイされているロールインスタンスの情報やコンフィギュレーションを確認することができます。
また、Set-RoleInstanceCount によって、稼動中のサービスのインスタンス数を変更することが可能です。
以下は、Set-RoleInstanceCount コマンドの実行で、ホステッドサービス woodgroovedbg 配下にある Production スロットの、MortageRatesWebProject のロールインスタンスが2に増えている途中の画面ショットです( “Waiting for host…” というのが、いま新規に立ち上がりつつある新しいインスタンス)。
さて、お次はヘルパークラスを使った診断(Diagnostic:ダイアグノスティック)機能の紹介。
ここで Michael は華麗にスニペットの挿入&登録済み function の呼び出し(GetDiagRoles と PrintDiagnosticSettings の呼び出し)を行っているのですが、これは Michael のスニペット環境ですので、Windows Azure Powershell Cmdlet をインストールいただいても、呼び出すことはできません。
この部分のコード(スクリプト)に関しては、Michael の「Print Current Windows Azure Diagnostic Settings」を参照してください。
以下は PowerShell の実行により表示された Diagnostic の設定情報。
その次は、診断ログへの Performance Counter の設定追加。
下記のような設定を行ったうえで、先ほどの診断情報の設定出力を再び行うと、Performance Counter の設定が追加されていることがわかります。
このような診断情報の設定に関しては、インスタンスの再起動や再デプロイなしに実施することが可能なため、デプロイ時に診断オプションを有効にしてデプロイしておけば、問題が起こった際には PowerShell で診断情報にアクセスし、情報が不足していれば追加でのカウンター設定など行う、といった運用が可能になっています。
さて、次のデモでは、SQL Azure において新規のデータベースサーバーを作成し、また Firewall の設定変更を行っています。
今回は、-UseIpAddressDetection オプションにより、Michael のローカル環境からのアクセスで使用されている IP アドレスを許可するための Firewall ルールが追加されます。
実行後、管理ポータルから SQL Azure の情報を確認すると、サーバーの作成と Firewall の作成が確認できました。
そして、最後のデモは、Traffic Manager の設定。
Traffic Manager は DNS 関連のサービスで、2つ以上のホステッドサービスを一つの名称でアクセスできるようにするサービスです。たとえば、北米と欧州のデータセンターにホステッドサービスをデプロイしておき、ユーザーのリクエストをよりユーザーに近いデータセンターに送る、といったことが可能です。
ということで、デプロイするパッケージの設定、使用するデータセンターや作成するホステッドサービスの名称定義、ホステッドサービスの作成、と黙々とスクリプトが続きます。
そしていざ実行!、なのですが、残念ながらデモで使っているPCに証明書を用意するのを忘れていたため、失敗。。。。
なお、この Traffice Manager のスクリプトに関しては、「Automated Global Deployments with Traffic Manager and PowerShell」を参照してください。
さて、非常にパワフルな PowerShell Cmdlet ですが、開発の現場での使用法としては、Countinuous Integration における自動デプロイに使用したり、稼動中サービスのモニタリング、あるいは開発したサービスのセットアップを自動化する、などのシナリオが考えられます。
また PowerShell Cmdlet 今後の更新にもご期待ください。
最後は恒例の Tip of the Week!
今回は Wade の Blog「Return Empty Set Instead of ResourceNotFound from Table Storage」から Table Storage 使用における Tip。
Table Storage に対するデータの問い合わせを行った際に、データが存在しない場合、デフォルトでは DataServiceContext が例外を投げるようになっています(そして HTTP 404 エラーになります)。
しかし、サービスによっては、「データがない」ことを例外として扱うのではなく、そのまま処理を継続したい場合もあります。
このような場合には、以下のような設定を行っておこう、というのが今回の Tip です。
context.IgnoreResourceNotFoundException = true;
ということで、今回は Windows Azure PowerShell Cmdlet の紹介でした。
それでは!