我尝试使用 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/