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


эффект Политика Azure определений deployIfNotExists

auditIfNotExistsdeployIfNotExists Аналогично определению политики выполняется развертывание шаблона при выполнении условия. Для назначения политик с заданным эффектом 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 группой ресурсов условия, которая является поведением по умолчанию.
    • Если задано значение Subscription, запрос применяется ко всей подписке для связанного ресурса. Для правильного вычисления область назначения должна быть задана в подписке или на более высоком уровне.
    • По умолчанию задано значение ResourceGroup.
  • evaluationDelay (необязательно)

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

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

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

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

    • Это свойство должно содержать полный шаблон развертывания, так как оно будет передано в API PUT Microsoft.Resources/deployments. Дополнительные сведения см. в документации по 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')]"
          }
        }
      }
    }
  }
}

Следующие шаги