Ошибка шаблона ARM В запросе обнаружен плохой контент JSON - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь развернуть шаблон ARM с помощью конвейера выпуска DevOps Azure. Azure KeyVault является одним из ресурсов в шаблоне. развертывание прошло успешно, когда я использую скрипт Powershell. однако при использовании конвейера выпуска Azure DevOps развертывание завершается с ошибкой «В запросе обнаружено неверное содержимое JSON»

https://i.stack.imgur.com/o9sbD.png

Определение ресурса хранилища ключей приведено ниже.

{
  "type": "Microsoft.KeyVault/vaults",
  "apiVersion": "2018-02-14",
  "name": "[parameters('keyVaultName')]",
  "location": "[parameters('location')]",
  "tags": {
    "displayName": "KeyVault"
  },
  "properties": {
    "enabledForDeployment": "[parameters('enabledForDeployment')]",
    "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
    "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
    "tenantId": "[parameters('tenantId')]",
    "accessPolicies": [],
    "sku": {
      "name": "[parameters('skuName')]",
      "family": "A"
    }
  }
}

Обновление: я подозревал, что это может быть из-за идентификатора арендатора и жестко закодировал идентификатор арендатора для тестирования. Но все равно не повезло.

1 Ответ

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

Согласно журналу, вы задаете параметры переопределения в задаче. Вот почему вы используете предоставленный мной шаблон ARM, но все еще сталкиваетесь с ошибкой Bad request. Потому что в логике задачи сценарий, который в файлах ARM является телом запроса API . И мы используем этот API для создания ресурса, который вы указали в Azure. Для получения подробной логики описанной задачи вы можете обратиться к моему предыдущему ответу .

Определение параметра в шаблоне ARM правильное, но теперь ошибка, вызванная указанными параметрами переопределения:

enter image description here

В частности, ошибка связана с subscription().tenantId в определении переопределения вашего параметра.

Вы можете попытаться использовать Write-Host subscription().tenantId, чтобы получить его значение и распечатать, используя Azure powershell task . Вы увидите, что он ничего не мог получить. Одним словом, это можно использовать только в файле Json вместо использования в задании.

Итак, теперь из-за того, что из этого выражения не получено значение, вы также изменили предыдущее значение, определенное в файле JSON. будет отсутствовать значение ключевого параметра (tenantId) в теле запроса, когда задача собирается создать ресурс Azure с API.


Существует 2 решения, которые можно решитьит.

1. Не пытайтесь переопределить параметры, значение которых использует выражение.

Здесь я просто имею в виду параметр, относящийся к подписке Azure. Большая часть выражения не может быть скомпилирована в задаче развертывания Azure ARM.

2. Если вы все еще хотите переопределить эти специальные параметры специальным выражением в задаче.

Если это, вы должны сначала добавить одну задачу, чтобы получить tenantId из этого. Затем передайте его в задачу развертывания ARM.

Вы можете добавить задачу Azure Powershell, используя следующий пример сценария:

Write-Output "Getting tenantId using Get-AzureRmSubscription..."

$subscription = (Get-AzureRmSubscription -SubscriptionId $azureSubscriptionId)

Write-Output "Requested subscription: $azureSubscriptionId"

$subscriptionId = $subscription.Id
$subscriptionName = $subscription.Name
$tenantId = $subscription.tenantId

Write-Output "Subscription Id: $subscriptionId"
Write-Output "Subscription Name: $subscriptionName"
Write-Output "Tenant Id: $tenantId"
Write-Host  "##vso[task.setvariable variable=TenantID;]$$tenantId"

Затем в следующем задании вы можете использовать $ (TenantID), чтобы получить его значение.

Здесь вы можете сослаться на два превосходных блога: Blog1 и Blog2


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...