CSEncryptで$が入力できなかったり

ふとWindows Azure SDK 1.5に付属するCSEncryptコマンドを使って暗号化されたパスワードな文字列を生成して、RDPのユーザーパスワードに設定して配置後、接続しようとするとどうも認証ではじかれる。

管理ポータルから再設定したらちゃんと入れるし、Visual Studioを使用してCSCFGファイル作れば問題なし=CSEncryptが何かおかしい。という状況に陥りました。

打ち間違いもなく、何ならコピペでやってるから絶対同じなのにおかしいなぁ~と思ってよくよく、ゆっくりと入力してみると…

あああ! $ が入力されなイイイイイイ!!

タイプしても、ペーストしてもスルー!!!/(^o^)\

というわけで原因はCSEncryptで(というかPowerShellで?)$が入力できない、ということでした。ちゃんちゃん。

 

いやいやいや、入力できないと困ります。

ということでどうするかといいますと。リダイレクトすればいいわけですねー。

こんなファイルを用意しまして、

という感じで標準入力にリダイレクトしてあげるといいようです。

ちなみにちゃんと$込で暗号化されてるのか不安ですよね。ちょっと復号してみてみましょう。

[Reflection.Assembly]::LoadWithPartialName("System.Security")
$source = "<Base64な暗号化された文字列>"
$thumbprint = "<証明書の拇印>"
$store = new-object System.Security.Cryptography.X509Certificates.X509Store My,CurrentUser
$store.Open("ReadOnly")
$cert = $store.Certificates.Find(0,$thumbprint,0)
$env = new-object Security.Cryptography.Pkcs.EnvelopedCms
$env.Decode([Convert]::FromBase64String($source))
$env.Decrypt($cert)
[Text.Encoding]::UTF8.GetString($env.ContentInfo.Content)

こんな感じのコマンドをPowerShell上で実行してあげると復号して元文字列を取り出せます。
結果は同じ、$もOKですね!

※ちなみに暗号化には公開鍵を、復号には秘密鍵を利用しているので暗号化する際に使用した秘密鍵付証明書が個人用証明書ストアに保存されてないとダメです。逆に言えば秘密鍵付証明書(とパスワード)があれば簡単に復号できちゃいますということで。

今日はこの挙動に悩まされた一日でした…とほほ。

Windows Azure によるアプリケーション開発基礎

マイクロソフトコンサルティングサービスの有償ワークショップ、「Visual Studio Workshop #451 Windows Azure によるアプリケーション開発基礎」の資料がなんと無償で入手できますよ!!

あのMCSの有償ワークショップの資料が無償だなんてうれしいですね!でも一応制約があって個人の勉強目的のみなので注意してくださいね。以下「とあるコンサルタントのつぶやき」より引用。

このマテリアルは、あくまで現場の開発者の皆様の、セルフトレーニング(勉強)用にご提供するものです。複製、転載、商用利用はご遠慮下さるよう、お願いいたします。(例:この内容を社内で製本して配布するとか、このマテリアルを使って社内向けトレーニングを実施するとか、設計書や社内資料、お客様向け資料に引用したりコピペするとかしてはいけません。)

内容については、私が独自に調査しているものを多分に含んでおります。技術情報に関しては誤りがないように全力で調査をしていますが、万が一、間違いがあった場合には、こちらの blog などで報告をしていきたいと思います。

Azure のアップデートなどによりこちらの情報が古くなる可能性もありますが、現時点ではマテリアルの更新について行う予定はありません。申し訳ありませんが、差分情報については各自で調査をお願いできればと思います。(基本はこれからもそんなに変わらないと思いますが。)

