【问题标题】:ARM template to add custom hostname to a set of websites用于将自定义主机名添加到一组网站的 ARM 模板
【发布时间】:2018-03-21 00:11:39
【问题描述】:

我正在尝试使用此 Azure 资源管理器模板代码 sn-p 将自定义域添加到 web 应用程序集。 Web 应用程序正在正确创建,流量管理器配置文件也是如此。但是,添加自定义主机名时 ARM 模板失败。请注意,我使用的是传递给模板的可变参数来创建网站。

    {
      "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
      "type": "Microsoft.Web/sites",
      "kind": "app,linux,container",
      "location": "[parameters('webAppLocations')[copyIndex()]]",
      "apiVersion": "2016-08-01",
      "copy": {
        "count": "[length(parameters('webAppLocations'))]",
        "name": "siteCopy"
      },
      "dependsOn": [
        "farmCopy"
      ],
      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2016-08-01",
          "dependsOn": [
            "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
          ],
          "tags": {
            "displayName": "Application settings"
          },
          "properties": {
            "publishingUsername": "[variables('publishingUsername')]",
            "DOCKER_CUSTOM_IMAGE_NAME": "[parameters('dockerImageName')]"
          }
        }
      ],
      "tags": {
        "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id))), '-', copyIndex())]": "Resource",
        "displayName": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
      },
      "properties": {
        "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-', copyIndex()))]"
      }
    },
    {
      "type": "Microsoft.Web/sites/hostnameBindings",
      "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]",
      "apiVersion": "2016-08-01",
      "location": "[resourceGroup().location]",
      "properties": {
      },
      "dependsOn": [
        "[concat('Microsoft.Web/sites/',parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]"
      ]
    }

2018-03-20T23:50:20.7707394Z ##[error]Deployment template validation failed: 'The template resource '[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]' at line '1' and column '2892' is not valid: The template function 'copyIndex' is not expected at this location. The function can only be used in a resource with copy specified. Please see https://aka.ms/arm-copy for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.'.
2018-03-20T23:50:20.7723109Z ##[error]Task failed while creating or updating the template deployment.

请注意,copyIndex() 对于模板中其他地方的网站名称可以正常工作。那么为什么它不适用于“Microsoft.Web/sites/hostnameBindings”部分呢?我被难住了。

这里是参数。注意 webAppLocations 参数,它是一个数组。

"parameters": {
    "webAppNamePrefix": {
      "type": "string",
      "minLength": 1
    },
    "dockerImageName": {
      "type": "string",
      "metadata": {
        "description": "Name of docker image to use"
      }
    },
    "farmSkuName": {
      "type": "string",
      "metadata": {
        "description": "Describes plan's pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
      }
    },
    "environmentType": {
      "type": "string",
      "allowedValues": [
        "dev",
        "qa",
        "prod"
      ],
      "metadata": {
        "description": "Environment type name"
      }
    },
    "webAppLocations": {
      "type": "array"
    },
    "trafficManagerPrefix": {
      "type": "string"
    },
    "customHostname": {
      "type": "string",
      "metadata": {
          "description": "The custom hostname that you wish to add."
      }
    }    
  },

【问题讨论】:

    标签: azure azure-web-app-service arm-template


    【解决方案1】:

    你永远不应该在resources 属性之后放置任何东西,不是因为它破坏了模板,而是因为它更难查看。在您的情况下,您将 Microsoft.Web/sites/hostnameBindings 放在资源之外。

    {
        "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
        "type": "Microsoft.Web/sites",
        "kind": "app,linux,container",
        "location": "[parameters('webAppLocations')[copyIndex()]]",
        "apiVersion": "2016-08-01",
        "copy": {
            "count": "[length(parameters('webAppLocations'))]",
            "name": "siteCopy"
        },
        "dependsOn": [
            "farmCopy"
        ],
        "tags": {
            "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id))), '-', copyIndex())]": "Resource",
            "displayName": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
        },
        "properties": {
            "name": "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]",
            "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-', copyIndex()))]"
        },
        "resources": [
            {
                "name": "appsettings",
                "type": "config",
                "apiVersion": "2016-08-01",
                "dependsOn": [
                    "[concat(parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex())]"
                ],
                "tags": {
                    "displayName": "Application settings"
                },
                "properties": {
                    "publishingUsername": "[variables('publishingUsername')]",
                    "DOCKER_CUSTOM_IMAGE_NAME": "[parameters('dockerImageName')]"
                }
            },
            {
                "type": "hostnameBindings",
                "name": "[parameters('customHostname')]",
                "apiVersion": "2016-08-01",
                "location": "[resourceGroup().location]",
                "properties": {},
                "dependsOn": [
                    "[concat('Microsoft.Web/sites/',parameters('webAppNamePrefix'), '-', uniqueString(resourceGroup().id), '-site-', copyIndex(), '/', parameters('customHostname'))]"
                ]
            }
        ]
    }
    

    【讨论】:

    • 看起来不错 4c74356b41 (说起来真拗口!)。不幸的是,我现在遇到了另一个错误(我认为我已经向前迈进了)。错误是:##[error]Deployment template validation failed: 'The template resource 'domain-jmfjo3qd53vd2-site-0' at line '0' and column '0' is not valid: The resource identificator 'Microsoft.Web/sites/prefix-jmfjo3qd53vd2-site-0/host.domain.com' is malformed. Please see https://aka.ms/arm-template-expressions/#reference for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.' 知道为什么会这样吗?谢谢
    • 试试这个变种?我忘了修复资源类型\名称。我的错。
    • 谢谢。我又试了一次。不幸的是,恐怕还是不太对劲。现在错误读取为`##[错误]部署模板验证失败:'0'行和'0'列的模板资源'host.domain.com'无效:资源标识符'Microsoft.Web/sites/ domain-jmfjo3qd53vd2-site-0/host.domain.com' 格式错误`
    • 好的,所以名称可能有问题。尝试使用门户创建相同的资源
    • 好的。创建的 webapp 的名称,还是自定义域的名称?
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2011-01-06
    • 1970-01-01
    • 2016-07-02
    • 2011-12-02
    • 2018-06-09
    相关资源
    最近更新 更多