Резервные копии виртуальных машин политики Azure DeployIfNotExist PolicyEvaluationRetriesExceeded - PullRequest
0 голосов
/ 23 октября 2019

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

{
  "properties": {
    "displayName": "Virtual Machine OS Backup",
    "policyType": "Custom",
    "mode": "All",
    "metadata": {
      "category": "Compute"
    },
    "parameters": {},
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Compute/virtualMachines"
          }
        ]
      },
      "then": {
        "effect": "deployIfNotExists",
        "details": {
          "type": "Microsoft.RecoveryServices/backupprotecteditems",
          "existenceCondition": {
            "allOf": [
              {
                "field": "name",
                "like": "*"
              }
            ]
          },
          "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
          ],
          "deployment": {
            "properties": {
              "mode": "incremental",
              "parameters": {
                "VMName": {
                  "value": "[field('name')]"
                },
                "VMRG": {
                  "value": "[resourcegroup().name]"
                },
                "VMLocation": {
                  "value": "[field('location')]"
                }
              },
              "template": {
                "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
                "contentVersion": "1.0.0.1",
                "parameters": {
                  "VMName": {
                    "type": "string"
                  },
                  "VMRG": {
                    "type": "string"
                  },
                  "VMLocation": {
                    "type": "string"
                  }
                },
                "variables": {
                  "BackupVaultRGName": "[concat('RGP-BACKUPS-', toUpper(parameters('VMLocation')))]",
                  "BackupVaultName": "[concat('rsv-backups-',toLower(parameters('VMLocation')))]",
                  "BackupPolicyName": "DefaultPolicy",
                  "BackupIntentConcat": "[concat('/Azure/vm;iaasvmcontainerv2;',parameters('VMRG'),';',parameters('VMName'))]"
                },
                "resources": [
                  {
                    "type": "Microsoft.Resources/resourceGroups",
                    "apiVersion": "2018-05-01",
                    "location": "[parameters('VMLocation')]",
                    "name": "[variables('BackupVaultRGName')]",
                    "properties": {},
                    "resources": [
                      {
                        "apiVersion": "2018-05-01",
                        "name": "[concat(parameters('VMName'), '-' , 'BackupIntent')]",
                        "type": "Microsoft.Resources/deployments",
                        "resourceGroup": "[variables('BackupVaultRGName')]",
                        "dependsOn": [
                          "[resourceId('Microsoft.Resources/resourceGroups', variables('BackupVaultRGName'))]"
                        ],
                        "properties": {
                          "mode": "Incremental",
                          "template": {
                            "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                            "contentVersion": "1.0.0.0",
                            "resources": [
                              {
                                "name": "[concat(variables('BackupVaultName'),variables('BackupIntentConcat'))]",
                                "apiVersion": "2017-07-01",
                                "type": "Microsoft.RecoveryServices/vaults/backupFabrics/backupProtectionIntent",
                                "properties": {
                                  "protectionIntentItemType": "AzureResourceItem",
                                  "policyId": "[resourceId(variables('BackupVaultRGName'),'Microsoft.RecoveryServices/vaults/backuppolicies', variables('BackupVaultName'), variables('BackupPolicyName'))]",
                                  "sourceResourceId": "[resourceId(parameters('VMRG'),'Microsoft.Compute/virtualMachines', parameters('VMName'))]"
                                },
                                "dependsOn": [
                                  "[resourceId(variables('BackupVaultRGName'),variables('BackupVaultRGName'),'Microsoft.RecoveryServices/vaults', variables('BackupVaultName'))]"
                                ]
                              },
                              {
                                "type": "Microsoft.RecoveryServices/vaults",
                                "apiVersion": "2018-01-10",
                                "name": "[variables('BackupVaultName')]",
                                "location": "[parameters('VMLocation')]",
                                "sku": {
                                  "name": "RS0",
                                  "tier": "Standard"
                                },
                                "properties": {}
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    }
  },
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/policyDefinitions/b99xxxxx-e44f-469f-b874-585a7b10eb58",
  "type": "Microsoft.Authorization/policyDefinitions",
  "name": "b99xxxxx-e44f-469f-b874-585a7b10eb58"
}

Я получаю следующую ошибку:

Невозможно оценить политику с определением '/ subscription / xxxxxxxx-xxxx-xxxx-xxxx-хххххххххх / провайдеры / Microsoft.Authorization / policyDefinitions / b99xxxxx-e44f-469f-b874-585a7b10eb58 / 'и назначение' /subscription/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/providers/Microsoft.Authorization/60/44/60/60Оценка политики превысила максимально допустимое время.

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

1 Ответ

0 голосов
/ 24 октября 2019

Прежде всего, я думаю, что есть ненужные «allOf», когда вы используете только одно условие. Также я бы не стал делать так много вложений в части развертывания.

Ваши ошибки описаны здесь:

https://docs.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure#avoiding-template-failures

https://docs.microsoft.com/en-us/azure/governance/policy/concepts/effects#deployifnotexists-evaluation

Что делатьВы думаете о повторном использовании этого: https://github.com/Azure/azure-quickstart-templates/blob/master/101-recovery-services-backup-vms/azuredeploy.json

...