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


Эффект определения политик Azure deployIfNotExists

Аналогично auditIfNotExists, определение политики deployIfNotExists выполняет развертывание шаблона при выполнении условия. Назначения политик с эффектом DeployIfNotExists требуют управляемой идентификации для восстановления.

Примечание.

Вложенные шаблоны поддерживаются; deployIfNotExistsно связанные шаблоны в настоящее время не поддерживаются.

Оценка функции DeployIfNotExists

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

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

Свойства «DeployIfNotExists»

Свойство details эффекта DeployIfNotExists содержит все подсвойства, которые определяют, какие связанные ресурсы должны сопоставляться, и какой шаблон развертывать.

  • type (обязательно)
    • Указывает тип связанного ресурса для соответствия.
    • Если type является подтипом ресурса if условия, политика запрашивает ресурсы этого type в рамках области оцениваемого ресурса. В противном случае запросы политики в той же группе ресурсов или подписке, что и оцененного ресурса, зависят от existenceScope.
  • name (необязательно)
    • Указывает точное имя ресурса для сопоставления и приводит к тому, что политика получает один конкретный ресурс вместо всех ресурсов указанного типа.
    • Если значения условий для if.field.type и then.details.type совпадают, то name становится обязательным и должен быть [field('name')], или [field('fullName')] для дочернего ресурса.

Примечание.

type и name сегменты можно объединить для извлечения вложенных ресурсов в общем виде.

Чтобы получить определенный ресурс, можно использовать "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" и "name": "parentResourceName/nestedResourceName".

Чтобы получить коллекцию вложенных ресурсов, вместо последнего сегмента имени можно указать подстановочный знак ?. Например, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" и "name": "parentResourceName/?". Это можно объединить с функциями полей для доступа к ресурсам, связанным с вычисленным ресурсом, например "name": "[concat(field('name'), '/?')]".

  • resourceGroupName (необязательно)

    • Позволяет сопоставить связанный ресурс из другой группы ресурсов.
    • Не применяется, если type представляет собой ресурс, который будет находиться под ресурсом условия if.
    • По умолчанию используется группа ресурсов ресурса условия if.
    • Если развертывание шаблона выполняется, оно развертывается в группе ресурсов заданного значения.
  • existenceScope (необязательно)

    • Допустимые значения : Subscription и ResourceGroup.
    • Задает область, из которой следует получить связанный ресурс для соответствия.
    • Не применяется, если type является ресурсом, связанным с ресурсом if условия.
    • Для ResourceGroup ограничение будет применено к группе ресурсов, если resourceGroupName задано. Если resourceGroupName не указан, будет ограничено группой ресурсов условия if, что соответствует поведению по умолчанию.
    • Для подписки запрашивает всю подписку для связанного ресурса. Охват задачи должен быть установлен на уровне подписки или выше для правильной оценки.
    • По умолчанию используется ResourceGroup.
  • evaluationDelay (необязательно)

    • Указывает, когда необходимо оценить существование связанных ресурсов. Задержка используется только для вычислений, которые являются результатом запроса на создание или обновление ресурса.
    • Допустимые значения: AfterProvisioning, AfterProvisioningSuccessAfterProvisioningFailureили длительность ISO 8601 в диапазоне от 0 до 360 минут.
    • Значения AfterProvisioning проверяют результат подготовки ресурса, который был оценен в условии правила политики if. AfterProvisioning выполняется после завершения подготовки, независимо от результата. При определении задержек оценки AfterProvisioning, подготовка, которая занимает более шести часов, рассматривается как сбой.
    • Значение по умолчанию — PT10M 10 минут.
    • Указание длительной задержки оценки может привести к тому, что зарегистрированное состояние соответствия ресурса не обновляется до следующего триггера оценки.
  • existenceCondition (необязательно)

    • Если это не указано, любой ресурс, связанный с type, удовлетворяет эффекту и не активирует развертывание.
    • Использует тот же язык, что и правило политики для if условия, но оценивается по отдельности для каждого связанного ресурса.
    • Если любой соответствующий связанный ресурс оценивается как истинный, условие выполнено и не запускает развертывание.
    • Можно использовать [field()] для проверки эквивалентности со значениями в условии if .
    • Например, можно использовать для проверки того, что родительский ресурс (в if условии) находится в том же расположении ресурса, что и соответствующий связанный ресурс.
  • roleDefinitionIds (обязательно)

    • Это свойство должно содержать массив строк, которые соответствуют идентификаторам ролей управления доступом на основе ролей, доступных для подписки. Для получения дополнительной информации см. раздел Устранение - настройка определения политики.
  • deploymentScope (необязательно)

    • Допустимые значения : Subscription и ResourceGroup.
    • Задает тип запуска развертывания. Подписка указывает развертывание на уровне подписки и ResourceGroup указывает развертывание в группе ресурсов.
    • Свойство расположения должно быть указано в развертывании при использовании развертывания на уровне подписки.
    • По умолчанию используется ResourceGroup.
  • deployment (обязательно)

    • Это свойство должно включать полное развертывание шаблона, которое будет передано в Microsoft.Resources/deployments API PUT. Дополнительные сведения см. в REST API развертываний.
    • Вложенные в шаблон Microsoft.Resources/deployments должны использовать уникальные имена, чтобы избежать конфликтов между несколькими оценками политик. Имя родительского развертывания можно использовать как часть вложенного имени развертывания с помощью [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Примечание.

    Все функции внутри deployment свойства оцениваются как компоненты шаблона, а не политики. Исключением является parameters свойство, которое передает значения из политики в шаблон. В value этом разделе под именем параметра шаблона используется для передачи этого значения (см. полное имяDbName в примере DeployIfNotExists).

Пример DeployIfNotExists

Пример: Оценивает базы данных SQL Server, чтобы определить, включена ли transparentDataEncryption эта функция. В противном случае выполняется развертывание для включения.

"if": {
  "field": "type",
  "equals": "Microsoft.Sql/servers/databases"
},
"then": {
  "effect": "deployIfNotExists",
  "details": {
    "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
    "name": "current",
    "evaluationDelay": "AfterProvisioning",
    "roleDefinitionIds": [
      "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
      "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ],
    "existenceCondition": {
      "field": "Microsoft.Sql/transparentDataEncryption.status",
      "equals": "Enabled"
    },
    "deployment": {
      "properties": {
        "mode": "incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "fullDbName": {
              "type": "string"
            }
          },
          "resources": [
            {
              "name": "[concat(parameters('fullDbName'), '/current')]",
              "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
              "apiVersion": "2014-04-01",
              "properties": {
                "status": "Enabled"
              }
            }
          ]
        },
        "parameters": {
          "fullDbName": {
            "value": "[field('fullName')]"
          }
        }
      }
    }
  }
}

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