リソーステンプレートを作成する~超基礎編

前回の投稿で、ARM 配下に仮想マシンを作成し、それをキャプチャーしてマスターイメージを作成しました。

    1. Azure Resource Manager で作成した仮想マシンをキャプチャーする
      https://blogs.technet.com/b/junichia/archive/2015/11/25/3657462.aspx

今回はリソーステンプレートン作成方法について、基本的なことを学習しましょう。

なお、以下の手順は動画のデモンストレーションでも確認いただけます。感覚的に手っ取り早く理解したい方は動画のほうがお勧めです。

また、以下に関するPPT資料は こちら にあります。

作成したマスターイメージを展開するには、はじめにリソーステンプレートという JSON 形式の定義体を作成する必要があります。実は、クラシックタイプの仮想マシンには、Azure 新ポータルに「キャプチャー」や「VMイメージからのVM作成」機能が標準で提供されています。

image

image

が、残念ながら ARM 配下の仮想マシンにはマダなんです。なので、少々面倒ではありますが「リソーステンプレート」を作成して展開する必要があるのです。

既に書いたように、リソーステンプレートとは JSON 形式のファイルで、基本フォーマットは以下の通りです。他に Output があるのですが、ここでは省略します。

{"$schema": https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#,"contentVersion": "1.0.0.0",

"parameters": {

},

"variables": {

}

"resources": [

]

}

それぞれのカテゴリには、以下のように引数、定数、リソースを記述します。

image

では、ここで簡単な「仮想ネットワークを作成する」リソーステンプレートを作成してみたいと思います。

まずは Parameters 句 から。Parameters には引数を定義します。ここで仮想ネットワークを作成する場合、「仮想ネットワークの名前」や「仮想ネットワークのIPプレフィックス」などが引数になることは、仮想ネットワークを作ったことがある方であれば容易に想像できると思います。

"parameters": {

"VNETName": {"type": "string","metadata": {"description": "仮想ネットワークの名前"}},

"VNETPrefix": {"type": "string","metadata": {"description": "仮想ネットワークのIPレンジ(e.g. 10.0.0.0/16)"}},

"SubnetName": {"type": "string","metadata": {"description": "サブネット名"}},

"SubnetPrefix" :{"type": "string","metadata": {"description": "仮想ネットワークのIPレンジ(e.g. 10.0.0.0/24)"}}

}

上の定義をAzure 新ポータルに読み込ませると、以下のように表示されます。4つの引数が以下の画面の右側に表示されていることがわかりますね。後で解説する Resources 部では、 VNETName や VNETIPPrefix などを変数として使用することができます。

image

次に Variable です。Variable には変数を定義します。Parameter で指定した NVETName なども変数として使用できるのですが、ここでは Parameters から得られない値を定義することになります。以下のでは、location という変数を定義し、その値として reourceGroup().location を指定しています。この値は仮想ネットワークの展開先となるデータセンターの場所を示しています。

"variables": {

"location": "[resourceGroup().location]",

},

resourceGroup() とはリソースグループのインスタンスを示しており、.locaton がその属性です。つまり、仮想ネットワークの展開先は、(あとから指定する)リソースグループの配下であることがわかります。resourceGroup() には、location の他に id, Name, という属性が用意されていますが、今回はそれらは必要ないので使用していません。

最後に Resources です。なんとなく書かれていることがみえてきますね?

"resources": [

{"apiVersion": "2015-05-01-preview","type": "Microsoft.Network/virtualNetworks","name": "[parameters('VNETName')]","location": "[variables('location')]","properties": {

 "addressSpace": { "addressPrefixes": ["[parameters('VNETPrefix')]"] },

 "subnets": [  {

  "name": "[parameters('SubnetName')]",   "properties": {   "addressPrefix": "[parameters('SubnetPrefix')]"   }

 } ]

}

}

]

apiVersion は呼び出す API のバージョンを指定するのですが、ここで指定している値が最新です。

type 作成するリソースのタイプを指定します。今回作成した仮想ネットワークは Microsoft.Network/VirtualNetwork とうタイプです。これは覚えるしかありません。

name は仮想ネットワークの名前です。parameters(“VNETName”) が何を意味するかは言わずもがなですね。Parameters に記述されている変数は Parameters() で指定するわけです。

location も同様です。Variables で指定されている変数なので、Variables() を使用しています。

仮想ネットワークを作成するには IP アドレス空間とサブネット、そしてサブネットの IP アドレスレンジが必要です。Propties{} には、それらの値が定義されていることがわかります。

上記を結合すると以下のようになります。なお、結合済ファイルは こちら からダウンロードできます。

{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "VNETName": { "type": "string", "metadata": {"description": "仮想ネットワークの名前"} }, "VNETPrefix": { "type": "string", "metadata": {"description": "仮想ネットワークのIPレンジ(e.g. 10.0.0.0/16)"} }, "SubnetName": { "type": "string", "metadata": {"description": "サブネット名"} }, "SubnetPrefix" :{ "type": "string", "metadata": {"description": "仮想ネットワークのIPレンジ(e.g. 10.0.0.0/24)"} } },

  "variables": { "location": "[resourceGroup().location]" },

  "resources": [ { "apiVersion": "2015-05-01-preview", "type": "Microsoft.Network/virtualNetworks", "name": "[parameters('VNETName')]", "location": "[variables('location')]", "properties": { "addressSpace": { "addressPrefixes": [ "[parameters('VNETPrefix')]" ] }, "subnets": [ { "name": "[parameters('SubnetName')]", "properties": { "addressPrefix": "[parameters('SubnetPrefix')]" } } ] } } ]}

このファイルをテキストで保存したら、今度は Azure 新ポータルから読み込ませます。

portal.azure.com に行き、[新規] – [Marketplace] - [すべて] に移動後、「テンプレート」を検索しましょう。すると、以下のように「テンプレートのデプロイ」がヒットします。マーケットプレースにあるんですねぇ。

image

「テンプレートのデプロイ」の「作成」をクリックしてテンプレートのひな型を作成します。以下の画面の左の「作成」です。すると、右側のようにテンプレートのひな型が作成されます。

image

「テンプレートの編集」をクリックしてエディタを開いたら、ダウンロードしたテンプレートをコピペしまし、「保存」します。

image

「パラメーター」をクリックすると、Parameters に定義したパラメタが表示されるので、それぞれに値を入力します。完了したら「OK」。

image

次にサブスクリプションを選択

image

そして、リソースグループを選択します。ここで選択したリソースグループが resourceGroup() に格納されるわけですね。

image

最後に、「マーケットプレースからの購入に合意」してください。実際には何も購入していませんので、課金はされません。

image

以上で完了です。

「作成」をクリックすれば仮想ネットワークが作成されます。

いかがでしょう?覚えてしまえばどってことないですね!

次の投稿では、マスターイメージから仮想マシンを展開するためのリソーステンプレートを作成して、仮想マシンを展開してみます。

ARM 配下のマスターイメージをVMに展開するためのリソーステンプレートを作成する
https://blogs.technet.com/b/junichia/archive/2015/11/26/3657492.aspx