Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当资源在主位置不可用时,如何在Azure资源管理器模板的辅助位置部署资源?_Azure_Azure Devops_Arm Template - Fatal编程技术网

当资源在主位置不可用时,如何在Azure资源管理器模板的辅助位置部署资源?

当资源在主位置不可用时,如何在Azure资源管理器模板的辅助位置部署资源?,azure,azure-devops,arm-template,Azure,Azure Devops,Arm Template,我有一个ARM模板,用于在给定资源组的位置创建资源。以下是如何部署信号器服务: { "apiVersion": "2018-10-01", "name": "[variables('signalRName')]", "type": "Microsoft.SignalRService/signalR", &q

我有一个ARM模板,用于在给定资源组的位置创建资源。以下是如何部署信号器服务:

    {
        "apiVersion": "2018-10-01",
        "name": "[variables('signalRName')]",
        "type": "Microsoft.SignalRService/signalR",
        "location": "[resourceGroup().location]",
        "tags": {},
        "sku": {
            "name": "Free_F1",
            "tier": "Free"
        },
        "properties": { }
   }
在加拿大,我可以访问两个地点:
加拿大东部
加拿大中部
。但是,在加拿大中部尚不可用,但在加拿大东部可用的信号机:

ew AzResourceGroupDeployment:11:40:32 AM-错误: 代码=LocationNotAvailableForResourceType;Message=所提供的 位置“canadacentral”不适用于资源类型 “Microsoft.SignalRService/SignalR”。项目的可用区域列表 资源类型为 ‘东美国、西美国、东南亚、西欧、西美国2、东美国2、北欧、澳大利亚东部、加拿大东部、中美洲、日本东部、英国南部、中南美洲、巴西南部、法国中部、韩国中部’

问题


如何将主位置不可用的资源部署到某个辅助/后备位置?

您不能这样做,您必须事先知道这一点,或者只是在arm模板之外处理故障并重新部署到另一个区域。大多数服务都提供了一个api端点来确定哪些位置受支持

我已经找到了一种方法来实现它,只需做一些调整。首先,我必须在参数文件中为自己指定一个辅助位置参数

例如,在以下参数文件中,我指定
加拿大中部
为主要位置,而
加拿大东部
为次要位置:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "primaryLocation": {
                "value": "Canada Central"
            },
            "secondaryLocation": {
                "value": "Canada East"
            }
            ...
        }
    }
此参数在我的部署模板文件中定义:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "primaryLocation": {
                "type": "string",
                "minLength": 3,
                "maxLength": 32
            }
            "secondaryLocation": {
                "type": "string",
                "minLength": 3,
                "maxLength": 32
            }
        }
        ... }
然后我发现了那份声明。此语句返回给定资源类型的可用资源

因此,我更新了
location
属性,以便在SignalR可用的位置列表中查找资源组的位置。它在列表中,然后我使用资源组的位置。否则,我将使用提供的辅助位置

    {
        "apiVersion": "2018-10-01",
        "name": "[variables('signalRName')]",
        "type": "Microsoft.SignalRService/signalR",
        "location": "[if(contains(providers('Microsoft.SignalRService', 'signalR').locations, parameters('primaryLocation')), parameters('primaryLocation'), parameters('secondaryLocation'))]",
        "tags": {},
        "sku": {
            "name": "Free_F1",
            "tier": "Free"
        },
        "properties": { }
    }
注意


我无法使用
resourceGroup().location
,因为它返回的位置与
提供程序('Microsoft.SignalRService','signalR').locations的格式不同。第一个将返回类似于
canadaeast
的内容,而第二个返回
canadaeast

嗯,这几乎是我的第一个答案