2017-02-17 5 views
2

各VMごとに異なる秘密(たとえば、VM1の場合はsecret1、VM2の場合はsecret2など)を使用してパラメータを指定して指定した量のVMを作成できます。 。)ここにコピーVMテンプレートの基本的な例である:Azure RMテンプレート。キーボルトから一意の秘密でコピーVMを導入する

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "numberOfVMs": { 
     "type": "int", 
     "defaultValue": 1, 
     "minvalue": 1 
    }, 
    "vmAdminUserName": { 
     "type": "string", 
     "minLength": 1 
    }, 
     "vmAdminPassword": { 
      "type": "securestring" 
     } 
    }, 
    "variables": { 
    "storageAccountName": "[concat('stor567', uniqueString(resourceGroup().id))]", 
    "storageAccountType": "Standard_LRS", 
    "vmWindowsOSVersion": "2016-Datacenter", 
    "vnetPrefix": "10.0.0.0/16", 
    "vnetSubnet1Name": "Subnet-1", 
    "vnetSubnet1Prefix": "10.0.0.0/24", 
    "nicVnetID": "[resourceId('Microsoft.Network/virtualNetworks', 'vnet')]", 
    "nicSubnetRef": "[concat(variables('nicVnetID'), '/subnets/', variables('vnetSubnet1Name'))]", 
    "vmImagePublisher": "MicrosoftWindowsServer", 
    "vmImageOffer": "WindowsServer", 
    "vmVmSize": "Standard_DS1_v2", 
    "vmVnetID": "[resourceId('Microsoft.Network/virtualNetworks', 'vnet')]", 
    "vmSubnetRef": "[concat(variables('vmVnetID'), '/subnets/', variables('vnetSubnet1Name'))]", 
    "vmStorageAccountContainerName": "vhds" 
    }, 
    "resources": [ 
     { 
      "name": "[variables('storageAccountName')]", 
      "type": "Microsoft.Storage/storageAccounts", 
      "location": "[resourceGroup().location]", 
      "apiVersion": "2015-06-15", 
      "dependsOn": [ ], 
     "properties": { 
      "accountType": "[variables('storageAccountType')]" 
     } 
     }, 
     { 
      "name": "vnet", 
      "type": "Microsoft.Network/virtualNetworks", 
      "location": "[resourceGroup().location]", 
      "apiVersion": "2016-03-30", 
      "dependsOn": [ ], 
      "tags": { 
       "displayName": "vnet" 
      }, 
      "properties": { 
       "addressSpace": { 
        "addressPrefixes": [ 
         "[variables('vnetPrefix')]" 
        ] 
       }, 
       "subnets": [ 
        { 
         "name": "[variables('vnetSubnet1Name')]", 
         "properties": { 
          "addressPrefix": "[variables('vnetSubnet1Prefix')]" 
         } 
        } 
       ] 
      } 
     }, 
    { 
     "name": "[concat('NIC',copyindex())]", 
     "type": "Microsoft.Network/networkInterfaces", 
     "location": "[resourceGroup().location]", 
     "copy": { 
     "name": "nicLoop", 
     "count": "[parameters('numberOfVMs')]" 
     }, 
     "apiVersion": "2016-03-30", 
     "dependsOn": [ 
     "[resourceId('Microsoft.Network/virtualNetworks', 'vnet')]" 
     ], 
     "tags": { 
     "displayName": "nic" 
     }, 
     "properties": { 
     "ipConfigurations": [ 
      { 
      "name": "ipconfig1", 
      "properties": { 
       "privateIPAllocationMethod": "Dynamic", 
       "subnet": { 
       "id": "[variables('nicSubnetRef')]" 
       } 
      } 
      } 
     ] 
     } 
    }, 
    { 
     "name": "[concat('VM',copyindex())]", 
     "type": "Microsoft.Compute/virtualMachines", 
     "location": "[resourceGroup().location]", 
     "copy": { 
     "name": "virtualMachineLoop", 
     "count": "[parameters('numberOfVMs')]" 
     }, 
     "apiVersion": "2015-06-15", 
     "dependsOn": [ 
     "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]", 
     "nicLoop" 
     ], 
     "tags": { 
     "displayName": "vm" 
     }, 
     "properties": { 
     "hardwareProfile": { 
      "vmSize": "[variables('vmVmSize')]" 
     }, 
     "osProfile": { 
      "computerName": "[concat('VM',copyindex())]", 
      "adminUsername": "[parameters('vmAdminUsername')]", 
      "adminPassword": "[parameters('vmAdminPassword')]" 
     }, 
     "storageProfile": { 
      "imageReference": { 
      "publisher": "[variables('vmImagePublisher')]", 
      "offer": "[variables('vmImageOffer')]", 
      "sku": "[variables('vmWindowsOSVersion')]", 
      "version": "latest" 
      }, 
      "osDisk": { 
      "name": "vmOSDisk", 
      "vhd": { 
       "uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob, variables('vmStorageAccountContainerName'), '/', 'VM',copyIndex(),'-','OSdisk.vhd')]" 
      }, 
      "caching": "ReadWrite", 
      "createOption": "FromImage" 
      } 
     }, 
     "networkProfile": { 
      "networkInterfaces": [ 
      { 
       "id": "[resourceId('Microsoft.Network/networkInterfaces', concat('NIC',copyindex()))]" 
      } 
      ] 
     } 
     } 
    }], 
    "outputs": {} 
} 

