Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
159 lines (129 sloc) 14.2 KB
title description author ms.service ms.topic ms.date ms.author ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Настройка порядка развертывания ресурсов Azure | Документация Майкрософт
В этой статье описан способ определения зависимостей между ресурсами во время развертывания для обеспечения правильного порядка развертывания ресурсов.
tfitzmac
azure-resource-manager
conceptual
03/20/2019
tomfitz
32b2b41e47fe089da70d82e6049d0139795df88a
b7a44709a0f82974578126f25abee27399f0887f
MT
ru-RU
06/18/2019
67204228

Определение порядка развертывания ресурсов в шаблонах Azure Resource Manager

У заданного ресурса могут быть другие ресурсы, которые должны существовать до его развертывания. Например, сервер SQL Server должен существовать до развертывания базы данных SQL. Эта связь определяется путем пометки одного ресурса как зависимого от другого. Для определения зависимостей можно использовать элемент dependsOn или функцию reference.

Диспетчер ресурсов оценивает зависимости между ресурсами и развертывает эти ресурсы согласно установленным зависимостям. Если ресурсы не зависят друг от друга, диспетчер ресурсов развертывает их параллельно. Необходимо только определить зависимости для ресурсов, которые развертываются в том же шаблоне.

См. Руководство. Создание шаблонов Azure Resource Manager с зависимыми ресурсами.

Свойство dependsOn

В шаблоне элемент dependsOn позволяет определить один ресурс как зависимый от одного или нескольких ресурсов. В качестве значения свойства может выступать список имен ресурсов с разделителями-запятыми.

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

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "[variables('namingInfix')]",
  "location": "[variables('location')]",
  "apiVersion": "2016-03-30",
  "tags": {
    "displayName": "VMScaleSet"
  },
  "dependsOn": [
    "[variables('loadBalancerName')]",
    "[variables('virtualNetworkName')]",
    "storageLoop",
  ],
  ...
}

В приведенном выше примере добавляется зависимость от ресурсов, которые создаются с помощью цикла копирования storageLoop. Пример см. в статье Создание нескольких экземпляров ресурсов в Azure Resource Manager.

При определении зависимостей можно указать пространство имен поставщика ресурсов и тип ресурса, чтобы избежать неоднозначности. Например, чтобы уточнить сведения о подсистеме балансировки нагрузки и виртуальной сети, имена которых, возможно, совпадают с именами других ресурсов, используйте следующий формат.

"dependsOn": [
  "[resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName'))]",
  "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]"
]

Если вы склонны использовать свойство dependsOn для сопоставления связей между ресурсами, то вам важно понимать, зачем вы это делаете. Например, для документирования связей между ресурсами использование свойства dependsOn будет неправильным решением. После развертывания невозможно запросить, какие ресурсы были определены в элементе dependsOn. Использование свойства dependsOn потенциально влияет на время развертывания, так как диспетчер ресурсов не может выполнять развертывание двух зависимых ресурсов параллельно.

Дочерние ресурсы

Свойство resources позволяет указать дочерние ресурсы, связанные с определяемым ресурсом. Дочерние ресурсы можно определять максимум на пяти нижестоящих уровнях. Важно отметить, что зависимость неявное развертывания не создается между дочерним и родительским ресурсом. Если вам нужно, чтобы дочерний ресурс был развернут после родительского ресурса, эту зависимость необходимо явно указать в свойстве dependsOn.

Каждый родительский ресурс принимает в качестве дочерних ресурсов только определенные типы ресурсов. Принимаемые типы ресурсов указаны в схеме шаблона родительского ресурса. Имя типа дочернего ресурса содержит имя типа родительского ресурса, например: Microsoft.Web/sites/config и Microsoft.Web/sites/extensions являются дочерними ресурсами по отношению к Microsoft.Web/sites.

В следующем примере показаны SQL Server и база данных SQL. Обратите внимание, что несмотря на то, что база данных является дочерним ресурсом по отношению к серверу, между базой данных SQL и сервером SQL Server определена явная зависимость.

"resources": [
  {
    "name": "[variables('sqlserverName')]",
    "type": "Microsoft.Sql/servers",
    "location": "[resourceGroup().location]",
    "tags": {
      "displayName": "SqlServer"
    },
    "apiVersion": "2014-04-01-preview",
    "properties": {
      "administratorLogin": "[parameters('administratorLogin')]",
      "administratorLoginPassword": "[parameters('administratorLoginPassword')]"
    },
    "resources": [
      {
        "name": "[parameters('databaseName')]",
        "type": "databases",
        "location": "[resourceGroup().location]",
        "tags": {
          "displayName": "Database"
        },
        "apiVersion": "2014-04-01-preview",
        "dependsOn": [
          "[variables('sqlserverName')]"
        ],
        "properties": {
          "edition": "[parameters('edition')]",
          "collation": "[parameters('collation')]",
          "maxSizeBytes": "[parameters('maxSizeBytes')]",
          "requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"
        }
      }
    ]
  }
]

Функции list и reference

Функция reference позволяет выражению получать его значение из других пар "имя JSON — значение" или ресурсов среды выполнения. Функции list* возвращают значение ресурса из списка операций. Выражения и списки со ссылками неявно объявляют, что один ресурс зависит от другого, когда выходные ресурсы развернуты в одном шаблоне и обращаются друг к другу по именам (а не по идентификатору ресурса). При передаче идентификатора ресурса функциям list или reference неявные ссылки созданы не будут.

Общий формат функции reference выглядит следующим образом.

reference('resourceName').propertyPath

Общий формат функции listKeys выглядит следующим образом.

listKeys('resourceName', 'yyyy-mm-dd')

В следующем примере конечная точка CDN явно зависит от профиля CDN и неявно зависит от веб-приложения.

{
    "name": "[variables('endpointName')]",
    "type": "endpoints",
    "location": "[resourceGroup().location]",
    "apiVersion": "2016-04-02",
    "dependsOn": [
            "[variables('profileName')]"
    ],
    "properties": {
        "originHostHeader": "[reference(variables('webAppName')).hostNames[0]]",
        ...
    }

Зависимости можно указать как с помощью этой функции, так и с помощью свойства dependsOn, но использовать оба варианта для одного зависимого ресурса не нужно. По возможности используйте неявные ссылки, чтобы избежать добавления ненужных зависимостей.

Дополнительные сведения см. в разделе о функции reference.

Циклические зависимости

Resource Manager выявляет циклические зависимости во время проверки шаблона. Если возникает ошибка и появляется сообщение о том, что существует циклическая зависимость, оцените шаблон на предмет лишних зависимостей, которые можно удалить. Если удаление зависимостей не помогает, можно избежать появления циклических зависимостей, переместив некоторые операции развертывания в дочерние ресурсы, которые развертываются после ресурсов с циклической зависимостью. Предположим, что вы развертываете две виртуальные машины, но на каждой из них необходимо задать свойства, которые ссылаются на другую виртуальную машину. Их можно развернуть в следующем порядке.

  1. vm1.
  2. vm2.
  3. Расширение на vm1 зависит от vm1 и vm2. Расширение задает на vm1 значения, получаемые от vm2.
  4. Расширение на vm2 зависит от vm1 и vm2. Расширение задает на vm2 значения, получаемые от vm1.

Сведения об оценке порядка развертывания и устранении ошибок зависимостей см. в статье Устранение распространенных ошибок развертывания в Azure с помощью Azure Resource Manager.

Дальнейшие действия

You can’t perform that action at this time.