【问题标题】:ARM Template - 'Template parameter JToken type is not valid. Expected 'String, Uri'. Actual 'Object'ARM 模板 - '模板参数 JToken 类型无效。应为“字符串,Uri”。实际的“对象”
【发布时间】: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


【解决方案1】:

您似乎手头有两个文件:

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

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

[...]Object 参数需要一个哈希表作为输入。因此,如果出于某种原因需要使用它们,请务必在将它们与 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多