しかし、私はそのテンプレートの主ボールトからユニークな秘密としてパスワードを使用して統合するために苦労しています。私が公式の文書Reference a secret with static idの例を使用すると、各VMに対してsecret1を持つVMが作成されます。また、Reference a secret with dynamic idをネストされたテンプレートにラップすることはできません。これは、展開したいVMの数ごとに、コピーしたVMを何度も展開するためです。この挑戦がどのように解決できるのか理解してもらえますか?

+0

なぜあなたはネストされたテンプレートとcopyloopでそれを行いませんか?私は理解するのが苦労します – 4c74356b41

+0

それはただ展開しないためです。 http://pastebin.com/w2p8n0te たとえば、2つのVMを作成したいが、ネストされたものがメインテンプレートのコピーとして定義されていると仮定すると、ARMはその2つのVMを配備しようとしますが、別の秘密とここ は、メインテンプレートのazuredeploy.jsonです: http://pastebin.com/tSyPp8fHここ は、ネストされたテンプレートnestedTemplate.jsonです: http://pastebin.com/FTrbmrnc – Max

+0

私は私が最終的にあなたが言っていることだと思いますこのケースは面白そうです。私は解決策を作成しようとします – 4c74356b41

答えて

3

リンク:ParentおよびNested。 それはあなたが何を意味するのか分かりません(なぜなら、私はあなたの問題を理解するのに苦労していると思うからです)。

これらのテンプレートを使用すると、可変量のVMを配備し、異なるキーボードキーをそれらのパスワードとして使用できます。例:1つの秘密と4 UbuntuのVMの持つ1つの秘密と3 UbuntuのVMの別の
1 WindowsのVMを持つと

2のWindows VMの別の

であなたは簡単にCentOSのように、他の画像にそれを拡張することができます。
テンプレートを見てもわかるように、私はarrayscopyindex()を使って適切な値を入力しています。

これはあなたが後であるかどうかを教えてください。これらのgithub rawリンクを使用する際にはいくつかの形式のキャッシュを使用するので注意してください。githubからのデプロイメントはエラーでうまくいかず、その場合は(RAWではない)リンクを使用してローカルマシンにコピーしてアップロードしてくださいいくつかのサービスはpastebinのように、そこから展開します。

+0

あなたがやったことは、私が探していたものではなく、入れ子になったテンプレートに別々のカウントを与えて、それを配列に与えるというあなたのアプローチが必要でした。いつものように、あなたの答えが最も役立っています。私はMVPに値すると信じています。あなたのテンプレートにはいくつかの問題があります。ネストされたテンプレートのいくつかのタイプミスがあります。ネストされたテンプレートの複数のカウントを展開すると、それらは互いに衝突する可能性があります(VNETとAvailabilityのセットはそれぞれ別の設定を上書きしようとします)。 VNETと可用性セットを親テンプレートに移動する方がよいでしょう。しかし、私は100%満足しています! – Max

+0

2 typo?あなたはそれらを指摘してもらえますか?私はそのテンプレートを配備していて、完璧に機能しました。あなたはgithubとそのキャッシングに関する私のアドバイスに従ったのですか? @Maxと親切な言葉に感謝;) – 4c74356b41

+0

はい、GitHubキャッシングの問題が発生しました。場合によってはARMにすぐに新しいバージョンを提供することもあり、時には新しく生成されたファイルも5分間与えないことがあります。 ネストされたテンプレートでは、行10にカンマを追加する必要がありました。 は、行45と行50を「」「virtualNetworkName」で置き換えなければなりませんでした: "concat [parameters(" prefix ")、 'myVNET']"、 " ' "availabilitySetName": "concat [パラメータ("接頭辞 ")、 'myAvSet']"、 ' それ以外の場合は、VSから私のために配備されません。 – Max

関連する問題