kkamegawa's weblog

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

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使ったデプロイをされるチームが一つや二つはあると思います。その時にでも試してみてください。