0

나는 https://github.com/Azure/azure-quickstart-templates/tree/master/101-servicebus-topic 예제를 보았다. 이제 중첩 된 리소스 루핑 (https://azure.microsoft.com/en-us/documentation/articles/resource-group-create-multiple/#looping-on-a-nested-resource)을 사용하여 배포 스크립트를 실행할 때 여러 항목을 만드는 방법을 알아 내려고합니다.ARM 템플릿을 사용하여 여러 서비스 버스 항목을 만드는 방법은 무엇입니까?

serviceBusTopicName의 값으로 배열을 정의한 다음 수동으로 수행하는 대신 루프를 통해 주제를 만드는 것이 좋을 것입니다.

배포 할 때 다음 오류가 발생합니다.

Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource '[parameters('serviceBusTopicName')[copyIndex()]]' at line '72' column '14' is not valid. 
Copying nested resources is not supported. Please see https://aka.ms/arm-copy/#looping-on-a-nested-resource for usage details.'. 

이것은 내가 작업하려고 시도한 template.json입니다.

"parameters": { 
"serviceBusNamespaceName": { 
    "type": "string", 
    "metadata": { 
    "description": "Name of the Service Bus namespace" 
    } 
}, 
"serviceBusTopicName": { 
    "type": "array", 
    "metadata": { 
    "description": "Name of the Topic" 
    } 
}, 
"serviceBusApiVersion": { 
    "type": "string", 
    "defaultValue": "2015-08-01", 
    "metadata": { 
    "description": "Service Bus ApiVersion used by the template" 
    }, 
    "resources": [ 
{ 
    "apiVersion": "[variables('sbVersion')]", 
    "name": "[parameters('serviceBusNamespaceName')]", 
    "type": "Microsoft.ServiceBus/Namespaces", 
    "location": "[variables('location')]", 
    "kind": "Messaging", 
    "sku": { 
    "name": "StandardSku", 
    "tier": "Standard" 
    }, 
    "resources": [ 
    { 
     "apiVersion": "[variables('sbVersion')]", 
     "name": "[parameters('serviceBusTopicName')]", 
     "type": "Topics", 
     "dependsOn": [ 
     "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]" 
     ], 
     "properties": { 
     "path": "[parameters('serviceBusTopicName')]" 
     }, 
     "copy": { 
     "name": "datasetcopy", 
     "count": "[length(parameters('serviceBusTopicName'))]" 
     } 
    } 
    ] 
}, 

parameters.json

{"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", 
"contentVersion": "1.0.0.0", 
"parameters": { 
    "serviceBusNamespaceName": { 
     "value": "ServiceBus" 
    }, 
    "serviceBusTopicName": { 
    "value": [ 
     "Person", 
     "Stadium", 
     "Team" 
    ] 
    }, 
    "serviceBusApiVersion": { 
     "value": "2015-08-01" 
    } 
} 

답변

0

오류 메시지의 링크를 꽤 잘 통과하지만, 당신이 최고 수준으로 자원을 밀어 필요가 중첩 된 자원 루프를 가질 수 없습니다, 그런 다음 이름을 사용하여 리소스를 서로 연결합니다. 당신이 무엇을 보인다 할 것이 템플릿을하려고합니다 : @Lain 말했듯이

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
    "serviceBusNamespaceName": { 
     "type": "string", 
     "metadata": { 
     "description": "Name of the Service Bus Namespace" 
     } 
    }, 
    "serviceBusTopicNames": { 
     "type": "array", 
     "metadata": { 
     "description": "Name of the Service Bus Topic" 
     } 
    } 
    }, 
    "variables": { 
    "sbVersion": "2015-08-01" 
    }, 
    "resources": [ 
    { 
     "apiVersion": "[variables('sbVersion')]", 
     "name": "[parameters('serviceBusNamespaceName')]", 
     "type": "Microsoft.ServiceBus/namespaces", 
     "location": "[resourceGroup().location]", 
     "properties": { 
     } 
    }, 
    { 
     "apiVersion": "[variables('sbVersion')]", 
     "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('serviceBusTopicNames')[copyIndex()])]", 
     "type": "Microsoft.ServiceBus/namespaces/Topics", 
     "dependsOn": [ 
     "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]" 
     ], 
     "copy": { 
     "name": "datasetcopy", 
     "count": "[length(parameters('serviceBusTopicNames'))]" 
     }, 
     "properties": { 
     "path": "[parameters('serviceBusTopicNames')[copyIndex()]]" 
     }, 
     "resources": [ 
     ] 
    } 
    ] 
} 
0

, 중첩 된 자원을 복사하는 것은 지금 Check Here의로 지원되지 않습니다. 여러 자원을 전개하려면이를 루트로 이동해야합니다. 방금 여러 항목 (Namespace가 이미 있다고 가정하는 항목)을 배포하기 위해 POC를 완료했습니다. 여기 코드가 있습니다. 주제 이름을 쉼표로 구분 된 문자열로 전달합니다.

{ 
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#", 
"contentVersion": "1.0.0.0", 
"parameters": { 
    "serviceBusNamespaceName": { 
     "type": "string", 
     "metadata": { 
      "description": "Name of the Service Bus namespace" 
     } 
    }, 
    "serviceBusTopicName": { 
     "type": "string", 
     "metadata": { 
      "description": "Comma seperated Topic Names" 
     } 
    }, 
    "serviceBusApiVersion": { 
     "type": "string", 
     "defaultValue": "2015-08-01", 
     "metadata": { 
      "description": "Service Bus ApiVersion used by the template" 
     } 
    } 
}, 
"variables": { 
    "location": "[resourceGroup().location]", 
    "sbVersion": "[parameters('serviceBusApiVersion')]", 
    "TopicNames": "[split(parameters('serviceBusTopicName'), ',')]" 
}, 
"resources": [{ 
    "apiVersion": "[variables('sbVersion')]", 
    "name": "[concat(parameters('serviceBusNamespaceName'), '/', variables('TopicNames')[copyIndex()])]", 
    "type": "Microsoft.ServiceBus/Namespaces/Topics", 
    "copy": { 
     "name": "TopicNameCopy", 
     "count": "[length(variables('TopicNames'))]" 
    }, 
    "properties": { 
     "path": "[variables('TopicNames')[copyIndex()]]" 
    } 
}] 
}