2017-10-27 3 views
0

複数のネットワークセキュリティグループ(NSG)を構築し、 "カウント"を使ってvNetサブネットに適用してテンプレートコードを最小限に抑えるjsonオブジェクトを作成しようとしています。 The Microsoft Documentation covers how to create an object for one NSG's settingsの「コピーループでのプロパティオブジェクトの使用」の項を参照してください。これは私が必要とする各NSG用の新しいパラメータオブジェクトと各NSG用の長いテンプレートコードを作成する必要があります。アズールアームのテンプレートネストされた配列をパラメータとして

私は現在、次のパラメータオブジェクトを使用して、NSGを含む仮想ネットワークに関するすべての情報を保持しています。最も

{ 
     "apiVersion": "2016-06-01", 
     "type": "Microsoft.Network/networkSecurityGroups", 
     "name": "[concat(parameters('vNetProperties').subnetNames[copyIndex(1)], '-nsg')]", 
     "location": "[resourceGroup().location]", 
     "copy": { 
     "name": "NSGs", 
     "count": "[length(array(parameters('vNetProperties').networkSecurityGroups))]" 
     }, 
     "properties": { 
     "copy": [ 
      { 
      "name": "securityRules", 
      "count": "[length(array(parameters('vNetProperties').networkSecurityGroups[copyIndex('securityRules')]))]", 
      "input": { 
       "description": "[parameters('vNetProperties').networkSecurityGroups[0].securityRules[0].description]", 
       "priority": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].priority]", 
       "protocol": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].protocol]", 
       "sourcePortRange": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].sourcePortRange]", 
       "destinationPortRange": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].destinationPortRange]", 
       "sourceAddressPrefix": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].sourceAddressPrefix]", 
       "destinationAddressPrefix": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].destinationAddressPrefix]", 
       "access": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].access]", 
       "direction": "[parameters('vNetProperties').networkSecurityGroups[copyIndex('NSGs')].securityRules[copyIndex('securityRules')].direction]" 
      } 
      } 
     ] 
     } 
    } 

私のコード今:NSGsは、最初のサブネット「GatewaySubnetは」NSG

"vNetProperties": { 
    "value": { 
     "vNetAddressSpace": "10.136.0.0/16", 
     "subnetNames": [ 
      "GatewaySubnet", 
      "Kemp-frontend-subnet", 
      "AD-backend-subnet" 
     ], 
     "subnetRanges": [ 
      "10.136.0.0/27", 
      "10.136.1.0/24", 
      "10.136.2.0/24" 
     ], 
     "networkSecurityGroups": { 
      "value": { 
       "kempNSG": { 
        "value": { 
         "securityRules": [ 
          { 
           "name": "HTTPS", 
           "description": "allow HTTPS connections", 
           "direction": "Inbound", 
           "priority": 100, 
           "sourceAddressPrefix": "*", 
           "destinationAddressPrefix": "10.0.0.0/24", 
           "sourcePortRange": "*", 
           "destinationPortRange": "443", 
           "access": "Allow", 
           "protocol": "Tcp" 
          }, 
          { 
           "name": "HTTP", 
           "description": "allow HTTP connections", 
           "direction": "Inbound", 
           "priority": 100, 
           "sourceAddressPrefix": "*", 
           "destinationAddressPrefix": "10.0.0.0/24", 
           "sourcePortRange": "*", 
           "destinationPortRange": "80", 
           "access": "Allow", 
           "protocol": "Tcp" 
          } 
         ] 
        } 
       }, 
       "adNSG": { 
        "value": { 
         "securityRules": [ 
          { 
           "name": "RDPAllow", 
           "description": "allow RDP connections", 
           "direction": "Inbound", 
           "priority": 100, 
           "sourceAddressPrefix": "*", 
           "destinationAddressPrefix": "10.0.0.0/24", 
           "sourcePortRange": "*", 
           "destinationPortRange": "3389", 
           "access": "Allow", 
           "protocol": "Tcp" 
          } 
         ] 
        } 
       } 
      } 
     } 
    } 
} 

を必要とする対象から除外された状態で、次のようにオブジェクトを処理する私のテンプレートコードは、サブネットに接続します間違いなく動作しません。私はこのタイプのロジックを検証する必要がある時点で、現時点ではARMでも可能です。配列を持つことは可能ですか?配列の各項目は配列そのものであり、array1 [i] .array2 [j] .name?

答えて

0

このアプローチはうまくいきません。そのようなリソースや参照オブジェクトにはループとプロパティのコピーループを使用できません(悲しいことに)。

親オブジェクト(networkSecurityGroups)ごとにネストされたデプロイメントを作成し、そのデプロイメントでプロパティーコピーループ(セキュリティールール)を作成することができます。それはあなたがコピーループしか持たないのでうまくいくでしょう。

関連する問題