Поделиться через


Выходные данные в шаблонах ARM

В этой статье описывается определение выходных значений в шаблоне Azure Resource Manager (шаблон ARM). Вы используете выходные данные, когда вам нужно вернуть значения из развернутых ресурсов.

Формат каждого выходного значения должен соответствовать одному из типов данных.

Подсказка

Bicep рекомендуется, так как он предлагает те же возможности, что и шаблоны ARM, и синтаксис проще использовать. Дополнительные сведения см. в выходных данных.

В шаблоне ограничено 64 выходных данных. Дополнительные сведения см. в разделе об ограничениях шаблона.

Определение выходных значений

Следующий пример показывает, как извлечь свойство из развернутого ресурса. Добавьте раздел выходных данных в шаблон. Выходное значение получает полное доменное имя для общедоступного IP-адреса:

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
  },
}

Если необходимо вывести свойство с дефисом в имени, вместо нотации с точками заключите имя в квадратные скобки. Например, используйте функцию ['property-name'] вместо .property-name.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "user": {
      "user-name": "Test Person"
    }
  },
  "resources": [
  ],
  "outputs": {
    "nameResult": {
      "type": "string",
      "value": "[variables('user')['user-name']]"
    }
  }
}

Условный вывод

Вы можете использовать элемент condition для условного возврата значения. Обычно условный вывод используется при условном развертывании ресурса. В следующем примере показано, как условно вернуть идентификатор ресурса для общедоступного IP-адреса на основе развертывания нового:

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

Простой пример условного вывода см. в шаблоне условного вывода.

Динамическое число выходов

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

"outputs": {
  "storageEndpoints": {
    "type": "array",
    "copy": {
      "count": "[parameters('storageCount')]",
      "input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
    }
  }
}

Дополнительные сведения см. в выходных итерациях в шаблонах ARM.

Связанные шаблоны

Вы можете развернуть связанные шаблоны, используя связанные шаблоны. Чтобы получить выходное значение из связанного шаблона, используйте reference функцию в родительском шаблоне. Синтаксис родительского шаблона:

"[reference('<deploymentName>').outputs.<propertyName>.value]"

В следующем примере показано, как задать IP-адрес подсистемы балансировки нагрузки, извлекая значение из связанного шаблона:

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

Если имя свойства имеет дефис, используйте скобки вокруг имени вместо нотации точек.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}

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

Пример шаблона

Следующий шаблон не развертывает ресурсы. В нем показаны некоторые способы возврата выходных данных различных типов:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[deployment().name]"
    },
    "integerOutput": {
      "type": "int",
      "value": "[length(environment().authentication.audiences)]"
    },
    "booleanOutput": {
      "type": "bool",
      "value": "[contains(deployment().name, 'demo')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[environment().authentication.audiences]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[subscription()]"
    }
  }
}

Получение выходных значений

После успешного развертывания выходные значения автоматически возвращаются в результатах развертывания.

Чтобы получить выходные значения из журнала развертывания, можно использовать скрипт.

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

Сортировка объектов в выходных данных

В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.

Дальнейшие шаги

Сведения о доступных свойствах выходных данных см. в структуре и синтаксисе шаблонов ARM.