kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azure DevTest Labsでテスト用仮想マシンを作るべき理由

Azure DevTest Labs | Microsoft Azure

まだプレビューですが、Azure DevTest Labsというサービスがあります。これはテスト用の仮想マシンの作成と管理に特化したサービスです。Azure 仮想マシンほど細かくいろいろ設定することはできないのですが、その分かなりお手軽になっており、ARMで作る仮想マシンと比べて以下のような利点があります。

テンプレートが異様に短い

最低限の仮想マシンでも大体これくらいです。診断の拡張機能や初期設定をしようとPowerShell DSCの拡張機能を入れるともっと長くなります。

azure-quickstart-templates/azuredeploy.json at master · Azure/azure-quickstart-templates · GitHub

対して、DevTest Labsで作る仮想マシンテンプレートはこんな感じ。実はこれでGitとAzure PowerShellが入ります。

Azure DevTest Labs Deploy sample script

PowerShell DSCを使わなくてもいろいろ入る

PowerShell DSCでリソース使えばもちろんいろいろ入るのですが、Azureで試行錯誤するのは結構大変です。DevTest Labsではデプロイ時についでにいくつかのソフトを追加できます。Chocolatyを指定できるので、パッケージを入れることや、Gitのリポジトリクローン、PowerShellスクリプトの実行、VSTSのdropフォルダのコピーとか便利ですね。

f:id:kkamegawa:20160405052244p:plain

JSONだとこの辺。

https://gist.github.com/kkamegawa/bfb437684d56f05bfa99308a6ca4f9ad#file-windowsvirtualmachine-json-L60

自動運転が最初から入っている

azure.microsoft.com

Azure Automationを使えば自動運転を設定することができますが、DevTest Labsでは最初から設定することができます。

f:id:kkamegawa:20160405052245p:plain

停止し忘れてクラウド破産とか(あるていど)防げそうです。通常は日中の自動運転でしょうが、例えば夜間に自動テストしたい、というような場合は夜間にのみ動くLabを作ればいいでしょう。

コスト上限の設定

仮想マシンを無制限に立てられると同じくクラウド破産になりそうですが、あらかじめユーザごとにいろんな上限を設定することができます。

  • 仮想マシン数
  • 仮想マシンのサイズ
  • DevTest Labs単位での仮想マシン数上限

まだ残念なところ1 - Visual Studioからの配置ができない

そのうち直るんでしょうが、残念ながらAzureのQuickStartから仮想マシンのテンプレートを流用して作った場合、配置ができません。Visual Studioの配置でStorageアカウントを指定するところがあるのですが、こんなのいらないので、削除したら配置ができなくなりました(てへっ)。

PowerShellから実行すればいいので、そんなに困りません。CIも大丈夫のはずです。

まだ残念なところ2 - Visual Studioのテンプレートがない

uservoiceに上がってるし、事実上New-AzureRmResourceGroupDeploymentひとつ発行するだけでいいので楽なんですが、やっぱり作ってほしいですねぇ。あと、テンプレートはDevTest Labsから仮想マシンを作ってView Templateでみればわかると思います。

まとめ

いくつかちょっと難しいとところもあるけど、ARMのテンプレートが圧倒的に小さく、追加インストールするソフトがある場合は助かります。テスト用の仮想マシンだとそんなに難しいものはいらないので、今後はこのDevTest Labsに仮想マシンを作っていこうと思います。

VSTSでAzure Resouce Managerでのデプロイ事前準備と注意点

Visual Studio Team Servicesの新しいビルド定義では、ARM Resource Managerを使用したデプロイタスクを作ることができます。

f:id:kkamegawa:20160126221351p:plain

もちろんデプロイ前にAzureのサブスクリプションと関連付ける必要があるのですが、普通なら https://(account).visualstudio.com/DefaultCollection/(Project)/admin/services を開いてCertificate Basedを選べばいいのですが、ARMの場合はService Principal Authenticationでなくてはならないようです。ちなみにCertificate Basedを選んで実行すると、こんなエラーが出て失敗します。

Certificate based authentication only works with the 'Select Resource Group' action. Please select an Azure subscription with either Credential or SPN based authentication.

SPNで入力する情報わからない!という場合、ちゃんとスクリプトがあります。

blogs.msdn.com

ただ、このスクリプト試してみたのですが、バグやら、記述が古かったり(Azure PowerShell 1.0に対応していない)、仕様上の漏れがあったりして使えなかったので、少し改変してみました。

Generate Azure SPN script, based on http://blogs.m ...

SPNを使う場合、サブスクリプション名や現在のログオンアカウント名でSPN用のURIを作るのですが、当然サブスクリプション名に空白があったり、ユーザ名がANK以外であったりするとよくはないので、その辺をチェック&空白は _ に変更するなどの対処をしています。

引数はAzureのサブスクリプション名を正確に入れて下さい(MSDN for Visual Studio hogeとかそんな文字列)。もしもサブスクリプション名が日本語だった場合、ソースのサブスクリプション名を取得しているところを適当なANK文字列にしてみてください。

Windowsのログオンユーザ名がANK以外だった場合も同様です。こちらはPowerShellスクリプト内でチェックしているので、エラーになって止まるはずです。

最後まで実行すると文字列が出るはずなので、その文字列をAzureサブスクリプションの情報として入力してください。これでいけるはずです…たぶん。

で、最後に。現時点(2016/1/26)において、VSTSのサーバ内にあるビルドエージェント(Hostedを選択した場合)のAzure PowerShellはまだ0.9.8なので、Switch-AzureModeでの切り替えが必要です。

しかし、Azure SDK 2.8.2でインストールされるVisual StudioのResource Managerのテンプレートはすでに1.0仕様になっています。なので、Azure PowerShell 1.0以降がインストールされている環境にビルドエージェントをインストールして、Hostedを使わないようにしましょう。たぶんそう遠くない時期に置換されるとは思いますが。

DevOpsハッカソンでARM使ったデプロイをされるチームが一つや二つはあると思います。その時にでも試してみてください。

whereコマンドと同じPowerShell関数

PowerShellでスクリプトを作っていたところ、環境変数PATHの中にあるコマンドを探してくれるwhereコマンドと同じコマンドレットがなさそうだったので、さくっと作ってみました。

whereコマンドでファイルを探す − @IT

It is same as ms-dos command where.exe

Javaがインストールされているかどうか調べたかったんですよね。インストールされていなければ、chocolateyなどでインストールする、という方法になります。

Windows 7/8.1/Server 2012/Server 2012 R2用PowerShell v5リリース!

これはPowerShell Advent Calendar 12/19分の記事です。

atnd.org

正直ネタどうしようかなぁと思っていたら、ちょうどいいところにWindows 7/8.1/Windows Server 2012/2012 R2用PowerShell v5(正確にはWindows Management Framework 5.0の一部)がリリースされたので、紹介記事にしたいと思います(ごめんなさいごめんなさい)。

Windows Management Framework (WMF) 5.0 RTM is now available

PowerShell 5.0でどんな新機能があるかというのはぎたぱそ氏の素晴らしい記事があるので、どうぞ。これはclassの記事ですが、記事内に他の記事へのリンクもあります。

tech.guitarrapc.com

で、ダウンロード先を見てみると…Englishのみとなっているんですね。しょうがないなぁとおもいつつ、ダウンロードしてAzureの仮想マシンに入れてみました。でも安心してください。入りますよ(Windows Server 2012 R2 日本語版)。

f:id:kkamegawa:20151219083926p:plain

EULAも日本語表記されます。

前後しますが、ダウンロードセンターからダウンロードするとこんな風に対象OSごとにバイナリが分かれています。私はWindows Server 2012 R2のみをダウンロード。余談ですが、Windows 10でダウンロードするとWindows 7/8.1用は表示されませんでした。

f:id:kkamegawa:20151219083925p:plain

インストールするとタスクバーのピン留めアイコンも変わります。これはAzureの仮想マシンですが、なぜか手元のWindows Server 2012 R2日本語版に入れるとタスクバーの画像は変わっていませんでした。スタート画面では変わっていたので、キャッシュか何かでしょう。

f:id:kkamegawa:20151219083922p:plain

これは完全にOSインストール直後のPowerShellですが、コマンドレットは1411個登録されています。

f:id:kkamegawa:20151219083923p:plain

PowerShellのMajorも5になり、BuildはWindows 10 TH2相当の10586ですね。

f:id:kkamegawa:20151219083924p:plain

余談ですが、私のWindows 10(Azure SDKとかも入っています)はこれだけ。例によってOS固有のコマンドレットはPowerShell 5.0では入らないので、気を付けてください。でも、Zipファイルを扱うコマンドレット(Compress-ArchiveやExpand-Archive)は入っているので、これだけでも更新する価値はありますね!

Compress-Archive

ただ、標準コマンドレットにはエンコーディング指定するところがないようなので、おそらく日本語のファイルはUTF-8でエンコードされるのでしょう。Windows 7/Windows Server 2008 R2の人はKB2704299のパッチを当てておきましょう。Windows 8以降の人はOSが対応しているので、何もしなくても構いません。

File names are corrupted after you decompress a .zip file in Windows 7 or in Windows Server 2008 R2

ではちょっとPowerShell 5.0の新機能class構文を試してみます。

f:id:kkamegawa:20151219083928p:plain

Happy PowerShell!

…ただ、ここまでのすくりーショットを見て気づかれたと思いますが、Windows 10のPowerShell 5.0と異なり、シンタックスハイライトはないようです(どこかに設定ないのかな…)。引き続きPSReadLineのお世話になるのがいいでしょうか。

blogs.technet.com

…ということころまで書いてぎたぱそ氏が素晴らしいエントリを書きました…もうこれいらないくらいな(^^;。

tech.guitarrapc.com

やっぱりExchange 2010/2013,SharePoint 2010/2013,SCVMM 2012入れている環境には対応しないんですね。この辺しょうがないんですが、うーん…。