Параметр NO_PARAM в запросе недействителен. Укажите правильное значение для параметра NO_PARAM при развертывании шаблона лазурной руки с помощью Powershell.

Я пытаюсь создать хранилище резервных копий служб восстановления Azure с помощью PowerShell вместе с шаблонами рук. Для этого развертывания я создал шаблон развертывания и шаблон параметров. Я редактирую файл json шаблона параметров с помощью powershell с помощью ConvertFrom-Json и снова конвертирую обратно в json и saivng в файл tempalte с помощью ConvertTo-Json.

Когда я выполняю New-AzResourceGroupDeployment, я получаю странную ошибку, как показано ниже: Параметр NO_PARAM в запросе недействителен. Укажите правильное значение для параметра NO_PARAM

Ниже находится backuppolicy.deploy.json

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Recovery Services Vault"
      }
    },
    "policyName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Backup Policy"
      }
    },
    "scheduleRunDays": {
      "type": "array",
      "metadata": {
        "description": "Backup Schedule will run on array of Days like, Monday, Tuesday etc. Applies in Weekly Backup Type only."
      }
    },
    "scheduleRunTimes": {
      "type": "array",
      "metadata": {
        "description": "Times in day when backup should be triggered. e.g. 01:00, 13:00. This will be used in LTR too for daily, weekly, monthly and yearly backup."
      }
    },
    "timeZone": {
      "type": "string",
      "metadata": {
        "description": "Any Valid timezone, for example:UTC, Pacific Standard Time. Refer: https://msdn.microsoft.com/en-us/library/gg154758.aspx"
      }
    },
    "weeklyRetentionDurationCount": {
      "type": "int",
      "metadata": {
        "description": "Number of weeks you want to retain the backup"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "resources": [
    {
      "apiVersion": "2016-06-01",
      "name": "[concat(parameters('vaultName'), '/', parameters('policyName'))]",
      "type": "Microsoft.RecoveryServices/vaults/backupPolicies",
      "location": "[parameters('location')]",
      "properties": {
        "backupManagementType": "AzureIaasVM",
        "instantRpRetentionRangeInDays": 5,
        "schedulePolicy": {
          "scheduleRunFrequency": "Weekly",
          "scheduleRunDays": "[parameters('scheduleRunDays')]",
          "scheduleRunTimes": "[parameters('scheduleRunTimes')]",
          "schedulePolicyType": "SimpleSchedulePolicy"
        },
        "retentionPolicy": {
          "dailySchedule": null,
          "weeklySchedule": {
            "daysOfTheWeek": "[parameters('scheduleRunDays')]",
            "retentionTimes": "[parameters('scheduleRunTimes')]",
            "retentionDuration": {
              "count": "[parameters('weeklyRetentionDurationCount')]",
              "durationType": "Weeks"
            }
          },
          "retentionPolicyType": "LongTermRetentionPolicy"
        },
        "timeZone": "[parameters('timeZone')]"
      }
    }
  ]
}

Ниже приведен файл backuppolicy.parameters.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vaultName": {
      "value": "diskencrypt"
    },
    "policyName": {
      "value": "autoamted-policy-changed"
    },
    "scheduleRunDays": {
      "value": [
        "Monday",
        "Tuesday",
        "Friday"
      ]
    },
    "scheduleRunTimes": {
      "value": [
        "20200309T110019Z"
      ]
    },
    "timeZone": {
      "value": "UTC"
    },
    "weeklyRetentionDurationCount": {
      "value": 5
    }
  }
}

Ниже приведен код PowerShell, который я использовал для изменения шаблона json и запуска развертывания

$days = "Monday,Tuesday,Friday"
$ScheduleBackupDays = @()
$days = $days.Split(',')
$CurrentTime = @(Get-Date -Format yyyyMMddTHHmmssZ)
foreach($day in $days){
    $ScheduleBackupDays += $day
}
$params = @{
    policyName = "autoamted-policy-changed"
    vaultName = "diskencrypt"
    scheduleRunDays = $ScheduleBackupDays
    scheduleRunTimes = $CurrentTime
    timeZone = "UTC"
    weeklyRetentionDurationCount = 5

}
$templateFile = "$PSScriptRoot\backuppolicy.deploy.json"
$paramtersfile = "$PSScriptRoot\backuppolicy.parameters.json"

$ParameterFileObject = Get-Content -Path $paramtersfile -Raw | ConvertFrom-Json

foreach($Key in $params.Keys){
    $ParameterFileObject.parameters.$Key.value = $params.Get_Item($Key)
}

$ParameterFileObject | ConvertTo-Json -Depth 100 | foreach { [System.Text.RegularExpressions.Regex]::Unescape($_) } | Set-Content -Path $paramtersfile

New-AzResourceGroupDeployment -ResourceGroupName diskencrypt -TemplateFile $templateFile -TemplateParameterFile $paramtersfile

Работает ли при исправлении метки времени (см. Мой ответ)?   —  person Vishnu    schedule 12.03.2020

См. также:  Что у меня было на этой неделе
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Vishnu

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

    "scheduleRunTimes": {
                "value": [
                    "20200309T110019Z"
                ]
            }
    

    Здесь есть две проблемы:

    1. Форматирование неправильное. ARM ожидает отметку времени UTC в соответствии с ISO-8601 со всеми дефисами и двоеточиями: 2020-03-09T11:00:19Z
    2. Вы не можете указывать секунды в вашем scheduleRunTimes. Фактически разрешены только 30-минутные шаги.

    Уберите 19 секунд с конца в этом примере, и все будет хорошо:

    "scheduleRunTimes": {
                "value": [
                    "2020-03-09T11:00:00Z"
                ]
            }
    

    Если текущий час — это все, что вам нужно, вы можете изменить форматирование метки времени в сценарии PowerShell следующим образом:

    $CurrentTime = @(Get-Date -Format 'yyyy-MM-dd-THH:00:00Z')
    

    Если вам нужно округлить до ближайших полчаса n, все становится немного сложнее с объектами даты и времени, поскольку нет возможности сборки для округления.

    Предполагая, что вы хотите исключить временные метки, которые находятся в будущем, округление до последних 30 минут должно быть нормальным:

    $date = Get-Date
    $roundedDate = $date.AddMinutes(-($date.Minute % 30))
    $CurrentTime = Get-Date $roundedDate -Format 'yyyy-MM-ddTHH:mm:00Z'
    
  2. Vishnu

    Вы можете установить значение scheduleRunTimes в файле Parameters.json в следующем формате. ARM ожидает отметку времени UTC в соответствии с ISO-8601 со всеми дефисами и двоеточиями: 2020-06-26T05: 30: 00Z

    "scheduleRunTimes": {
            "value": [
                "2020-06-26T05:30:00Z"
            ]
        },
        "dailyRetentionDurationCount": {
            "value": 104
        },
        "scheduleRunDays": {
            "value": [
                "Monday",
                "Tuesday",
                "Friday"
            ]
        },
    

    Надеюсь, это сработает.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: