azure - ARM 模板 - 'Template parameter JToken type is not valid. Expected ' 字符串,Uri'。实际 'Object'

标签 azure powershell azure-resource-manager azure-rm-template

我尝试使用 ARM 模板,如下所示:

New-AzResourceGroupDeployment -Name "addDatabase" -ResourceGroupName $resourceGroupeName -TemplateParameterObject $deploy_db_param.parameters -TemplateObject $deploy_db

我收到此错误消息:

'Template parameter JToken type is not valid. Expected 'String, Uri'. Actual 'Object'

我比较了 $deploy_db_param.parameters$deploy_db 中的每个条目。我找不到任何声明为 string 但实际上是 object 的参数条目。

$deploy_db

{
"$schema":  "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion":  "1.0.0.0",
"parameters":  {
                   "administratorLogin":  {
                                              "type":  "string"
                                          },
                   "collation":  {
                                     "type":  "string"
                                 },
                   "databaseName":  {
                                        "type":  "string"
                                    },
                   "tier":  {
                                "type":  "string"
                            },
                   "skuName":  {
                                   "type":  "string"
                               },
                   "location":  {
                                    "type":  "string"
                                },
                   "maxSizeBytes":  {
                                        "type":  "string"
                                    },
                   "serverName":  {
                                      "type":  "string"
                                  },
                   "sampleName":  {
                                      "type":  "string",
                                      "defaultValue":  ""
                                  },
                   "zoneRedundant":  {
                                         "type":  "bool",
                                         "defaultValue":  false
                                     },
                   "licenseType":  {
                                       "type":  "string",
                                       "defaultValue":  ""
                                   },
                   "readScaleOut":  {
                                        "type":  "string",
                                        "defaultValue":  "Disabled"
                                    },
                   "numberOfReplicas":  {
                                            "type":  "int",
                                            "defaultValue":  0
                                        },
                   "minCapacity":  {
                                       "type":  "string",
                                       "defaultValue":  ""
                                   },
                   "autoPauseDelay":  {
                                          "type":  "string",
                                          "defaultValue":  ""
                                      },
                   "enableADS":  {
                                     "type":  "bool",
                                     "defaultValue":  false
                                 },
                   "allowAzureIps":  {
                                         "type":  "bool",
                                         "defaultValue":  true
                                     },
                   "databaseTags":  {
                                        "type":  "string",
                                        "defaultValue":  ""
                                    },
                   "serverTags":  {
                                      "type":  "string",
                                      "defaultValue":  ""
                                  },
                   "enableVA":  {
                                    "type":  "bool",
                                    "defaultValue":  false
                                },
                   "useVAManagedIdentity":  {
                                                "type":  "bool",
                                                "defaultValue":  false,
                                                "metadata":  {
                                                                 "description":  "To enable vulnerability assessments, the user deploying this template must have an administrator or owner permissions."
                                                             }
                                            },
                   "enablePrivateEndpoint":  {
                                                 "type":  "bool",
                                                 "defaultValue":  false
                                             },
                   "privateEndpointNestedTemplateId":  {
                                                           "type":  "string",
                                                           "defaultValue":  ""
                                                       },
                   "privateEndpointSubscriptionId":  {
                                                         "type":  "string",
                                                         "defaultValue":  ""
                                                     },
                   "privateEndpointResourceGroup":  {
                                                        "type":  "string",
                                                        "defaultValue":  ""
                                                    },
                   "privateEndpointName":  {
                                               "type":  "string",
                                               "defaultValue":  ""
                                           },
                   "privateEndpointLocation":  {
                                                   "type":  "string",
                                                   "defaultValue":  ""
                                               },
                   "privateEndpointSubnetId":  {
                                                   "type":  "string",
                                                   "defaultValue":  ""
                                               },
                   "privateLinkServiceName":  {
                                                  "type":  "string",
                                                  "defaultValue":  ""
                                              },
                   "privateLinkServiceServiceId":  {
                                                       "type":  "string",
                                                       "defaultValue":  ""
                                                   },
                   "privateEndpointVnetSubscriptionId":  {
                                                             "type":  "string",
                                                             "defaultValue":  ""
                                                         },
                   "privateEndpointVnetResourceGroup":  {
                                                            "type":  "string",
                                                            "defaultValue":  ""
                                                        },
                   "privateEndpointVnetName":  {
                                                   "type":  "string",
                                                   "defaultValue":  ""
                                               },
                   "privateEndpointSubnetName":  {
                                                     "type":  "string",
                                                     "defaultValue":  ""
                                                 },
                   "enablePrivateDnsZone":  {
                                                "type":  "bool",
                                                "defaultValue":  false
                                            },
                   "privateLinkPrivateDnsZoneFQDN":  {
                                                         "type":  "string",
                                                         "defaultValue":  ""
                                                     },
                   "privateEndpointDnsRecordUniqueId":  {
                                                            "type":  "string",
                                                            "defaultValue":  ""
                                                        },
                   "privateEndpointTemplateLink":  {
                                                       "type":  "string",
                                                       "defaultValue":  ""
                                                   },
                   "privateDnsForPrivateEndpointTemplateLink":  {
                                                                    "type":  "string",
                                                                    "defaultValue":  ""
                                                                },
                   "privateDnsForPrivateEndpointNicTemplateLink":  {
                                                                       "type":  "string",
                                                                       "defaultValue":  ""
                                                                   },
                   "privateDnsForPrivateEndpointIpConfigTemplateLink":  {
                                                                            "type":  "string",
                                                                            "defaultValue":  ""
                                                                        },
                   "allowClientIp":  {
                                         "type":  "bool",
                                         "defaultValue":  false
                                     },
                   "clientIpRuleName":  {
                                            "type":  "string",
                                            "defaultValue":  ""
                                        },
                   "clientIpValue":  {
                                         "type":  "string",
                                         "defaultValue":  ""
                                     },
                   "storageAccountType":  {
                                              "type":  "string",
                                              "defaultValue":  ""
                                          }
               },
<小时/>
$deploy_db_param
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "administratorLogin": {
        "value": "adminacc"
    },
    "collation": {
        "value": "SQL_Latin1_General_CP1_CI_AS"
    },
    "databaseName": {
        "value": "dbname"
    },
    "tier": {
        "value": "Standard"
    },
    "skuName": {
        "value": "S0"
    },
    "location": {
        "value": "westeurope"
    },
    "maxSizeBytes": {
        "value": "268435456000"
    },
    "sampleName": {
        "value": ""
    },
    "serverName": {
        "value": "dbserver"
    },
    "licenseType": {
        "value": ""
    },
    "readScaleOut": {
        "value": "Disabled"
    },
    "zoneRedundant": {
        "value": false
    },
    "numberOfReplicas": {
        "value": 0
    },
    "enableADS": {
        "value": false
    },
    "allowAzureIps": {
        "value": false
    },
    "allowClientIp": {
        "value": false
    },
    "clientIpValue": {
        "value": "X.X.X.X"
    },
    "databaseTags": {
        "value": ""
    },
    "serverTags": {
        "value": ""
    },
    "enableVA": {
        "value": false
    },
    "useVAManagedIdentity": {
        "value": false
    },
    "enablePrivateEndpoint": {
        "value": false
    },
    "privateEndpointNestedTemplateId": {
        "value": "id"
    },
    "privateEndpointSubscriptionId": {
        "value": ""
    },
    "privateEndpointResourceGroup": {
        "value": ""
    },
    "privateEndpointName": {
        "value": ""
    },
    "privateEndpointLocation": {
        "value": ""
    },
    "privateEndpointSubnetId": {
        "value": ""
    },
    "privateLinkServiceName": {
        "value": ""
    },
    "privateLinkServiceServiceId": {
        "value": ""
    },
    "privateEndpointVnetSubscriptionId": {
        "value": ""
    },
    "privateEndpointVnetResourceGroup": {
        "value": ""
    },
    "privateEndpointVnetName": {
        "value": ""
    },
    "privateEndpointSubnetName": {
        "value": ""
    },
    "enablePrivateDnsZone": {
        "value": true
    },
    "privateLinkPrivateDnsZoneFQDN": {
        "value": "privatelink.database.windows.net"
    },
    "privateEndpointDnsRecordUniqueId": {
        "value": "id"
    },
    "privateEndpointTemplateLink": {
        "value": "link"
    },
    "privateDnsForPrivateEndpointTemplateLink": {
        "value": "link"
    },
    "privateDnsForPrivateEndpointNicTemplateLink": {
        "value": "link"
    },
    "privateDnsForPrivateEndpointIpConfigTemplateLink": {
        "value": "link"
    },
    "clientIpRuleName": {
        "value": "RuleName"
    },
    "storageAccountType": {
        "value": ""
    }
}

}

我剪掉了文件的下半部分,其中资源、函数和变量在模板文件中声明。(据我所知,没有引用字符串形式的参数,它们实际上是对象)

<小时/>

在此方法之前,我尝试实现这样的命令

    New-AzResourceGroupDeployment -Name "addDatabase" -ResourceGroupName $resourceGroupeName`
-adminisstratorLogin $deploy_db_param.paramters.administratorLogin.value`
-administratorLoginPassword $deploy_db_param.parameters.administartorLoginPassword.value`
-collation $deploy_db_param.parameters.collation.value`
.
.
.

这确实有效,但我遇到了问题 => 创建此数据库后,我还尝试创建一个 KeyVault。

New-AzResourceGroupDeployment

部署需要一个 -Name,但 KeyVault 还需要一个 -name,这会导致参数绑定(bind)不明确。因此,我决定使用 -TemplateParameterObject $deploy_db_param.parameters -TemplateObject $deploy_db 无论如何,它看起来更干净。

有人知道吗?
(我很清楚,administratorLogin 的密码丢失了 - ARM 在 secureString 方面存在问题,但这是另一个故事了,哈哈)

最佳答案

您似乎手头有这两个文件:

  • 其中一个用于部署参数
  • 一个用于资源本身(在您的情况下为数据库)

尝试使用 -TemplateParameterFile 而不是 -TemplateParameterObject,然后传递参数文件路径。并使用 -TemplateFile 而不是 -TemplateObject,然后传递您的资源文件路径。

[...]对象参数期望哈希表作为输入。因此,如果出于某种原因需要使用它们,请务必在使用 New-AzResourceGroupDeployment cmdlet 之前对其进行转换:

PS C:\> $ResourcesFile = [System.IO.File]::ReadAllText("D:\Azure\Templates\resources.json")
PS C:\> $ResourcesObject = ConvertFrom-Json $ResourcesFile -AsHashtable

PS C:\> $ParametersFile = [System.IO.File]::ReadAllText("D:\Azure\Templates\parameters.json")
PS C:\> $ParametersObject = ConvertFrom-Json $ParametersFile -AsHashtable

关于azure - ARM 模板 - 'Template parameter JToken type is not valid. Expected ' 字符串,Uri'。实际 'Object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65034552/

相关文章:

powershell - 在 Azure 中使用没有公共(public) IP 的 VSTS 任务 'PowerShell on Target Machines'

c# - Azure Api 应用程序 - IP 限制 - 无法获取正确的客户端 IP 地址和/或主机名

azure CloudBlobDirectory.ListBlobs() 返回 "The specified resource does not exist.",但 fetchAttributes() 使用相同的数据

azure - [警告]找不到键 : CorrelationIdForARM 的 loc 字符串

Azure Pipeline部署重置应用程序配置

c# - 如何将流从 HttpContent 结果上传到 Azure 文件存储

powershell - 有没有办法在不依赖 dotnet 命令的情况下检测 PowerShell 7.32 使用的 .NET 版本?

Python 或 Powershell — 读取 csv 并排序和收集要在电子邮件中发送的数据

powershell - 将 ObjectGuid 从 AD 转换为 GUID powershell

azure - 如何在 Bicep 中填充 Azure SignalR 服务的上游代码