2011 MVP Open Day Japan に参加しました

MVPがあつまる祭典、Open Dayと呼ばれるものに参加してきました。

以下適当に箇条書きで。

大阪 → 東京への移動

  • 遠目でみて、あれ?さおさん以外の女性の人いたかな? →  つもりんでした/(^o^)\
  • 世間一般からみて3列シートx2向い合せで全員PC起動は異様なようす
  • お風呂ついったーをその場で更新するおいら
  • ものすごく凝視+話しかけられるもさおさんとSharePointIssueのコミュ力で乗り切る
    • 途中で噴出してすみません
  • 車掌さんも戸惑う魔空間
  • さすがにHUBは出さずにすんだ
  • トイレいきたい
  • mvc Confの時の昼飯が出てこないトラウマに怯えるしばやん

KeyNote

  • 名札ネタ仕込みがやや受け(
    image
  • MVPなんだから翻訳いらんだろ的に爆走するNestor
  • 佐々木順子さんのファンになりました
  • いつも通り仕込みが完璧な北兄者
  • 後ろから(;´Д`)ハァハァ聞こえてきて恐怖を覚える
  • 後ろからもろこしの匂い
  • 丸山先生とご挨拶ができましたヽ(゚∀゚)ノ
  • 素で時間間違えて遅刻する @k1hash さん
  • 何故かホテルの部屋番号バレテル/(^o^)\安眠の危機

Attendee Party

  • 名札ネタのおかげで受け付けの人が困惑する
    • 名札の名前が検索キーだったんですね…
    • こんな名前で申し訳ございません(まじで言った
  • いろいろな方とご挨拶できました!
  • 知らないところで同僚にへんたいとして紹介されてたことを知るヽ(`Д´)ノ
  • クラウディアさん名刺をごっそり(?)持って帰るおいら
  • 襲われかけた((((;゚Д゚))))ガクガクブルブル
  • 北兄者がマクロスFを見だす
  • @ufcpp さんに名札を弄られる

2次会

  • まったりと3人で静かなところで飲む
  • 電話かかってきたけど、普通に取れなかった(だってあいぽんなんだもん
  • 社内ニートでソウルジェムがにごr
  • マジメに非同期やらについていろいろ教えてもらう
  • 初学者と上級者の間は如何にこえるか的な
  • びっくりするぐらいマジメでしたよ?
  • 隣の部屋の会話が怖い

深夜

  • 一応、リダイアルしてみる
    • はるたま氏がでる → 電話の声と部屋の外の声が…((((;゚Д゚))))ガクガクブルブル
    • 北兄者からお菓子のお土産をもらう。
  • はるたま氏とビール処分
  • 大人の会話
  • お土産もぐもぐ → おいしかったです!

2日目

  • 朝食はなんとなくエグゼクティブな雰囲気で
  • いつものSGT31Fへ
  • 言いたいことは取りあえず言ってみる
  • 北兄者の家庭の事情を強制的に見せられる
    • しょうがないからTweetする
    • \(^o^)/オワタ → 自業自得です!
  • MVP弁当おいしいです!おなかいっぱい
  • 時間を見てなかったと思われるシアトルの人

終了後

  • とりあえずまったりとお茶
  • でもいい加減眠いのでダラダラと解散
  • しばやんと新幹線で移動
    • 即寝落ち → あいぽん落とす\(^o^)/
  • 新大阪でしばやんと晩御飯
  • おうちにかえるまでがOpen Dayです!

来年も参加できたら嬉しいなぁ
もし参加できたら、名札はもう少し考えようと思いました。

2011 fall Openness

さかのぼること1か月弱、2011 fall Opennessというイベントがあったのでござるが、何からどう書いたものやら。書いていいのやら。

このイベントの趣旨は一言でいうと「世界最強の”Azure Openness”チームの結成」(原文ママ)なわけであります。

具体的には、オープンソースなアプリケーションやサービスをWindows Azureで開発・運用しようぜ!ノウハウ共有しようぜ!
でもってちゃんとビジネスとしても対応可能なOSS on Azureなアジュらーを育成しようぜ!という目的のために集まった仮想チームの決起集会&勉強会でした!

わお!もしかしてそんな活動、世界初!?(って言ってみた

普段からAzureな話題に触れてて、多少視野が広ければAzureでも(もっと言えばWindowsでも)PHPやRuby、Javaでもなんでも大体のOSSは動くじゃない、って分かっていただけるかと思いますが、やっぱりWindowsな世界の外から見るとそんな風には見えないみたいですね。
そのへんある程度動くだろうなーと思われないとそもそも選択肢にすらなりゃしない。これはもったいない!

ここが大事なポイントですが、普通にRubyもPHPも動くんです!そうじゃなくてもバイナリさえあればだいたい動くんです!動かすためのコツはそりゃーありますけどね!だからそのコツを共有したり、使ってみて嵌りそうなところ回避したり、フィードバックしてもっとAzureいいものにしようぜ!未来のブルーオーシャンは俺たちのものだ!Cool Japan!ってのがAzure Opennessなわけです。(ちょっと誇張気味)

Windowsって、Azureって、意外とできる子なんですよ!認知すらされてなかったり10年以上前のイメージで語られたりするけど!
そういうのってもったいないなーとか思うわけで。目的に応じて取捨選択すればいいだけなので、できるだけ選択肢は広げておきましょう的な。

で、ビジネス的な要因もあるでしょうけど、ほらそのあたりはOSSやDeveloperを大事に考えるMSだから。まじめに使ってもらえることを考えてると思うのですよ。ここ1年ぐらいのOSSへの力の入れよう見ればそのあたりわかるかなと思います。

あとこれは副産物ですが、Azure Opennessをやったことで新しいアイデアも出たし、フィードバックできそうな内容も新しい知見も得られたり。面白い取り組みも何個か走りそうな感じですよ~!こうご期待!?

とまぁ業界の端っこに存在するBlogで言ってもあまり説得力ありませんが…興味がある人はどんどん試して、Twitterで(#azurejp や #jazug ハッシュタグ付けて)発言したりするといいと思います!
最近だとInstallManixが対Azureな感じになってるので、たくさんのOSSが動いてる&ドキュメントがそろってると思います。
そういうのに参加したり、参加してる人に絡んだりするといいんじゃないでしょうか!

取り留めがありませんが(取り留める気もあまりなかったけど)、こんな感じの超レアで熱いイベントでしたー!いじょー

In-place UpdateがUpdateされました

唐突なアナウンスですがWindows AzureのIn-place Update機能が更新されたようです。まぁWindows Azure側の話なので、こちらで何か修正等があるわけではありませんし、既に展開されてるのでみんな恩恵にあずかれます。

元ネタ:Announcing Improved In-place Updates 、 Overview of Updating a Windows Azure Service

変更内容ですが、簡単にいうと以下のケースにおいて今までIn-place Updateが出来なかったのですが、それができるようになりました
( ゚Д゚ノノ"☆パチパチパチパチ

  • 仮想マシンのサイズ変更(スケールアップ/スケールダウン) ※たとえばSサイズからLサイズ、SサイズからXSとか
  • ローカルストレージの増加
  • デプロイされてるロールの追加・削除
  • エンドポイントの数や種類の変更

今まで再デプロイとかVIPスワップで対応しないと行けなかったのがIn-place Updateでもいけるのは嬉しいですね!

※ちなみにIn-place UpgradeなのかIn-place Updateなのかははっきりしてほしいですがw(管理ポータルとか見る限りUpgradeだとは思いますけど元ネタのBlogに合わせてます。どっちでもいいんじゃないですかね)

変更できる項目が元ネタのところにまとまってるのでそのまま持ってこようと思います。

変更内容 In-place Update VIP Swap 再デプロイ
Guest OSのバージョン OK OK OK
.NET Trustレベル OK OK OK
仮想マシンのサイズ OK
注意:仮想マシンのサイズを変更するとローカルデータが破棄されます。
Management APIを使用してこの変更を行う場合は強制フラグが必要です
メモ:Azure SDK 1.5以上が必要
OK OK
ローカルストレージの設定 OK(ただし増加のみ)
メモ:Azure SDK 1.5以上が必要
OK OK
ロールの追加または削除 OK OK OK
特定ロールのインスタンス数 OK OK OK
サービスエンドポイントの数や種類の変更 OK
メモ:Azure SDK 1.5以上が必要
エンドポイントが更新されるので、一時的に可用性が損なわれる(接続できなくなる瞬間がある)
NG OK
ConfigurationSettingsの名前と値 OK OK OK
ConfigurationSettingsの値 OK OK OK
証明書の追加 OK OK OK
既存の証明書の変更 OK OK OK
新しいコードのデプロイ OK OK OK

再デプロイは基本的にまっさらな状態でデプロイになるので、まぁこの辺の制約はないわけで。
VIP SwapもIPアドレス付け替えと考えると、サービスエンドポイントが変わらなければOK(つまりそこだけNG)なので納得ですね。

In-place Updateで仮想マシン(インスタンス)のサイズやロール数を変更する場合は、アップグレードダイアログの「VMサイズまたはロール数の更新を許可する」にチェックを付けましょう。付けずに更新しようとするとエラーになります。(Management APIでやる場合も同様に強制フラグをOnにして実行しましょう)

さて他にも幾つか追加された機能がありまして。

In-place Updateをキャンセル/ロールバックなど細かくコントロールすることができます。
アップグレードモードが自動の場合はこれらはよしなにしてくれますが、マニュアルモードの場合、管理ポータルやManagement APIを使って細かく制御できます。

このへん詳しく載っていますので参照ください↓

 

まとめ

ということで、アップグレード手法をまとめるとこんな感じですかね(コピペですけど)

更新方法 説明 メリット デメリット
In-place 新しいパッケージを今稼働してるインスタンスやサービス上に適用する方法 1つのデプロイで済む
各ロールで2インスタンス以上あれば可用性を維持したまま更新できる
更新してる間、更新対象のロールはダウンするのでサービス提供能力が落ちます。
全インスタンスが更新されるまでの間、新旧2つのバージョンのサービスコードが稼働するので動作に差がでてしまいます
VIP Swap 新しいパッケージを別の領域(ステージング)に展開し、IPアドレスを付け替える方法(サービスをスワップする) サービスダウンタイムや提供機能のロスが無い 少なくとも2つデプロイ(プロビジョニングとステージング)が実行されてる必要がある(スワップするのに必要)
再デプロイ 稼働してるサービスを削除して新しいパッケージをデプロイする方法 1つのデプロイで済む サービス削除するので、提供していたサービスはダウンする。デプロイが変わるとIPアドレスも変わるので、DNSの伝達に時間がかかるケースもある

CSEncrypt コマンドでパスワードの暗号化

Windows Azure SDK 1.5でリモートデスクトップ接続時に使用するパスワードやらを暗号化するのに使える、CSEncryptコマンドラインツールが追加されました。

Azure SDK 1.5が出る以前はどうだったかというと…

にある通り、パスワード文字列をバイト配列にして証明書読み込んで読み込んだ証明書を使って暗号化して、できあがったものをBase64でエンコードするという超絶めんどい作業をする必要がありました。

[Reflection.Assembly]::LoadWithPartialName("System.Security")
$pass = [Text.Encoding]::UTF8.GetBytes("<Password>")
$content = new-object Security.Cryptography.Pkcs.ContentInfo ?argumentList (,$pass)
$env = new-object Security.Cryptography.Pkcs.EnvelopedCms $content
$env.Encrypt((new-object System.Security.Cryptography.Pkcs.CmsRecipient(gi cert:\CurrentUser\My\<Thumbprint>)))
[Convert]::ToBase64String($env.Encode())

こんな感じですね。

さてこれがAzure SDK 1.5に付属するCSEncryptコマンドだとどうなるかというと。

csencrypt Get-PasswordEncryptionCertificate
コマンドを実行して証明書一覧を表示して拇印をコピーして…

csencrypt Encrypt-Password -CopyToClipboard -Thumbprint "<さっきの拇印>"
コマンドを実行してパスワードを入力するだけ!

あとは出力された文字列を(改行除いて)コピーすればOK!ほら簡単でしょ?(

ちなみに -CopyToClipboard オプションを付けておけば勝手に結果をクリップボードにコピーしてくれます。
※Outputオプションでファイルに出力することもできます。(やっぱり改行はされてますけど)
そのほかにもNew-PasswordEncryptionCertificateオプションで証明書の生成もできるのでお手軽ですね。

ちなみにパスワードを書いたテキストファイルを標準入力として読み込ませれば手打ちしなくてもイイです。

オプションや内容についてはこちらを参照。

というわけでコマンドでやるにも便利な感じになりましたとさ。

Windows Developer Preview をVHDブートさせる

Windows Developer PreviewをVHDブートさせる方法はいろいろありますが、基となるVHDをWindows Server 2008 R2のHyper-V 2.0とかで作ってしまうとそのままじゃブートしません。

※ブートメニューでWindows Developer Previewを選ぶと 0xC0000248 な署名が検証できない云々で⊂ミ⊃^ω^)アウアウ

解決方法は一応ありますが自己責任で、ということで載せておきます。
簡単にいうと、ブートローダ(Winload)がWindows 7のままだとエラーになるわけで、Windows Developer Previewのブートローダ(Winload)になるように修復してあげればいいだけです。

  1. Hyper-V 2.0上でWindows Developer Previewをインストール(※ディスクサイズはVHDファイルを置くWindows 7等の空きディスク容量より少なくなるようにしましょう)
  2. VHDファイルをコピーして Windows OSをVHDブートさせる2つの方法 (@IT) あたりを参考にBCDを弄ります(このままだと上記のエラーになる)
  3. Visual BCD Editor for Windows 7/Vista をダウンロードしてインストールします
  4. ディスクの管理でコピーしたVHDをマウントします
  5. Visual BCD Editorを立ち上げ、「Repair」-「Repair BCD」メニューを選択します
    image
  6. Bcd DriveはSystemのままでWin7Folderを先ほどマウントしたVHDのWindowsフォルダ(Windows Developer PreviewのWindowsフォルダ)を選択して修復します。

以上でブートローダがWindows Developer PreviewのものにかわってちゃんとVHDブートできるようになると思います。

WP_000003

まーWindows Developer PreviewのISOをブートできたらこんなことせずに修復できると思うのですが手元にそういったものはなかったのでこんな方法になりました。

Windows AzureはAutoScaleの夢を見るか?

ちょっと前の話題ではありますが、Microsoft patterns & practicesが提供するEnterprise Library 5.0にWindows Azure Integration Packが追加されています。(現状はPreview版のようですが)

Integration PackとしてはWindows AzureのほかにもSilverlightなどがありますね。

さてこのWindows Azure Integration Packとやらは何ができるんでしょう?

EntLib vNext teaser や Using Enterprise Library 5.0 in Windows Azure(PDF) を見るとEnterprise Libraryで提供されているロギングや暗号化、データアクセス、コンフィグレーションなどのアプリケーションブロックがAzure上でも利用できるようになっているようです。

でEnterprise Libraryなので簡単なコンフィグレーションで環境の差異が吸収できるようになってたりするっぽいですね。なのでこのIntegration Packを使うとOnPremiseからAzureへ、AzureからOnPremiseへの移行とかがしやすくなりそうです。(というかその辺が目的でしょうか)

で、それはそれでいいとして。

目玉としてはWindows Azureに特化した部分としてWindows Azure Autoscaling Application Block(WASABi)が追加されたことです。

わお!素晴らしいですね!こいつを使うとCPU負荷などの利用状況や時間帯などルールを評価してアクション(つまりオートスケール等)ができるようです。

WASABi

まぁカスタムアクションやルールの定義も自由度高いので、そのあたりは柔軟にできそうですね。というかそのためのライブラリだし。

image

想定されるMaxとMinを指定してインスタンス数が予想外に増えないように・下がらないようにルール作ったり、スパイクに対応させたり。
判定材料はCPU負荷などいろいろ構成できますと。

ということでWindows Azureは公式標準機能ではありませんがオートスケールを手に入れたようです。まだPreviewなので、要望がある方は是非Voteってください。

実際に試したい方はNuGetにあがっているのでそちらからもどうぞ。

以下余談です。

このWASABiを使うと確かにオートスケールできそうです。でもWASABiを使ってるアプリケーションのみですよね。単発のLOBなアプリケーションとかならいいんでしょうけど、適用する場所、やり方、運用、ITのあり方なんかは別でちゃんと考えたほうがいいと思います。似たようなことはSystemCenterでもできるわけですし、なんでそっちでも出来るかとかは考える価値はあるかと思います。

まぁ釈迦に説法と思われますが。

あとオートスケールいうならゼロインスタンス機能くれよーーこればっかりはAzure側で対応してくれなきゃ無理!!

Windows Azure AppFabric ACS でカスタムのサインイン画面を作る

Windows Azure AppFabric ACS使ってフェデレーション認証するのはいいけど、味気ないサインイン画面で辟易してる方も多いんじゃないでしょうか。

↓味気ないサインイン画面

というわけで今日はこいつのカスタマイズをしたいと思います。

ゴールとして今回はASP.NET MVC3のログイン画面内で上記のサインイン画面(というかセレクタ画面)を埋め込んでアプリケーションでちゃんと(?)制御できるようにしたいと思います。

続きを読む →

Windows Azure SDK 1.5

というわけでWindows Azure SDK 1.5がでましたね。

さくっとインストールしてみましょう。(※Visual Studio “11”やWindows 8ではTools for Visual Studioがインストールできませんでした。Visual Studio 2010が入ってたら行けそうですけど .NET Framework 3.5と4が必要なところでこけそうです・・・)

インストールはWeb Platform Installerからするのが楽ちんなのでそのようにします。
※念のために古いSDKやTools for VSはアンインストールしました。

注意点:Storage EmulatorのDBが更新されるので、必要なデータいれてる人はバックアップしておきましょう。古いDB削除されます。

Azureで検索したら Azure AppFabric SDK 1.5とWindows Azure Tools for Microsoft Visual Studio 2010 – 2011年8月(リリース日が2011/09/14)の2つがでるので追加しましょう。

依存関係はこんな感じです。

日本語期待した人はサヨウナラ・・・

でインストールするとAzure SDK 1.5とAzure AppFabric SDK 1.5、Azure Tools for VSが入ります。
※ASP.NET MVC3 Tools Update Installerが入ってなかったようなので一緒にはいりました。

Visual Studioで見るとちゃんと更新されてますね。

さて、インストールが終わったらStorage Emulatorを起動して初期化しましょう。

更新後はDBこんな感じに。

DevelopmentStorageDb20110816 が今回使ってるDBです。以前のは消えてますので注意。

Compute Emulatorもちゃんと新しくなってます。

あとAzure SDK 1.5ではパスワード(文字列)の暗号化用ツールが追加されました。

今まで手動で証明書指定したり暗号化用のコマンド叩いたり超面倒だったのが一発で!!!(

以前のバージョンで作ったプロジェクトを移行する場合は Microsoft.WindowsAzure.StorageClient.dll を 1.1.0.0 に更新しましょう。

またWindows Azure Connectのプラグインで利用している以下の設定が無くなりましたのでコンフィグから削除する必要があるようです。

   <Setting name="Microsoft.WindowsAzure.Plugins.Connect.Diagnostics" value="" />
   <Setting name="Microsoft.WindowsAzure.Plugins.Connect.DNSServers" value="" />

元ネタ:Windows Azure SDK Release Notes (September 2011)

どう変わったか等細かいところはMSDNにドキュメントがありますが、おいおいということで。