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