Согласно журналу, вы задаете параметры переопределения в задаче. Вот почему вы используете предоставленный мной шаблон ARM, но все еще сталкиваетесь с ошибкой Bad request. Потому что в логике задачи сценарий, который в файлах ARM является телом запроса API . И мы используем этот API для создания ресурса, который вы указали в Azure. Для получения подробной логики описанной задачи вы можете обратиться к моему предыдущему ответу .
Определение параметра в шаблоне ARM правильное, но теперь ошибка, вызванная указанными параметрами переопределения:
![enter image description here](https://i.stack.imgur.com/pcfR9.png)
В частности, ошибка связана с 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
Я по-прежнему рекомендую вам использовать первое решение, так как объемконвейер будет увеличиваться и усложняться при выборе второго решения.