Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource

Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource

我正在尝试使用 visual studio 部署存储帐户 arm 部署。下面是我的模板

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "storageAccountType": {
        "type": "array",
        "defaultValue": [
          "Standard_LRS",
          "Standard_LRS",
          "Standard_GRS"
        ]
      },
      "storageAccountNamePrefix": {
        "type": "string",
        "defaultValue": "az",
        "minLength": 1
      }
    },
  "variables": {

  },
  "resources": [
    {
      "name": "[concat(parameters('storageAccountNamePrefix'),'strg', copyIndex(),uniqueString(resourceGroup().id))]",
      "type": "Microsoft.Storage/storageAccounts",
      "location": "[resourceGroup().location]",
      "apiVersion": "2015-06-15",
      "copy": {
        "count": "[length(parameters('storageAccountType'))]",
        "name": "storageCopy"
      },
      "sku": {
        "name": "[parameters('storageAccountType')[copyIndex()]]"
      },
      "tags": {
        "displayName": "[parameters('storageAccountNamePrefix')[copyIndex()]]"
      },
      "properties": {
        "accountType": "[parameters('storageAccountType')[copyIndex()]]"
      },
      "kind": "Storage"
    }
  ],
  "outputs": {
  }
}

错误抛出在下面一行

 "name": "[concat(parameters('storageAccountNamePrefix'),'strg', copyIndex(),uniqueString(resourceGroup().id))]",

错误

Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource 'azstrg0u2pzkvcrv3eo4' at line '25' and column '10' is not valid: Template language expression property 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Expressions.TemplateFunctionExpression' can't be evaluated.  Please see https://aka.ms/arm-template-expressions for usage details..'.

我不明白为什么会失败,因为我能够在其他资源名称中使用 concat 函数。我知道存储帐户名称只能包含字符和数字,不能包含特殊字符。在错误中,资源的解析名称被准确显示。所以从错误信息中很难知道表达式出了什么问题。

我试过你的模板,下面的代码似乎有问题:

"tags": {
    "displayName": "[parameters('storageAccountNamePrefix')[copyIndex()]]"
  },

因为“'storageAccountNamePrefix'”不是数组。所以它会给你错误信息,请尝试以下操作:

"tags": {
    "displayName": "[parameters('storageAccountNamePrefix')]"
  },

2.Please 请注意,在 2016-01-01 版本之前,'sku' 被称为 'accountType' 并在 'properties' 信封下找到。我们可以在 this article 找到此信息。所以我认为我们需要在 api 版本为“2015-06-15”时删除 sku 和 kind。 我已经测试了以下两个资源信息模板,它工作成功。请试一试。

"resources": [
{
  "name": "[concat(parameters('storageAccountNamePrefix'),'strg', copyIndex(),uniqueString(resourceGroup().id))]",
  "type": "Microsoft.Storage/storageAccounts",
  "location": "[resourceGroup().location]",
  "apiVersion": "2015-06-15",
  "copy": {
    "count": "[length(parameters('storageAccountType'))]",
    "name": "storageCopy"
  },
  "tags": {
    "displayName": "[parameters('storageAccountNamePrefix')]"
  },
  "properties": {
    "accountType": "[parameters('storageAccountType')[copyIndex()]]"
  }
}],

"resources": [
{
  "name": "[concat(parameters('storageAccountNamePrefix'),'strg', copyIndex(),uniqueString(resourceGroup().id))]",
  "type": "Microsoft.Storage/storageAccounts",
  "location": "[resourceGroup().location]",
  "apiVersion": "2016-01-01",
  "copy": {
    "count": "[length(parameters('storageAccountType'))]",
    "name": "storageCopy"
  },
  "sku": {
    "name": "[parameters('storageAccountType')[copyIndex()]]"
  },
  "tags": {
    "displayName": "[parameters('storageAccountNamePrefix')]"
  },
  "kind": "Storage"
}],