2017-01-26 3 views
2

나는 부하 분산을 설정 한 ARM 템플릿을 가지고 있고 나는 (LB)에 규칙 및 프로브를 추가하여 포트 구멍의 수를 추가 할 ARM 템플릿의 속성을 루프 오버 할 수 있습니까?

내가 지금까지 가지고있는 템플릿입니다 :

{ 
     "type": "Microsoft.Network/loadBalancers", 
     "name": "LB-front", 
     "apiVersion": "2016-03-30", 
     "location": "westeurope", 
     "tags": { }, 
     "properties": { 
      "frontendIPConfigurations": [ 
       { 
        "name": "LoadBalancerIPConfig", 
        "properties": { 
         "privateIPAllocationMethod": "Dynamic", 
         "publicIPAddress": { 
          "id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_lbipdev_0_name'))]" 
         } 
        } 
       } 
      ], 
      "backendAddressPools": [ 
       { 
        "name": "LoadBalancerBEAddressPool" 
       } 
      ], 
      "loadBalancingRules": [ 
       { 
        "name": "AppPortLBRule1", 
        "properties": { 
         "frontendIPConfiguration": { 
          "id": "[parameters('loadBalancers_LB_dev_id_6')]" 
         }, 
         "frontendPort": 80, 
         "backendPort": 80, 
         "enableFloatingIP": false, 
         "idleTimeoutInMinutes": 5, 
         "protocol": "Tcp", 
         "loadDistribution": "Default", 
         "backendAddressPool": { 
          "id": "[parameters('loadBalancers_LB_dev_id_7')]" 
         }, 
         "probe": { 
          "id": "[parameters('loadBalancers_LB_dev_id_8')]" 
         } 
        } 
       }, 
       { 
        "name": "AppPortLBRule2", 
        "properties": { 
         "frontendIPConfiguration": { 
          "id": "[parameters('loadBalancers_LB_dev_id_9')]" 
         }, 
         "frontendPort": 81, 
         "backendPort": 81, 
         "enableFloatingIP": false, 
         "idleTimeoutInMinutes": 5, 
         "protocol": "Tcp", 
         "loadDistribution": "Default", 
         "backendAddressPool": { 
          "id": "[parameters('loadBalancers_LB_dev_id_10')]" 
         }, 
         "probe": { 
          "id": "[parameters('loadBalancers_LB_dev_id_11')]" 
         } 
        } 
       }, 
       { 
        "name": "AppPortLBRule3", 
        "properties": { 
         "frontendIPConfiguration": { 
          "id": "[parameters('loadBalancers_LB_dev_id_12')]" 
         }, 
         "frontendPort": 82, 
         "backendPort": 82, 
         "enableFloatingIP": false, 
         "idleTimeoutInMinutes": 5, 
         "protocol": "Tcp", 
         "loadDistribution": "Default", 
         "backendAddressPool": { 
          "id": "[parameters('loadBalancers_LB_dev_id_13')]" 
         }, 
         "probe": { 
          "id": "[parameters('loadBalancers_LB_dev_id_14')]" 
         } 
        } 
       } 
      ], 
      "probes": [ 
       { 
        "name": "AppPortProbe1", 
        "properties": { 
         "protocol": "Tcp", 
         "port": 80, 
         "intervalInSeconds": 5, 
         "numberOfProbes": 2 
        } 
       }, 
       { 
        "name": "AppPortProbe2", 
        "properties": { 
         "protocol": "Tcp", 
         "port": 81, 
         "intervalInSeconds": 5, 
         "numberOfProbes": 2 
        } 
       }, 
       { 
        "name": "AppPortProbe3", 
        "properties": { 
         "protocol": "Tcp", 
         "port": 82, 
         "intervalInSeconds": 5, 
         "numberOfProbes": 2 
        } 
       } 
      ], 
      "inboundNatRules": [], 
      "outboundNatRules": [], 
      "inboundNatPools": [] 
     }, 
     "resources": [], 
     "dependsOn": [ 
      "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_lbipdev_1_name'))]" 
     ] 
    }, 

(일부 세부 사항은 생략) 내가하고 싶은 무엇

내가 규칙을 만들려는 포트 번호의 배열을 가지고하는 것입니다 명시 적으로 각 규칙 및 프로브를 자원의 등록 정보로 쓰지 않아도되는 대신에이를 조사하고 반복합니다.

기본적으로이 같은 내 템플릿의 매개 변수 또는 변수 싶습니다

"ports": [ 80, 81, 82, ...] 

을하고 나는이이 유사한 돌이 수 : https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple.

답변

4

는 당신은 최고 수준의 리소스에 복사 개체를 적용 할 수 있습니다.

자원 유형의 등록 정보 또는 하위 리소스에 적용 할 수 없습니다.

Source of Quotation: Deploy multiple instances of resources in Azure Resource Manager templates

"resources": [ 
    { 
    "type": "{provider-namespace-and-type}", 
    "name": "parentResource", 
    "copy": { 
     /* yes, copy can be applied here */ 
    }, 
    "properties": { 
     "exampleProperty": { 
     /* no, copy cannot be applied here */ 
     } 
    }, 
    "resources": [ 
     { 
     "type": "{provider-type}", 
     "name": "childResource", 
     /* copy can be applied if resource is promoted to top level */ 
     } 
    ] 
    } 
] 
할 수 있습니다 귀하의 케이스 "Microsoft.Network/에 복사 객체가 최고 수준의 리소스에 적용되는 유일한 경우 ARM 템플릿 에서 속성 돌이 loadBalancers ", 그러나 그것은 또한 상기 자원의 다중 복사본을 생성 할 것이다. 이 없습니다 당신이 무엇을 달성하고자하는 경우

, 나는 미래의 자원 유형에 속성에 ARM 템플릿 지원 복사 객체까지 기존 방식을 유지하는 당신에게 추천 할 것입니다. 기능을 당신이 달성하고자하는 어떤

+0

기술적으로 리소스가 "구체적인"리소스의 하위 리소스 인 경우 리소스를 최상위 수준으로 올리려면 어떻게해야합니까? 예 : 웹 사이트는 최상위 수준이고 웹 사이트/확장은 하위 수준입니다. 확장 리소스를 최상위 선언으로 넣고 웹 사이트에 어떤 형태의 종속성을 적용 할 수 있습니까? –

+0

답변 주셔서 감사합니다. –

+0

이 질문에 대한 대답은 용납 할 수 있습니까? – juvchan

0

이 가능합니다. 올바른 문서 사이트를 직접 링크했습니다. 당신이 게시 된 링크로 이동하여 섹션 을 확인을 "복사가 작동하지 않을 때 여러 인스턴스 만들기"를 참조하십시오. 귀하의 경우

이 같을 것이다 :

"variables": { 
    "probeArray": [      
      { 
      "name": "AppPortProbe1", 
      "properties": { 
       "protocol": "Tcp", 
       "port": 80, 
       "intervalInSeconds": 5, 
       "numberOfProbes": 2 
      } 
      }, 
      { 
      "name": "AppPortProbe2", 
      "properties": { 
       "protocol": "Tcp", 
       "port": 81, 
       "intervalInSeconds": 5, 
       "numberOfProbes": 2 
      } 
      }, 
      { 
      "name": "AppPortProbe3", 
      "properties": { 
       "protocol": "Tcp", 
       "port": 82, 
       "intervalInSeconds": 5, 
       "numberOfProbes": 2 
      } 
      } 
    ], 

당신은 다음

"parameters": { 
... 
"numProbes": { 
    "type": "int", 
    "maxValue": 3, 
    "metadata": { 
    "description": "This parameter allows you to select the number of probes you want" 
    } 
} 

마지막으로 당신이 자원 내부 걸릴 사용 방법을 다양한 프로브 지정하는 매개 변수를 만들 :

"resources": [ 
... 
{ 
    "type": "Microsoft.Network/loadBalancers", 
    "properties": { 
     ... 
     "probes": "[take(variables('probeArray'),parameters('numProbes'))]" 
    }, 
    ... 
    } 
    ... 
} 
] 

당신이 계속하는 경우 문서를 통해 더 많은 것을 얻을 수 있고 사본을 결합하고 링크 된 템플릿으로 가져갈 수 있음을 알 수 있습니다.https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple#property-iteration 또는 https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-multiple#create-multiple-instances-of-a-child-resource

에 명시된 바와 같이

+0

이것이 모든 프로브를 선언해야한다는 의미는 아니지만 대신 variablea를 사용하십시오. 한 가지 방법으로 변경 사항을 선언하기 만하면됩니다. 예를 들어 포트 번호가 변경되었습니다. –

+0

네, 그렇게 할 때 프로브를 정의해야합니다. copyIndex()로 속성을 반복하는 쉬운 방법은 없습니다. – TobiWi

1

이 속성 또는 하위 자원에 루프 할 수있게되었습니다 할 수 있습니다 형식을 따라 최상위 리소스로 하위 자원 확장 (예 : 웹 사이트/확장) 유형에 대한 : 예를 당신은 CONCAT하여 하위 자원의 부모 리소스를 참조 할 수도 있습니다 Microsoft.Web/sites/siteextensions

를 들어 {resource-provider-namespace}/{parent-resource-type}/{child-resource-type}. . 예 : "name": "[concat('mywebsite', '/', 'myextension', copyIndex())]"