使用模板函数为 Azure 资源管理器模板添加灵活性
在此方案中,你希望尽可能轻松地将 Azure 资源管理器 (ARM) 模板部署到不同环境。 争用的其中一个领域是由于 Azure 存储帐户的唯一名称所致。
为了解决此问题,你决定通过使用 ARM 模板函数创建表达式。
什么是 ARM 模板函数?
ARM 模板函数通过在部署期间动态获取值来增加 ARM 模板的灵活性。
若要了解函数,首先需要了解表达式。 表达式是在部署模板时计算的值。 它们以方括号 ([]
) 开头和结尾,并且可以返回字符串、整数、布尔、数组或对象。
在此学习路径的上一个模块中,你已经在资源管理器模板中使用过表达式。 例如,你使用了以下项:
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
表达式是 defaultValue:
特性的值 。 请注意,此表达式包含 ARM 模板函数 resourceGroup()
。 此函数返回有关此模板要部署到的资源组的信息。 .location
从该函数返回的对象中检索一个属性。 函数允许动态构造所需的值。
如何使用 ARM 模板函数?
使用函数时,请遵循以下规则:
将字符串值传递给函数时,请使用单引号。 下面是一个示例:
concat('storage',uniqueString(resourceGroup().id))
。 该函数为concat
,传递给该函数的字符串则为'storage'
。若要在模板函数中使用文本值,则需要转义字符。 转义字符根据要转义的内容而有所不同。
若要将属性设置为 null,可使用
null
或[json('null')]
。 当你提供 null 作为参数时,JSON 函数将返回一个空对象。"stringValue": null, "objectValue": "[json('null')]"
资源管理器为你提供了多个 ARM 模板函数。 这些函数根据其类型分组列出:
- 数组函数,用于处理数组。 例如
first
和last
。 - 比较函数,用于在模板中进行比较。 例如
equals
和greater
。 - 日期函数,用于处理日期。 例如
utcNow
和dateTimeAdd
。 - 部署值函数,用于获取模板各部分中的值以及与部署相关的值。 例如
environment
和parameters
。 - 逻辑函数,用于处理逻辑条件。 例如
if
和not
。 - 数字函数,用于处理整数。 例如
max
和mod
。 - 对象函数,用于处理对象。 例如
contains
和length
。 - 资源函数,用于获取资源值。 例如
resourceGroup
和subscription
。 - 字符串函数,用于处理字符串。 例如
length
和startsWith
。
如何在一个表达式中使用多个函数?
可以结合使用多个模板函数来创建自己的表达式。 在此方案中,需要创建一个表达式,该表达式通过组合前缀输入与资源组 ID 的哈希,为每个资源组创建唯一的名称。 该表达式将生成 dev2hu6fktr577wh
和 staging5his8hgr67tt5
等存储帐户名称。 可使用四个函数来构造此字符串值。 例如:
"[toLower(concat('Storage',uniqueString(resourceGroup().id)))]"
让我们演练一下此表达式。
从 concat 开始,此函数可采用任意数量的参数,并可接受字符串或数组作为参数。 这里使用文本字符串 "Storage"
,并将其与另一个函数 (uniqueString) 的结果连接起来。 uniqueString
函数根据参数创建确定性的哈希字符串。 在该表达式中,你将使用另一个函数 (resourceGroup) 来创建当前资源组 ID 的哈希。
以下是到目前为止我们讨论得出的结果:
为遵守命名约定,需要将此字符串全部转换为小写。 此处,将 toLower 函数作为外围函数添加。
生成的字符串如下所示: