首页 > 解决方案 > 如何在不破坏 ARM 模板的情况下将资源组名称添加到 redis 名称?

问题描述

我正在尝试通过 ARM 模板部署 Redis 并保持 Redis 主机名的唯一性,我将资源组名称添加到它前面:

"variables": {
    "resourceName": "[concat(resourceGroup().id, '-', parameters('redisCacheName'))]"
},

但是我突然收到以下错误,搜索它给出了截然不同的答案:

部署模板验证失败:'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Common.Entities.TemplateGenericProperty' 类型的模板资源 '/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX/resourceGroups/my-group-my-redis' '1' 行和 '640' 列的 1[System.String]' 的段长度不正确。

嵌套资源类型必须具有与其资源名称相同的段数。根资源类型的段长度必须比其资源名称大一。有关使用详情,请参阅https://aka.ms/arm-template/#resources

当我尝试部署 Basic Redis 实例时,我不明白为什么会提到一些“前门”,请问这里的修复是什么?

下面是我的 ARM 模板:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "redisCacheName": {
            "defaultValue": "my-redis",
            "type": "String"
        }
    },
    "variables": {
        "resourceName": "[concat(resourceGroup().id, '-', parameters('redisCacheName'))]"
    },
    "outputs": {
      "RedisCacheEndpoint": {
        "type": "string",
        "value": "[concat(reference(variables('resourceName')).hostName, ':', reference(variables('resourceName')).sslPort)]"
      },
      "RedisCachePassword": {
        "type": "string",
        "value": "[reference(variables('resourceName')).accessKeys.primaryKey]"
      }
    },
    "resources": [
        {
            "type": "Microsoft.Cache/Redis",
            "apiVersion": "2019-07-01",
            "name": "[variables('resourceName')]",
            "location": "[resourceGroup().location]",
            "properties": {
                "sku": {
                    "name": "Basic",
                    "family": "C",
                    "capacity": 1
                },
                "enableNonSslPort": false
            }
        }
    ]
}

这是参数文件:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "redisCacheName": {
            "value": "my-redis"
        }
    }
}

我正在尝试将 Redis 实例部署到名为“my-group”的 RG 中,并在部署时使用参数值“my-redis” -

同时希望最后有一个具有唯一名称“my-group-my-redis.redis.cache.windows.net:6380”的 Redis 端点。

标签: azureredisazure-resource-managerarm-templateazure-template

解决方案


你使用了错误的方法,你应该使用这个:

 "[concat(resourceGroup().name, '-', parameters('redisCacheName'))]"

推荐阅读