gpt4 book ai didi

azure - ARM 模板错误 在请求中发现错误的 JSON 内容

转载 作者:行者123 更新时间:2023-12-03 02:46:27 25 4
gpt4 key购买 nike

我正在尝试使用 Azure DevOps 发布管道部署 ARM 模板。 Azure KeyVault 是模板中的资源之一。当我使用Powershell脚本时部署成功。但是,当使用 Azure DevOps Release 管道时,部署失败并出现错误“请求中发现错误的 JSON 内容”

key 保管库资源定义如下。

{
"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"
}
}
}

更新:我怀疑这可能是由于租户 ID 所致,并对租户 ID 进行了硬编码以进行测试。但还是没有运气。

最佳答案

根据日志,您正在任务中指定覆盖参数。这就是为什么您使用我提供的 ARM 模板,但仍然面临 Bad request 错误。因为在任务逻辑中,ARM文件中的脚本就是API的请求体。我们使用此 API 创建您在 azure 中指定的资源。详细的任务逻辑描述可以引用我的previous answer .

ARM模板中的参数定义是正确的,但是现在,由于指定的覆盖参数而导致的错误:

enter image description here

更具体地说,该错误是由于参数覆盖定义中的 subscription().tenantId 造成的。

您可以尝试使用Write-Host subscription().tenantId获取其值并通过Azure powershell任务打印出来。你会发现它无法得到任何东西。一句话,这个只能在Json文件中使用,不能在任务中使用。

现在,由于没有从该表达式获取任何值,因此您还覆盖了 JSON 文件中定义的先前值。当任务要使用 API 创建 Azure 资源时,请求正文中会缺少关键参数值(tenantId)。

<小时/>

有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) 来获取其值。

这里可以引用这两篇优秀的博客:Blog1Blog2

<小时/>

我仍然建议您使用第一种方案,因为如果选择第二种方案,管道的体积会增加并且变得复杂。

关于azure - ARM 模板错误 在请求中发现错误的 JSON 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58485101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com