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 が読み込まれた状態となります。
JSON でパラメーターとして指定されている箇所については、ポータルから入力をすることができますので、GitHub や Gist に配置した JSON の確認をする場合はこの方法でもよいかもしれないですね。
■テンプレートの作成のための情報
テンプレートの作成のための情報としては、Azure リソース マネージャーのテンプレートの作成 からの一連のドキュメントが基本的な情報となるかと思います。
# JSON のスキーマについては azure-resource-manager-schemas の情報になるかと。
一から作るのは大変かと思いますので、VS を使用する / 公開されているテンプレートを修正/ 既に作成済みのリソースグループ内のリソースの情報を「Get-AzureRm*」系のコマンドレットで取得するか、リソースエクスプローラーで確認し作成することになるかと。
リソースエクスプローラーについては、ポータルの「参照」→「リソース エクスプローラー」か、https://resources.azure.com/ にアクセスして開くことになるかと。
VS Community + Azure SDK であれば、GUI ベースで作成できますので、こちらを使うのもよいかと。
テンプレートは入れ子にすることができますので、複雑な構成を作成する場合には、展開の単位ごとにテンプレートを分割するのがよさそうですね。
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 ベースで、仮想マシンを作ってみましたが、時間あるときにテンプレートも少しずつ触って、テンプレートの作成方法を覚えないとですね。