我可以在 Azure 模板中动态生成参数吗?

Can I dynamically generate parameters in Azure templates?

AFAIK,所有参数都必须从一开始就在父模板中定义。有没有可能完全动态生成参数,比如循环n次生成n个name字段?

This 展示了参数是如何在模板中定义的。请注意,none 个参数是动态创建的。

根据您的描述,我们可以使用uniqueString()来实现动态生成参数。当您需要为资源创建唯一名称时,此功能很有用。

更多关于uniqueString的信息,请参考这篇link。

您可以使用依赖于参数的参数来模拟类似的东西:

"parameters": {
    "first": {
        "type": "string",
        "defaultValue": "lol"
    },
    "second": {
        "type": "string",
        "defaultValue": "[concat('not_so_', parameters('first'))]"
    }
}

将为您提供 first 参数的 not_so_lol 值。

您的另一种选择是创建根据参数取值的变量:

"parameterOne": "defaultValue": x, - I'm lazy to type out proper definition in json.
...
"option-x": "something"
"option-y": "something-else"
"result": "[variables(concat('option-', parameters('parameterOne')))]"

所以这基本上是 ARM 模板中的 If 语句。 result 变量的值等于 "[variables('option-x')]""[variables('option-y')]",具体取决于您的输入。

另一个(有点复杂的选项)是使用部署输出。因此,一个例子是,您创建一个部署,其中包含您需要的不同输出(基本上您创建了一个常量池),之后,您可以在所有模板中引用该部署输出(假设它们位于同一个订阅中,但您可以在所有订阅中创建该部署)。这基本上会创建一个常量池,您可以根据当前值获得所需的值。

"something": "[reference(concat('resourceGroupName', 'Microsoft.Resources/deployments/', parameters('deploymentName')),'2015-01-01').outputs]",

最后(最复杂的)选项是使用嵌套模板动态构建所需内容。答案有点太多了,但我只想说,在这种情况下,您需要使用嵌套模板作为 aggregator\transformator,您可以在其中输入值并获得所需的输出。这是非常高级的东西,但值得了解。 This 将是一个很好的例子(对于初学者)。