2016-09-01 6 views
2

Azure Resource Manager (ARM) 템플릿은 Linked Templates을 사용할 수 있습니다. 이러한 링크 된 템플릿은 ARM 템플릿 배포 중에 만들 수있는 추가 리소스를 정의 할 수 있습니다.Azure Resource Manager에서 종속성 처리 링크 된 템플릿

ARM 템플릿은 dependencies을 지원하므로 일부 리소스가 생성되기 전에 다른 리소스가 만들어 지도록합니다.

마스터 템플릿에서 생성 된 리소스의 링크 된 템플릿에 종속성을 지정하고 싶습니다. dependsOn이 올바른 것처럼 보이지만

"resources": [ 
    { 
     "apiVersion": "2015-08-01", 
     "type": "Microsoft.Web/sites/hostNameBindings", 
     "name": "[concat(parameters('siteName'),'/', parameters('fqdn'))]", 
     "dependsOn": [ 
      "[concat('Microsoft.Web/sites/', parameters('siteName'))]" 
     ], 
     "properties": { 
      "siteName": "[parameters('siteName')]" 
     } 
    } 
] 

의 자원이 ARM 템플릿을 배포 Microsoft.Web/sites/{siteNameParameter}에서 생성되는 출력 다음과 같은 오류 메시지가 :

내가 링크 된 템플릿의 종속성을 포함하는 경우는 다음과 같습니다

InvalidTemplate : 배포 템플릿 유효성 검사가 실패했습니다 : ''Microsoft.Web/sites/blahblahblahblah '리소스가 템플릿에 정의되어 있지 않습니다. 자세한 사용법은 https://aka.ms/arm-template을 참조하십시오. '.

현재 연결된 템플릿 호출을 정의 할 때 마스터 템플릿에서이 종속성을 정의하고 있습니다. 이것은 부서지기 쉽고 부서지기 쉬운 것처럼 보입니다. 마스터 ARM 템플릿에서 종속성을 정의하는 것보다 나은 방법이 있습니까?

{ 
    "apiVersion": "2015-01-01", 
    "name": "SomeName", 
    "type": "Microsoft.Resources/deployments", 
    "dependsOn": [ 
     "[concat('Microsoft.Web/sites/', parameters('siteName'))]" 
    ], 
    "properties": { 
     "mode": "Incremental", 
     "templateLink": { 
      "uri": "https://tempuri.org/supersecrettemplatepath/azuredeploy.json", 
      "contentVersion": "1.0.0.0" 
     }, 
     "parameters": 
     { 
      "fqdn": { 
       "value": "www.tempuri.org" 
      }, 
      "siteName": { 
       "value": "[parameters('siteName')]" 
      } 
     } 
    } 
} 

답변

3

종속성을 정의 할 수 있습니다. 두 가지 모두 유효합니다. 배포 리소스에 종속성을 두는 방법 (두 번째 방법)은 웹 사이트가 프로비저닝 될 때까지 전체 중첩 배포가 시작되지 않음을 의미합니다. 병렬로 몇 가지 작업을 시작하려면 종속성을 중첩 템플릿에 적용합니다 (첫 번째 방법). 그것은 당신 시나리오에 대해 중요 할 수도 있고 그렇지 않을 수도 있지만, 그것은 중요한 차이입니다.

dependsOnresourceId 필요 - 에러가 말하고자하는대로 자원이 템플릿에 정의되지 않은 경우, 당신은이 경우에, 당신은 resourceGroup (아마도 구독을 필요는 resourceId에서 자세한 내용을 필요로하지만 의심). 그래서 예를 들어, 당신은 사용할 수 있습니다

"dependsOn": [ 
    "[resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]" 
], 
+0

재미있는! 나는 이것을 굴려야 할 것이다. resourceGroup(). name은 기본적으로 모든'dependsOn' 호출에 자동으로 채워 져야한다는 것을 이해하고 있습니다. 중첩 된 템플릿의 경우가 아닙니까? –

+0

정렬 - 제공되지 않으면 동일한 템플릿에 있다고 가정합니다. 실제로 중첩 된 템플릿은 AzureRM의 개별/독립 배포입니다. –

+1

유감스럽게도 이전과 같은 오류 메시지가 출력됩니다. '''배포 템플릿 유효성 검사에 실패했습니다 : ''Microsoft.Web/sites/somesite '리소스가 템플릿에 정의되어 있지 않습니다. "'' –

0
"dependsOn": [ 
    "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]" 
], 
+1

이것은 오류 메시지를 지나쳐 버렸지 만 종속성을 기다리지 않았습니다. ( – MPavlak