Azure Resource Manager(ARM)を使った管理はAzureポータルなどを使うことで透過的に操作できますが、テンプレート作成に必要な情報(JSONの記述内容など)を集めようとするとなかなか難しいところがあります。現状、そういった場合に簡単なのはARM Explorerを利用する方法です。
このサイトを使うと全リソースをJSONで見ることができます。(モードをReadWriteにすると編集も可能)
こういったツールを使ってリソースを眺めてJSON書いていくことは可能なのですが、やはりここはツールのサポートが欲しいところです。というわけで本題ですが、Visual Studio 2013/2015RCとAzure SDK 2.6を使うとそのあたりが簡単ですよ、というお話です。
Visual StudioによるARMサポート
Azure SDK 2.6 for Visual Studioをインストールすると、Visual Studioを使ってARMのテンプレート作成・編集やデプロイが簡単に行えるようになります。
新規プロジェクト作成でARMのテンプレートがあるのでまずは選びましょう。
選択後、基本となるテンプレートを選ぶことができます。
Virtual Machinesもあるのでうれしいですね(?)
とりあえずWeb appで作ってみましょう。
ソリューションにはデプロイ用のPowerShellスクリプト、それからテンプレートのJSON(とパラメーター用のJSON)、AzCopyが含まれます。
※実際にデプロイするにはAzure PowerShellが必要になるので最新版入れておきましょう。
結局JSONを手書き、、、と思いましたか?いいえ、そこはVisual Studioの補助が効きます。
JSONスキーマがあるのでKeyと値候補など入力補完できます。これだけ?いいえ。テンプレートの.json開いて「表示」-「その他のウィンドウ」-「JSON アウトライン」を表示してみましょう。
今設定されているパラメーターやARMのリソースを見ることができます。選択したリソースがハイライトされたりわかりやすいですね。
またJSON アウトラインからリソースを追加することもできます。
VM v2にも対応してるので仮想マシンに関連するリソースの追加も簡単ですね。
後はいろいろテンプレートを作り上げてデプロイする場合はプロジェクトのコンテキストメニューから配置を選べばそのままデプロイできます。
デプロイダイアログが表示されるので、対象のサブスクリプションやリソースグループを選んで作成したテンプレート(とテンプレートパラメーターファイル)を選びます。
パラメーターは個別に設定できるのでいいですね。「配置」ボタンクリックで配置が開始されます。(ウィンドウ閉じないのでよくわからないけど)
04:33:43 - ビルドを開始しました。 04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (StageArtifacts ターゲット): 04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (ContentFilesProjectOutputGroup ターゲット): 04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。 04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。 04:33:43 - ビルドに成功しました。 04:33:43 - 次のパラメーター値がこの配置に使用されます: 04:33:43 - siteName: xxxxxxxwebsite 04:33:43 - hostingPlanName: xxxxxxxxtestplan 04:33:43 - siteLocation: East US 04:33:43 - sku: Free 04:33:43 - workerSize: 0 04:33:43 - 次のコマンドで配置 PowerShell スクリプトを起動: 04:33:43 - 'xxxxxx\azureresourcegroup1\azureresourcegroup1\Scripts\Deploy-AzureResourceGroup.ps1' -StorageAccountName '' -ResourceGroupName 'AzureResourceGroup1' -ResourceGroupLocation 'eastus' -TemplateFile 'xxxxx\azureresourcegroup1\azureresourcegroup1\templates\website.json' -TemplateParametersFile 'xxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.param.dev.json' 04:33:44 - 04:33:44 - 04:33:44 - Accounts : {[xxxxx@live.jp, Microsoft.Azure.Common.Authentication.Models.AzureAccount]} 04:33:44 - Subscriptions : {[xxxxxxxxxxxxxxxx, Microsoft.Azure.Common.Authentication.Models.AzureSubscription]} 04:33:44 - DefaultSubscription : Microsoft.Azure.Common.Authentication.Models.AzureSubscription 04:33:44 - Environments : {[AzureCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment], [AzureChinaCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment]} 04:33:44 - Context : Microsoft.Azure.Common.Authentication.Models.AzureContext 04:33:44 - ProfileLoadErrors : 04:33:44 - ProfilePath : 04:33:44 - 04:34:06 - [VERBOSE] 4:34:06 - Created resource group 'AzureResourceGroup1' in location 'eastus' 04:34:07 - [VERBOSE] 4:34:07 - Template is valid. 04:34:10 - [VERBOSE] 4:34:10 - Create template deployment 'website'. 04:34:19 - [VERBOSE] 4:34:19 - Resource Microsoft.Web/serverfarms 'xxxxxtestplan' provisioning status is succeeded 04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'CPUHigh buchizotestplan' provisioning status is succeeded 04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'LongHttpQueue buchizotestplan' provisioning status is succeeded 04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Web/sites 'buchizotestwebsite' provisioning status is succeeded 04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Insights/autoscalesettings 'buchizotestplan-AzureResourceGroup1' provisioning status is succeeded 04:34:35 - [VERBOSE] 4:34:35 - Resource Microsoft.Insights/alertrules 'ServerErrors buchizotestwebsite' provisioning status is succeeded 04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/alertrules 'ForbiddenRequests buchizotestwebsite' provisioning status is succeeded 04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/components 'buchizotestwebsite' provisioning status is succeeded 04:34:50 - ResourceGroupName : AzureResourceGroup1 04:34:50 - Location : eastus 04:34:50 - Resources : {CPUHigh xxxxxxtestplan, ForbiddenRequests xtxxxestwebsite, LongHttpQueue xxxxxxtestplan, ServerErrors xxxxtestwebsite...} 04:34:50 - ResourcesTable : 04:34:50 - Name Type Location 04:34:50 - ==================================== ==================================== ========= 04:34:50 - CPUHigh xxxxtestplan Microsoft.Insights/alertrules eastus 04:34:50 - ForbiddenRequests xxxxtestwebsite Microsoft.Insights/alertrules eastus 04:34:50 - LongHttpQueue xxxxtestplan Microsoft.Insights/alertrules eastus 04:34:50 - ServerErrors xxxxtestwebsite Microsoft.Insights/alertrules eastus 04:34:50 - xxxtestplan-AzureResourceGroup1 Microsoft.Insights/autoscalesettings eastus 04:34:50 - xxxxtestwebsite Microsoft.Insights/components centralus 04:34:50 - xxxxtestplan Microsoft.Web/serverFarms eastus 04:34:50 - xxxxtestwebsite Microsoft.Web/sites eastus 04:34:50 - 04:34:50 - ProvisioningState : Succeeded 04:34:50 - Permissions : {Microsoft.Azure.Commands.Resources.Models.Authorization.PSPermission} 04:34:50 - PermissionsTable : 04:34:50 - Actions NotActions 04:34:50 - ======= ========== 04:34:50 - * 04:34:50 - 04:34:50 - Tags : {} 04:34:50 - TagsTable : 04:34:50 - ResourceId : /subscriptions/xxxxxxxxxxxxxxxx/resourceGroups/AzureResourceGroup1 04:34:50 - 04:34:50 - 04:34:50 - 04:34:50 - 04:34:50 - テンプレート 'xxxxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.json' をリソース グループ 'AzureResourceGroup1' に正常に配置しました。
これだけです。実際にポータルでみると、指定した通り出来上がっています。
まとめ
というわけでVisual Studioなどのツールを使って快適ARM生活を送ってくださいませ。