2016-09-01 4 views
2

Шаблоны Azure Resource Manager (ARM) имеют возможность использовать Linked Templates. Эти связанные шаблоны могут определять дополнительные ресурсы для создания во время развертывания шаблона ARM.Обработка зависимостей в Azure Resource Manager Связанные шаблоны

Поддержка шаблонов ARM dependencies, которые обеспечивают создание некоторых ресурсов перед другими.

Я хотел бы указать зависимость в связанном шаблоне для ресурса, созданного в главном шаблоне. Если я включаю зависимость в Linked шаблона, это выглядит следующим образом:

"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')]" 
     } 
    } 
] 

Хотя dependsOn кажется правильным, ресурс создан при Microsoft.Web/sites/{siteNameParameter}, развернув шаблон ARM выводит следующее сообщение об ошибке:

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

Вы можете определить зависимость в любом случае - оба действительны. Включение зависимости от ресурса развертывания (ваш второй подход) означает, что все вложенное развертывание не запускается до тех пор, пока не будет подготовлен веб-сайт. Если вы хотели бы отбросить некоторые вещи параллельно, тогда вы поместили бы зависимость во вложенный шаблон (ваш первый подход). Это может или не важно для вашего сценария, но это ключевое различие.

dependsOn требует resourceId - и, как ошибка пытается сказать, если ресурс не определен в шаблоне вам нужно больше деталей в resourceId, в этом случае вам нужно resourceGroup (возможно подписку, но я сомневаюсь). Так, например, вы можете использовать:

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

Интересно! Мне придется отдать это рулон. Это было мое понимание @ bmore-msft, что имя ресурса(). Name должно быть автоматически заполнено во всех 'dependOn'-вызовах по умолчанию, хотя. Разве это не так для вложенных шаблонов? –

+0

Сортировка - если она не указана, предполагается, что она находится в одном шаблоне - вложенные шаблоны фактически являются отдельными/независимыми развертываниями в AzureRM. –

+1

К сожалению, это выводит то же сообщение об ошибке, что и раньше. '' '" Ошибка проверки шаблона развертывания: «Ресурс« Microsoft.Web/sites/somesite »не определен в шаблоне.' '' –

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

Это заставило меня пройти сообщение об ошибке, но оно не дождалось зависимости :( – MPavlak

 Смежные вопросы

  • Нет связанных вопросов^_^