Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

リソーステンプレート入門

1,218 views

Published on

Azure リソーステンプレートを使用した仮想ネットワークと仮想マシンの展開方法です。
以下の動画では実操作のデモンストレーションです。
http://aka.ms/estl41

Published in: Technology
  • Be the first to comment

リソーステンプレート入門

  1. 1. 1 2015/11/25 版 v2.0
  2. 2. 2 VNET VM Storage Compute NIC Private IP Public IP SUBNET 仮想マシンをリソースに分解すると Network Security Group リソーステンプレートとして表現でき るため、手順を意識することなく展開 することができる。 注意 リソースは“名前(Name)”属性で識 別されるため、企業内及びプロジェ クト内での命名規約が重要である。 逆にいえば、リソーステンプレート を見れば依存関係は一目瞭然。
  3. 3. 3 リソーステンプレートからVMを作成するには テンプレート Windows PowerShell or Azure X-plat CLI Azure New Portal https://portal.azure.com/#create/Microsoft.Template Azure Subscription Resource Group Visual Studio + Azure SDK REST API
  4. 4. 4 テンプレートの基本構造(JSON形式) { "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { }, "variables": { } "resources": [ ] } 引数を定義 作成するリソースを定義 定数を定義 テンプレート実行時に引数を 指定することができる ※仮想マシン名やサイズ等 リソースの作成で使用する定数や、 引数をもとにして値を定義する ※リソースIDや文字列の結合等 テンプレート実行によって作成す るリソースを定義する テンプレートのバージョン
  5. 5. 5 テンプレートの例❶ 仮想ネットワークを作成するーParameters { "$schema": "http://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)"} } } • 引数の定義
  6. 6. 6 "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)"} } Parameters の書式について詳しくは https://azure.microsoft.com/ja-jp/documentation/articles/resource-group-authoring-templates/ 以下のParameters をAzureポータルに読み込ませると左の ように表示される
  7. 7. 7 テンプレートの例❷ 仮想ネットワークを作成するーVariables "variables": { "location": "[resourceGroup().location]", }, • Resource 句で使用する“変数”の定義 リソースグループのロケーション 使用するリソースグループは後から指定できる
  8. 8. 8 テンプレートの例❸ 仮想ネットワークを作成するー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')]" } } ] } } ] • 作成するリソースを定義する または 2014-06-01 を指定 仮想ネットワークのリソースタイプを表す 作成する仮想ネットワーク名。parameters から持ってきている 仮想ネットワークの作成場所。variables から持ってきている 仮想ネットワークの属性定義 アドレス空間の定義 アドレスのレンジ Parameters から持ってきている サブネットの定義 サブネットの名前。parameters から持ってきている。 サブネットの属性 サブネットのアドレスレンジ。parametersから持ってきている
  9. 9. 9 テンプレート例の全体像 { "$schema": "http://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')]" } } ] } } ] } http://aka.ms/seenpu からダウンロードできます
  10. 10. 10 リソースのプロパティを確認するには リソースエクスプローラーを使用するとよい
  11. 11. 11 Azure Portal を使用したテンプレートの展開手順 1. 「テンプレートのデプロイ」画面に移動 https://portal.azure.com/#create/Microsoft.Template ※2015.11.25時点ではメニューが用意されていない 2. 作成したテンプレートを読み込ませる 3. パラメタを指定する 4. サブスクリプションを指定 5. リソースグループを指定または作成 6. リソースグループの場所を指定 7. 法律条件に合意 8. 作成
  12. 12. 12 1. 「テンプレートのデプロイ」画面に移動 ※ 直接移動する場合は https://portal.azure.com/#create/Microsoft.Template • portal.azure.com で[新規] – [Marketplace] - [すべて] に移動。「テンプレート」を検索
  13. 13. 13 • [テンプレートのデプロイ]で「作成」をクリック
  14. 14. 14 2. 作成したテンプレートを読み込ませる
  15. 15. 15 3. パラメタを指定する
  16. 16. 16 4. サブスクリプションを指定
  17. 17. 17 5. リソースグループの選択または新規作成 リソースグループを選択すると、場所も自動的に選択さ れる
  18. 18. 18 6. 法律条件で「Create」して「作成」
  19. 19. 19 VNET マスターイメージから仮想マシンを展開する リソースの全体像 Subnet Master Image 既存 Public IP 仮想マシン Local IP Internet COPY OS Disk VM NIC既存 gateway Local IP はNICの属性 であり独立したリ ソースではない
  20. 20. 20 引数の定義 "parameters": { "osMasterImageUri": { "type": "string", "metadata": { "description": "マスターイメージのURI" } }, "vmName": { "type": "string", "metadata": { "description": "仮想マシンの名前" } }, "osType": { "type": "string", "allowedValues": [ "Windows", "Linux" ], "defaultValue" :"Windows", "metadata": { "description": "OSのタイプ" } }, "adminUserName": { "type": "string", "metadata": { "description": "管理者ユーザーID" } }, "adminPassword": { "type": "securestring", "metadata": { "description": "管理者ユーザーIDのパスワード" } }, "vmSize": { "type": "string", "allowedValues": [ "Standard_A1", "Standard_A2" ], "defaultValue" :"Standard_A1", "metadata": { "description": "仮想マシンのサイズ" } }, "StorageAccountName": { "type": "string", "metadata": { "description": "ストレージアカウントの名前" } }, "existingVirtualNetworkName": { "type": "string", "metadata": { "description": "仮想ネットワーク" } }, "subnetName": { "type": "string", "metadata": { "description": "サブネット名" } } }, 選択肢の設定
  21. 21. 21 変数の定義 "variables": { "api-version": "2015-06-15", "location": "[resourceGroup().location]", "publicIPAddressType": "Dynamic", "vnetID": "[resourceId('Microsoft.Network/virtualNetworks', parameters('existingVirtualNetworkName'))]", "subnetRef": "[concat(variables('vnetID'),'/subnets/', parameters('subnetName'))]", "nicName": "[concat(parameters('vmName'),'-nic')]", "publicIPAddressName": "[concat(parameters('vmName'),'-pip')]", “osDiskVhdName”: “[concat(‘http://’,parameters(‘StorageAccountName’),’.blob.core.windows.net/vhds/’, parameters('vmName'),'osDisk.vhd')]" }, resourceId 関数 • 書式 :resourceId( <リソースのタイプ> , <リソース名> ) • 戻り値 :指定したリソースの Id
  22. 22. 22 リソーステンプレート ~ Public IP の作成 { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('publicIPAddressName')]", "location": "[variables('location')]", "properties": { "publicIPAllocationMethod": "[variables('publicIPAddressType')]" } } Public IP のリソースタイプ • Public IP の利用は課金対象でもあるため、独立したリ ソースとして扱われる。 • ただし、リソースを作成しただけでは IP アドレスは 割り当てられないため課金されない。 ※ variables() で指定されている変数は、Variables 句 で定義されている必要がある
  23. 23. 23 { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Network/networkInterfaces", "name": "[variables('nicName')]", "location": "[variables('location')]", “dependsOn”: [ “[concat(‘Microsoft.Network/publicIPAddresses/’, variables(‘publicIPAddressName’))]” ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]" }, "subnet": { "id": "[variables('subnetRef')]" } } } ] } } リソーステンプレート ~ NIC の作成 Public IP のリソースタイプ 依存関係の定義。ここで指定したリソースが作 成されていない場合には、NICも作成されない。 concat() は文字列の結合関数。 Private IP を動的に割り当てることを指定 既に作成した Public IP リソースを割り当てている 既存のリソースを表現する場合には resourceid(リソース ID)関数を使用する。 NIC をどのサブネットに接続するかを指定
  24. 24. 24 リソーステンプレート ~ VM の作成❶ { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Compute/virtualMachines", "name": "[parameters('vmName')]", "location": "[variables('location')]", “dependsOn”: [ “[concat(‘Microsoft.Network/networkInterfaces/’, variables(‘nicName’))]” ], (続く) 依存関係の定義。仮想マシンを作成する前に、NIC が作成さ れていなければならない。 仮想マシンのリソースタイプ
  25. 25. 25 リソーステンプレート ~ VM の作成❷ "properties": { "hardwareProfile": { "vmSize": "[parameters('vmSize')]" }, "osProfile": { "computername": "[parameters('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" } ハードウェアのプロファイルを仮想マ シンのサイズ(vmSize)で指定する OSのプロファイルには、コンピュー ター名、管理者のユーザーID、パス ワードを指定する。
  26. 26. 26 リソーステンプレート ~ VM の作成❸ "storageProfile": { "osDisk": { "name": "[concat(parameters('vmName'),'-osDisk')]", "osType": "[parameters('osType')]", "caching": "ReadWrite", "createOption": "FromImage", "image": { "uri": "[parameters('osMasterImageUri')]" }, “vhd”: { "uri": "[variables('osDiskVhdName')]" } } }, ストレージのプロファイル OSディスクを指定する ディスクの名前となるプレフィックス。拡 張子はVHDになる。 OS のタイプ。Windows or Linux。 OSディスクのキャッシュ設定 ディスク作成のオプション。イメージから 作成することを示している。 マスターイメージの URI を指定する OS ディスクの作成先をURIで指定する
  27. 27. 27 "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" } ] } } } ネットワークプロファイルを指定する 仮想マシンが使用する NIC を resourceId で指定する
  28. 28. 28 { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "osMasterImageUri": { "type": "string", "metadata": { "description": "マスターイメージのURI" } }, "vmName": { "type": "string", "metadata": { "description": "仮想マシンの名前" } }, "osType": { "type": "string", "allowedValues": [ "Windows", "Linux" ], "defaultValue" :"Windows", "metadata": { "description": "OSのタイプ" } }, "adminUserName": { "type": "string", "metadata": { "description": "管理者ユーザーID" } }, "adminPassword": { "type": "securestring", "metadata": { "description": "管理者ユーザーIDのパスワード" } }, "vmSize": { "type": "string", "allowedValues": [ "Standard_A1", "Standard_A2" ], "defaultValue" :"Standard_A1", "metadata": { "description": "仮想マシンのサイズ" } }, "StorageAccountName": { "type": "string", "metadata": { "description": "ストレージアカウントの名前" } }, "existingVirtualNetworkName": { "type": "string", "metadata": { "description": "仮想ネットワーク" } }, "subnetName": { "type": "string", "metadata": { "description": "サブネット名" } } }, "variables": { "api-version": "2015-06-15", "location": "[resourceGroup().location]", "publicIPAddressType": "Dynamic", "vnetID": "[resourceId('Microsoft.Network/virtualNetworks', parameters('existingVirtualNetworkName'))]", "subnetRef": "[concat(variables('vnetID'),'/subnets/', parameters('subnetName'))]", "nicName": "[concat(parameters('vmName'),'-nic')]", "publicIPAddressName": "[concat(parameters('vmName'),'-pip')]", "osDiskVhdName": "[concat('http://',parameters('StorageAccountName'),'.blob.core.windows.net/vhds/',parameters('vmName'),' osDisk.vhd')]" }, "resources": [ { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('publicIPAddressName')]", "location": "[variables('location')]", "properties": { "publicIPAllocationMethod": "[variables('publicIPAddressType')]" } }, { { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Network/networkInterfaces", "name": "[variables('nicName')]", "location": "[variables('location')]", “dependsOn”: [ “[concat(‘Microsoft.Network/publicIPAddresses/’, variables(‘publicIPAddressName’))]” ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]" }, "subnet": { "id": "[variables('subnetRef')]" } } } ] } } }, { "apiVersion": "[variables('api-version')]", "type": "Microsoft.Compute/virtualMachines", "name": "[parameters('vmName')]", "location": "[variables('location')]", "dependsOn": [ "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]" ], "properties": { "hardwareProfile": { "vmSize": "[parameters('vmSize')]" }, "osProfile": { "computername": "[parameters('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "storageProfile": { "osDisk": { "name": "[concat(parameters('vmName'),'-osDisk')]", "osType": "[parameters('osType')]", "caching": "ReadWrite", "createOption": "FromImage", "image": { "uri": "[parameters('osMasterImageUri')]" }, "vhd": { "uri": "[variables('osDiskVhdName')]" } } }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" } ] } } } ] } http://aka.ms/fw5w5u からダウンロード可能
  29. 29. 29 JSONエディタをお持ちでない場合は VS Code をどうぞ
  30. 30. 30
  31. 31. 31 展開の進行中画面 リソース単位の進捗が確認 できる
  32. 32. 32

×