Windows Azure SDK の更新

年末に爆弾じゃなくて大型?のアップデートがきましたー。

今回更新されたのは以下の3つ。

で、ややこしいことに内部バージョンはWindows Azure SDK 1.6なんですが中身はいろいろ再配置・きったはったがありました。それに伴い名称なども変更されてるので注意が必要です。

まぁ元ソースは文末にまとめたリンクを見て頂くか、きっと日本語化された公式ソースっぽい内容をナイスガイさとうなおき氏が近日中にまとめると思われるのでそちらを見てください。(丸投げ)

続きを読む

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ですね!

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

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

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 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にドキュメントがありますが、おいおいということで。

Windows Azure Platform Training Kit May 2011 Update

リリースされてました。

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

  • [Updated] Building Windows Azure Application with Cache Service lab updated to the production release of the Windows Azure AppFabric Caching service
  • [Updated] Rafiki demo updated to the production release of the Windows Azure AppFabric Caching service
  • [Updated] Working with Drives exercise added to the Exploring Windows Azure Storage lab
  • [Updated] Caching Content from Hosted Services exercise added to the Windows Azure Content Delivery Networks lab
  • Applied several minor fixes in content and updated Service Bus labs to the new portal experience

Windows Azure AppFabric ServiceBus はCTPにいろいろ機能が追加されているのでこちらも要チェックですねぇ。

CDNやらCachingやら特性知っておかないといざ使おうとして嵌るので、早めにつぶしておきたいですが。

コマンドラインで頑張ってみた結果

自分用メモ。Webロール用。

set PATH=c:\Program Files\Windows Azure SDK\v1.4\bin;%PATH%

set PACKPATH="C:\temp\CSPack"
set CSDEF="deploypackage\ServiceDefinition.csdef"
set OUT=/out:deploypackage\sample.cspkg
set SITES=/sitePhysicalDirectories:RoleFiles;Web;%PACKPATH%\RoleFiles
set ROLE=/role:Web;%PACKPATH%\RoleFiles;bin\Role.dll /rolepropertiesFile:Web;deploypackage\role.txt

cd %PACKPATH%
cspack %CSDEF% %OUT% %SITES% %ROLE%

パスはこんな感じにしておいてください。

CSPack
├─DeployPackage
│      MakeDeploypackage.bat
│      role.txt
│      ServiceDefinition.csdef

└─RoleFiles
    │  Web.config
    └─bin
           startup.cmd
           role.dll

実行する場合はWindows Azure SDK Command Promptからやるのがいいです。
ただ下記の環境変数があれば普通のコマンドプロンプトでもいけそうですけどね。

ServiceHostingSDKInstallPath=C:\Program Files\Windows Azure SDK\v1.4\

ちなみにCSPackには隠された12番目の理論 コマンドライン引数 /noencrypt があります。
*.cspkgを証明書を使った暗号化しないのでCSPack関連のファイルだけ別PCに持って行ってパッケージングするときに便利。(SDKのインストールしたくない場合とか)
※でもまぁ非公式なので使わないほうがいいですね。

しかし綺麗なコマンドじゃないですな。

Windows Azure SDK 1.4 refresh でWindows Azure Connect Endpointの接続が失敗する

さとうなおきさんのツイートより。

Windows Azure SDK 1.4 Refreshを使用してWindows Azure Connectを有効にしたサービスパッケージをデプロイしてもWindows Azure Connectに繋がらない問題があるようです。

FixしたSDKがリリースされているので、一度Windows Azure SDKをアンインストールして再度インストールする必要がるようです。

Windows Azure Connect Team Blog > Windows Azure SDK 1.4 refresh

1) Windows Azure SDKをアンインストールします。

2) http://www.microsoft.com/windowsazure/getstarted/default.aspx ここから再度SDKをセットアップします。(Web Platform Installer経由です)

※再インストール後もバージョンかわってなさそうです…

ということでWindows Azure Connectを利用される方は注意しましょう。

Windows Azure SDK 1.4 Refresh

MIXでアナウンスされていたWindows Azure SDK 1.4のRefresh(SDK 1.4.1)がリリースされました。

このアップデートでは、IIS環境に対し簡単にWebアプリを発行できるWeb Deployment Tool (Web配置ツール)が統合され、簡単にWindows Azure上のWeb RoleにWebアプリケーションを配置できるようになりました。

但しいくつか制限があります。

  • Web配置はシングルインスタンス(1インスタンス)のみ対応できます。
  • このツールを使用したシナリオはテストや開発時を想定しています。
  • Web配置ツールを使用した際の更新ファイル等はサービスパッケージデプロイ後のロールインスタンス上のファイルを直接更新するので永続化されません。最終的にはサービスパッケージを作成し、Windows Azure上へデプロイする必要があります。
  • Web配置用にInputEndpointを1つ消費します(リモートデスクトップ接続も必須です)

あくまで開発者がテストや開発の際のWindows Azure上へのデプロイの手間を軽減させるための機能と考えたほうがいいでしょう。でも便利ですね。

続きを読む