以下ざっくり見て気になったところとか。

  • p.18 Windows Azure Gatewayとか入ってて泣けますね
  • p.19 ACS(アクセスコントロール)は現時点で商用でv2です。キャッシング(Caching)も商用ですね。
  • p.58 課金は、ピークデータ量 (Current Size) に基づいて、日割りで課金、です。 FAQSQL Azure データベースの課金について を参照
  • p.398、p.419 Windows Azure SDK 1.5以上であればエンドポイント数がかわっても一応VIPSwap可能です InPlaceUpgradeはOKで、VIP SwapはSDK1.5でもNGでした。ので修正。 (参考:In-place UpdateがUpdateされました
  • p.542 machineKey上書きの問題はWindows Azure SDK 1.4以降で直ってたと思います。
  • p.545 開発環境かどうかはSMarxのBlogなども参照
  • p.560 VMロールはベータプログラムの参加申し込みしないと利用できません。※Visual Studio上でのVMロールに関する部分は参加時に送られるメールに記載されてる方法でレジストしないと表示されません。

最後のモジュールにあるStartupTaskのTipsや、随所に見られる苦労しただろうなぁ的なポイントを見ると感慨深いですね!
というか全般的にまとまってて勉強になると思います。
※ただクラウドコンピューティングやAzureそのものの概要的なところは少ないので、初見で見るにはつらいかも(あくまでVisual Studioを使うような開発者向けワークショップの資料ですし)

Windows AzureのCTPやらの利用許諾はどうなってるのか

Windows Azureで提供されるCTPやBeta機能のTerms of Use(利用規約)はどうなってるのか?よくわからなかったので中の人に聞いてみました。(2011年10月28日時点の内容です)

image

というわけで、 Windows Azure Platform の法的情報 に準ずるということで、つまるところSLAはないですが利用にあたって商用利用やら本番環境での利用は問題なさそうですね。

image

ベータやらCTPはSLAないよってのは このへん に書いてますと。
ドッグフードもぐもぐしてる方ならよくご存知かと思いますが、当然ながら互換性はないし機能がそのまま使えるかもわからない、サポートやバグ修正の基準もGA(General Availability)レベルじゃないので期待しないでねとのこと。

自己責任で面倒見れない場合はお勧めしませんということです。

image

ただし、今時点でベータ扱いのVM Roleだけは例外。SLAもあります。

あと分かりにくいですけど、SQL Azure Reportingみたいに、CTP利用時に個別にライセンスが表示されるやつはそちらに準拠すると思うので注意ください。

それから、Windows Azure Connect Endpoint Software(クライアント側のアプリ)みたいなのはそれぞれEULA持ってるみたいなので注意。

最後になりましたが、お答えくださいました中の人、さとうなおきさんありがとうございました。

Ruby on Rails を Windows Azure で使用する

Ruby on Rails を Windows Azrue上で使用するためのホワイトペーパーが公開されています。

作者は日本Rubyの会のartonさんです。この間のThe Microsoft Conference 2011 (MSC)のセッションでもartonさんがスピーカーでこのあたりのお話をしていましたので、ご存知の方もいらっしゃるかも。

目次をみてもわかる通り、単にNougakuDoやNougakuDo Companionだけの話に留まらず、技術的にかなり踏み込んでWindows+RoRを解説してるので勉強になるかと。

http.sysで動くEnnou、ステキですね!

また荒井省三さんが裏話というか、背景含めていろいろ書かれるようなのでこちらも期待です。

Twitterでも見かけましたが、ぜひ英訳して欲しいですね!

Windows Azure Platform Training Kit – October Update

リリースされたようです。

変更点は以下の通りのようです。

  • [New Hands-On Lab] SQL Azure Data-tier Applications
  • [New Hands-On Lab] SQL Azure Data Sync
  • [New Hands-On Lab] SQL Azure Federations
  • [New Demo] Provisioning Logical Servers using Cmdlets Demo
  • [New Demo] Parallel Computing on Azure – Travelling Salesman Demo
  • [Updated] SQL Azure Labs and Demos with the new portal and tooling experience
  • Applied several minor fixes in content

やっとSQL Azure Federationsの学習の機会がw

ちなみにインストーラーはWAPTK – Web Installer (Preview 2).exeなるものが増えてますね。

これで入れようとしたんですが依存関係まわりが面倒そうだったのでちょっと放置…普通に300MB超をダウンロードしました。
※まだPreview段階のようですが、入れるコンテンツを指定したり、デモで必要となるコンポーネントの依存関係を見たり便利そうではありました。

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 UpdatesOverview 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の伝達に時間がかかるケースもある