SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

ARM テンプレートを使用したリソース展開のメモ

leave a comment

ARM が全く調べられていなかったので、最近調べたことのメモを。

■ベースとするテンプレートの入手方法と使用方法

ARM のテンプレートのダウンロードですが、以前は 「Get-AzureResourceGroupGalleryTemplate」「Save-AzureResourceGroupGalleryTemplate」のコマンドレットを使用していました。

get-azureresourcegroupgallerytemplate returning "missing api version in the query string" で回答されていますが、これらのコマンドレットは非推奨のコマンドレットとなっており、最新の Azure PowerShell には含まれていません。
現状、テンプレートについては、GitHub の azure-quickstart-templates で、公開されているものを使用することになるかと思います。

外部向けのロードバランサーを使用した VM を作成するためのテンプレートは、101-vm-with-rdp-port、内部向けのロードバランサーを使用した VM を作成するためのテンプレートは 201-2-vms-internal-load-balancer を使用すると便利かと。

最新の PowerShell では、テンプレートを使用した展開のコマンドレットでは「New-AzureRmResourceGroupDeployment」を使用します。
パラメーターを使用する場合は、パラメーターの JSON を使うと、同一のテンプレートを使用して固有の情報を設定することができます。

基本的な展開方法ですが、コマンドレットを「New-AzureRmResourceGroupDeployment」に読み替える必要がありますが、 Deploy a simple Windows VM in West US が参考になります。
GitHub の JSON を使用して、展開するためのサンプルが公開されています。

複雑な構成を展開する場合は、Azure リソース マネージャーのテンプレートを使用した、可用性の高い Active Directory ドメイン サービスのドメインのデプロイ (active-directory-new-domain-ha-2-dc) / Azure リソース マネージャーのテンプレートを使用した SQL Server AlwaysOn のデプロイ (sql-server-2014-alwayson-dsc) でしょうか。

コマンドレットからテンプレートを使用するほかに、ポータルからテンプレートを読み込んで展開することもできます。
GitHub で公開されているテンプレートの「Deploy to Azure」や Azure クイック スタート テンプレート 検索結果の「Azure へのデプロイ」では以下のような URL が使用されています。

https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F101-vm-with-rdp-port%2Fazuredeploy.json

 

URL で JSON が保存されている URI を渡すことで、ポータルからテンプレート展開をすることができます。

URL エンコードは以下のようなスクリプトでできるかと。

Add-Type -AssemblyName System.Web
$uri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/576f179aaa45f6c8bbef621633fd1b99f834e6f7/101-vm-with-rdp-port/azuredeploy.json"
"https://portal.azure.com/#create/Microsoft.Template/uri/{0}" -f [System.Web.HttpUtility]::UrlEncode($uri)

 

出力された URL でポータルにアクセスをすると、カスタムデプロイのテンプレートとして、指定した JSON が読み込まれた状態となります。

image

JSON でパラメーターとして指定されている箇所については、ポータルから入力をすることができますので、GitHub や Gist に配置した JSON の確認をする場合はこの方法でもよいかもしれないですね。

image

 

■テンプレートの作成のための情報

テンプレートの作成のための情報としては、Azure リソース マネージャーのテンプレートの作成 からの一連のドキュメントが基本的な情報となるかと思います。

# JSON のスキーマについては azure-resource-manager-schemas の情報になるかと。

一から作るのは大変かと思いますので、VS を使用する / 公開されているテンプレートを修正/ 既に作成済みのリソースグループ内のリソースの情報を「Get-AzureRm*」系のコマンドレットで取得するか、リソースエクスプローラーで確認し作成することになるかと。

リソースエクスプローラーについては、ポータルの「参照」→「リソース エクスプローラー」か、https://resources.azure.com/ にアクセスして開くことになるかと。

image

VS Community + Azure SDK であれば、GUI ベースで作成できますので、こちらを使うのもよいかと。

image


テンプレートは入れ子にすることができますので、複雑な構成を作成する場合には、展開の単位ごとにテンプレートを分割するのがよさそうですね。

AlwaysOn のテンプレートでは、複数のテンプレートを 「azuredeploy.json」を起点として、この JSON 内に入れ子になったテンプレートを使用しながら構築しています。

  • azuredeploy.json
  • ADVmTemplate.json
  • DeployPrimaryAD.json
  • DeploySecondaryAD.json
  • SqlClusterVmTemplate.json
  • SqlWitnessVmTemplate.json
  • vnet-with-dns-server.json
  • nic.json
  • DeploySqlWitnessShare.json
  • DeploySqlAlwaysOn.json

テンプレートの実行のタイミングには依存関係が作れますので、タイミングを考慮しながらテンプレートを実行し、テンプレート内では DSC のリソースを使用しながら構築するということを実施しているようですね。

前回は、PowerShell ベースで、仮想マシンを作ってみましたが、時間あるときにテンプレートも少しずつ触って、テンプレートの作成方法を覚えないとですね。

Share

Written by Masayuki.Ozawa

11月 23rd, 2015 at 6:12 pm

Posted in Microsoft Azure

Tagged with ,

Leave a Reply