【发布时间】:2020-11-27 09:03:36
【问题描述】:
我正在尝试使用以下 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`
.
.
.
哪个 DID 有效,但我遇到了问题 => 创建此数据库后,我还尝试创建一个 KeyVault。
New-AzResourceGroupDeployment
部署需要-Name,但KeyVault 还需要-name,这会导致参数绑定不明确。所以我决定使用-TemplateParameterObject $deploy_db_param.parameters -TemplateObject $deploy_db,反正看起来更干净。
有人知道吗?
(我很清楚administratorLogin 的密码丢失了——ARM 有secureString 的问题,但这是另一个故事,哈哈)
【问题讨论】:
-
那里的
$deploy_db_param和$deploy_db变量是什么?你能分享他们的定义吗?我已经发布了跟进的答案。如果可能的话,尝试一下,这样我们就可以讨论它是如何进行的。
标签: azure powershell azure-resource-manager azure-template