我有一个ARM模板,其中提供了许多Web应用程序。我想在这些Web应用程序上添加IP限制,仅允许在这些应用程序之间进行访问。我可以使用以下方式检索IP:
reference(resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('appName1')),'2015-08-01').PossibleOutboundIpAddresses
以下是我不知道如何解决的问题。
我已将resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('appName1'))
部分替换为变量,以将其缩短一点。我可以以某种方式进一步缩短它吗?正如您很快就会看到的那样,它变得更加复杂。
我为每个Web应用程序创建了一个资源部分,其中有一个属性部分。 ipSecurityRestrictions位于此部分中。由于PossibleOutboundIpAddresses返回一个字符串,因此我使用split创建了一个列表并复制以迭代IP地址。但这对我不起作用,并返回以下错误消息:
The template function 'copyIndex' is not expected at this location. The function can only be used in a resource with copy specified
该部分如下所示:
"resources": [
{
"type": "config",
"name": "web",
"apiVersion": "2016-08-01",
"properties": {
"copy": [
{
"name": "ipSecurityRestrictions",
"count": "[length(split(reference(variables('appName1'),'2015-08-01').PossibleOutboundIpAddresses, ','))]",
"input": {
"ipAddress": "[split(reference(variables('appName1'),'2015-08-01').PossibleOutboundIpAddresses, ',')[copyIndex('ipSecurityRestrictions')]]",
"subnetMask": "255.255.255.254"
}
}
],
},
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('appName1'))]"
]
}
]
我觉得我遵循了可以在网上找到的所有示例。 另一个问题是,每次我要引用IP列表时都必须写许多字符。更糟糕的是,此列表应该是所有已配置的Web应用程序中的合并列表。因此,如果我有3个Web应用程序,那么这条线将是难以置信的漫长而复杂。
答案 0 :(得分:0)
好,第一个问题:我可以缩短它吗?
答:这实际上取决于您显示的内容,而不取决于(如果资源位于同一模板中,则可以删除api版本)。
第二个问题:在此位置不应使用模板函数'copyIndex'。该功能只能在指定了副本的资源中使用。
答:很遗憾,您无法做到这一点(运行时\编译时播放)。您必须使用嵌套模板才能实现相同的结果。
第三个问题:对此有更好的解决方法吗?
答:可能。我将所有3个Web应用程序创建为嵌套部署(非内联),并返回一个字符串数组(类似于您的操作)
"outputs" : {
"array": {
"type": "array",
"value": "[split(reference(variables('appName')]"
}
}
然后,我将使用concat在一次运行中处理这些操作,并且类似您正在执行的操作(但是这也必须在嵌套模板中)。像这样:
"[concat(reference('deployment1').outputs.array.value, reference('deployment2').outputs.array.value, reference('deployment3').outputs.array.value)]"
,然后在嵌套模板中可以执行以下操作:
"copy": [
{
"name": "ipSecurityRestrictions",
"count": "[length(parameters('myArray'))]",
"input": {
"ipAddress": "[parameters('myArray')[copyIndex('ipSecurityRestrictions')]]]",
"subnetMask": "255.255.255.254"
}
}
],