Azure ARM 中数组的嵌套循环或笛卡尔积

问题描述

我正在构建一个 ARM(Azure 资源管理器)模板来创建多个相同类型的资源。假设 sql 服务器的指标警报。我有

  1. 3 个严重级别:[1,2,3]
  2. 20 个名为 [sqlserver_1,sqlserver_2,...] 的服务器
  3. 用于监控 [内存、cpu 负载、连接数] 的 3 个指标

本质上,我总共需要 180 个资源。有什么方法可以构建和使用这些变量的所有可能组合。 IE。对于每台服务器,我需要监控 3 个指标,其中每个指标都可以根据指标级别触发 3 个可能的警报级别。

自然地,我想到了这些数组的笛卡尔积,然后对它进行 copy 循环以填充模板属性。但是,ARM 似乎不支持功能

是否应该考虑编写代码生成器来创建模板而不是尝试弯曲 ARM json,而不是使用 ARM?

解决方法

关于此问题,您可以将 copy 元素添加到模板的资源部分。这样做之后,您可以动态设置要部署的资源数量。详情请参阅herehere

例如

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#","contentVersion": "1.0.0.0","parameters": {
        "org": {
            "type": "array","defaultValue": [
                "contoso","fabrikam","coho"
            ]
        }
    },"resources": [
        {
            "apiVersion": "2017-06-01","type": "Microsoft.Storage/storageAccounts","name": "[concat(parameters('org')[copyIndex()],uniqueString(resourceGroup().id))]","location": "[resourceGroup().location]","sku": {
                "name": "Standard_LRS"
            },"kind": "Storage","properties": {},"copy": {
                "name": "storagecopy","count": "[length(parameters('org'))]"
            }
        }
    ],"outputs": {}
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...