先日の「Windows Azure によるアプリケーション開発基礎」ですが、もろもろ加筆修正されているようですので是非元リンクから最新版をゲットしなおしてくださいー
前のエントリでちくちく指摘してたところも直ってました!
先日の「Windows Azure によるアプリケーション開発基礎」ですが、もろもろ加筆修正されているようですので是非元リンクから最新版をゲットしなおしてくださいー
前のエントリでちくちく指摘してたところも直ってました!
ふと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ですね!
※ちなみに暗号化には公開鍵を、復号には秘密鍵を利用しているので暗号化する際に使用した秘密鍵付証明書が個人用証明書ストアに保存されてないとダメです。逆に言えば秘密鍵付証明書(とパスワード)があれば簡単に復号できちゃいますということで。
今日はこの挙動に悩まされた一日でした…とほほ。
マイクロソフトコンサルティングサービスの有償ワークショップ、「Visual Studio Workshop #451 Windows Azure によるアプリケーション開発基礎」の資料がなんと無償で入手できますよ!!
あのMCSの有償ワークショップの資料が無償だなんてうれしいですね!でも一応制約があって個人の勉強目的のみなので注意してくださいね。以下「とあるコンサルタントのつぶやき」より引用。
このマテリアルは、あくまで現場の開発者の皆様の、セルフトレーニング(勉強)用にご提供するものです。複製、転載、商用利用はご遠慮下さるよう、お願いいたします。(例:この内容を社内で製本して配布するとか、このマテリアルを使って社内向けトレーニングを実施するとか、設計書や社内資料、お客様向け資料に引用したりコピペするとかしてはいけません。)
内容については、私が独自に調査しているものを多分に含んでおります。技術情報に関しては誤りがないように全力で調査をしていますが、万が一、間違いがあった場合には、こちらの blog などで報告をしていきたいと思います。
Azure のアップデートなどによりこちらの情報が古くなる可能性もありますが、現時点ではマテリアルの更新について行う予定はありません。申し訳ありませんが、差分情報については各自で調査をお願いできればと思います。(基本はこれからもそんなに変わらないと思いますが。)
以下ざっくり見て気になったところとか。
最後のモジュールにあるStartupTaskのTipsや、随所に見られる苦労しただろうなぁ的なポイントを見ると感慨深いですね!
というか全般的にまとまってて勉強になると思います。
※ただクラウドコンピューティングやAzureそのものの概要的なところは少ないので、初見で見るにはつらいかも(あくまでVisual Studioを使うような開発者向けワークショップの資料ですし)
Windows Azureで提供されるCTPやBeta機能のTerms of Use(利用規約)はどうなってるのか?よくわからなかったので中の人に聞いてみました。(2011年10月28日時点の内容です)
というわけで、 Windows Azure Platform の法的情報 に準ずるということで、つまるところSLAはないですが利用にあたって商用利用やら本番環境での利用は問題なさそうですね。
ベータやらCTPはSLAないよってのは このへん に書いてますと。
ドッグフードもぐもぐしてる方ならよくご存知かと思いますが、当然ながら互換性はないし機能がそのまま使えるかもわからない、サポートやバグ修正の基準もGA(General Availability)レベルじゃないので期待しないでねとのこと。
自己責任で面倒見れない場合はお勧めしませんということです。
ただし、今時点でベータ扱いのVM Roleだけは例外。SLAもあります。
あと分かりにくいですけど、SQL Azure Reportingみたいに、CTP利用時に個別にライセンスが表示されるやつはそちらに準拠すると思うので注意ください。
それから、Windows Azure Connect Endpoint Software(クライアント側のアプリ)みたいなのはそれぞれEULA持ってるみたいなので注意。
最後になりましたが、お答えくださいました中の人、さとうなおきさんありがとうございました。
Ruby on Rails を Windows Azrue上で使用するためのホワイトペーパーが公開されています。
作者は日本Rubyの会のartonさんです。この間のThe Microsoft Conference 2011 (MSC)のセッションでもartonさんがスピーカーでこのあたりのお話をしていましたので、ご存知の方もいらっしゃるかも。
目次をみてもわかる通り、単にNougakuDoやNougakuDo Companionだけの話に留まらず、技術的にかなり踏み込んでWindows+RoRを解説してるので勉強になるかと。
http.sysで動くEnnou、ステキですね!
また荒井省三さんが裏話というか、背景含めていろいろ書かれるようなのでこちらも期待です。
Twitterでも見かけましたが、ぜひ英訳して欲しいですね!
というわけでリリースされてます。
例によってセキュリティパッチやらの適用なわけですが、.NET Frameworkのアップデートが含まれてるのがポイントですね。
リリースされたようです。
変更点は以下の通りのようです。
やっとSQL Azure Federationsの学習の機会がw
ちなみにインストーラーはWAPTK – Web Installer (Preview 2).exeなるものが増えてますね。
これで入れようとしたんですが依存関係まわりが面倒そうだったのでちょっと放置…普通に300MB超をダウンロードしました。
※まだPreview段階のようですが、入れるコンテンツを指定したり、デモで必要となるコンポーネントの依存関係を見たり便利そうではありました。
さかのぼること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が動いてる&ドキュメントがそろってると思います。
そういうのに参加したり、参加してる人に絡んだりするといいんじゃないでしょうか!
取り留めがありませんが(取り留める気もあまりなかったけど)、こんな感じの超レアで熱いイベントでしたー!いじょー
唐突なアナウンスですがWindows AzureのIn-place Update機能が更新されたようです。まぁWindows Azure側の話なので、こちらで何か修正等があるわけではありませんし、既に展開されてるのでみんな恩恵にあずかれます。
元ネタ:Announcing Improved In-place Updates 、 Overview of Updating a Windows Azure Service
変更内容ですが、簡単にいうと以下のケースにおいて今までIn-place Updateが出来なかったのですが、それができるようになりました
( ゚Д゚ノノ"☆パチパチパチパチ
今まで再デプロイとか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の伝達に時間がかかるケースもある |
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オプションで証明書の生成もできるのでお手軽ですね。
ちなみにパスワードを書いたテキストファイルを標準入力として読み込ませれば手打ちしなくてもイイです。
オプションや内容についてはこちらを参照。
というわけでコマンドでやるにも便利な感じになりましたとさ。