如何在不破坏 ARM 模板的情况下将资源组名称预置到 redis 名称中?

问题描述 投票:0回答:1

我试图通过 ARM 模板来部署 Redis,为了保持 Redis 主机名的唯一性,我将资源组名称前置。

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

但是我突然得到了以下错误,搜索后得到了不同的答案:

部署模板验证失败:"类型为'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Common.Entities.TemplateGenericProperty`1[System.String]'的模板资源'subscriptionsXXXXXX-XXXX-XXXX-XXXX-XXXXXXresourceGroupsmy-group-my-redis'在行'1'和列'640'的段长不正确。

嵌套的资源类型必须有与其资源名称相同的段数。一个根资源类型的段长必须比它的资源名大一个。请看 https:/aka.msarm-template#resources。 的使用细节。

我不明白为什么当我试图部署一个Basic Redis实例时,会提到一些 "Frontdoor",请问这里的修复方法是什么?

下面是我的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实例部署到我的RG中,名为 "my-group",在部署时我使用了参数值 "my-redis"。

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

azure redis azure-resource-manager arm-template azure-template
1个回答
1
投票

你用错了方法,应该用这个。

 "[concat(resourceGroup().name, '-', parameters('redisCacheName'))]"
© www.soinside.com 2019 - 2024. All rights reserved.